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:
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
Contenidos