Saltar al contenido

Construyendo su primera solución de análisis de pitón: Parte 2

La regresión lineal es famosa por sus predicciones. Tanto el modelo de regresión lineal (LR) como el de Regresión Forestal Aleatoria (RFR) se basan en el aprendizaje supervisado y pueden utilizarse para la clasificación y la regresión . En comparación con la RFR, la LR es simple y fácil de implementar. Pero la simplicidad siempre viene a costa de sobreajustar el modelo. Necesita regularización para evitarlo. RFR contiene regularización incorporada , y podemos centrarnos más en el modelo. Aprende más sobre LR y su sintaxis aquí.

El simple LR matemático se escribe como:

Construyendo su primera solución de análisis de pitón: Parte 2
Construyendo su primera solución de análisis de pitón: Parte 2

Bosque aleatorio es un regresor avanzado . utiliza la técnica del conjunto para la predicción. Un modelo compuesto de muchos modelos se llama un modelo de conjunto . Hay dos tipos de embolsado y potenciado . RFR es una técnica de embolsado . Los árboles de los bosques al azar se ejecutan en paralelo. Mientras los árboles se están construyendo, no interactúan entre sí. Una vez que todos los árboles están construidos, entonces se vota o se hace un promedio a través de ellos.

Así es como se ve el árbol RFR:

Para evitar cualquier error de tipo flotante, prepararemos el conjunto de datos para la predicción.

1data_pred = pd.read_csv(r$0027nyc_airbnbAB_NYC_2019.csv$0027)

python

123#prepare-datadata_pred.drop([$0027nombre$0027,$0027nombre_de_host$0027,$0027apellido_revisión$0027], inplace=True, axis=1)data_pred[$0027revisiones_por_mes$0027]= data_pred[$0027revisiones_por_mes$0027].fillna(valor=0, inplace=False)

pitón

Como vimos antes, el grupo_de_vecinos, el vecindario y el tipo de habitación están en forma de texto. Nuestro modelo no llevará a cabo su predicción con datos de texto para hacer comprensible el modelo de datos. Utilizamos la clase LableEncoder del sklearn.

12345678910le = preprocessing.LabelEncoder()le.fit(data_pred[$0027neighborhood_group$0027])data_pred[$0027neighborhood_group$0027]=le.transform(data_pred[$0027neighborhood_group$0027])le. fit(data_pred[$0027barrio$0027])data_pred[$0027barrio$0027]=le.transform(data_pred[$0027barrio$0027])le.fit(data_pred[$0027tipo_de_habitación$0027])data_pred[$0027tipo de habitación$0027]=le.transform(data_pred[$0027tipo de habitación$0027])

python

1predi= random_forest.predict(X_test)

Python

Hold-out

El modelo aprende en el conjunto de datos del tren . Contiene una salida conocida. La predicción de nuestro modelo se hace en el conjunto de datos de la prueba . Los datos se dividen en la proporción de 70:30 o 80:20. Hemos fijado el tamaño en 80:20 para este modelo.

Comprobaremos su fiabilidad con una puntuación de R2.

12345678lm = LinearRegression()X = data_pred.drop([$0027precio$0027,$0027longitud$0027], inplace=Falso, axis=1)y = data_pred[$0027precio$0027]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101)lm.fit(X_train, y_train)

pitón

1predicciones = lm.predict(X_test)

python

123456789101112# Evaluatedd-metricsmae = metrics.mean_absolute_error(y_test, predictions)mse = metrics.mean_squared_error(y_test, predictions)rmse = np.sqrt(metrics. mean_squared_error(y_test, predicciones))r2 = metrics.r2_score(y_test, predicciones)print($0027MAE (Mean-Absolute-Error): %s$0027%mae)print($0027MSE (Mean-Squared-Error): %s$0027%mse)print($0027RMSE (Root-MSE): %s$0027%rmse)print($0027R2 score: %s$0027%r2)

pitón

El puntaje de R2 para el método de retención no funcionó bien para este conjunto de datos. 0,09 es inestable y puede llevar a que sobreajuste o subajuste los datos. Comprobaremos el método de validación cruzada. Pero este problema no es permanente. Podemos mejorar la puntuación repitiendo los cálculos varias veces en el subconjunto de datos.

Validación cruzada (pliegue k)

Este es un procedimiento para estimar la habilidad del modelo de aprendizaje de la máquina. La validación cruzada (CV) tiene un parámetro K que denota el número de secciones/pliegues. Cada pliegue se utiliza como un conjunto de pruebas en algún momento. Una vez completado el proceso, podemos resumir y evaluar la matriz.

12de sklearn.model_selection import KFold, GridSearchCV, cross_val_scorefrom sklearn.ensemble import RandomForestRegressor

pitón

Usaremos un CV quíntuple usando un modelo random_forest(). cross_val_score se ajusta al modo y genera las puntuaciones del CV.

1234kf = KFold(n_splits=5, shuffle=True, random_state=27)random_forest = RandomForestRegressor(n_estimators=100, criterion=$0027mse$0027, max_depth=20, min_samples_split=2)cv_score = cross_val_score(random_forest, X_train, y_train, scoring=$0027r2$0027, cv=kf)cv_score

pitón

1random_forest.fit(X_train, y_train)

pitón

1predi= random_forest.predict(X_test)

python

1234567891011# Evaluatedd-metricsmae = metrics.mean_absolute_error(y_test, predi)mse = metrics.mean_squared_error(y_test, predi)rmse = np.sqrt(metrics.mean_squared_error(y_test, predi))r2 = metrics. r2_score(y_test, predi)print($0027MAE (Mean-Absolute-Error): %s$0027%mae)print($0027MSE (Mean-Squared-Error): %s$0027%mse)print($0027RMSE (Root-MSE): %s$0027%rmse)print($0027R2 score: %s$0027%r2)

pitón

El puntaje de R2 es mucho más estable y el MSE es también menor que el que obtuvimos con el método de retención. Recuerda usar el CV sólo cuando tu método de retención tenga un rendimiento inferior. Ahora vamos a comparar el valor predicho con el valor real.

12error2 = pd.DataFrame({$0027Valores Actuales$0027: np.array(y_test).flatten(),$0027Valores Predichos$0027: predi.flatten()})error2.head(10)#trata de lineal

pitón

1print(f$0027Model_Accuracy: {random_forest.score(X, y)}$0027)

python

1Model_Accuracy: 0.7992861793429817