Conceptos básicos del aprendizaje automático 10: revisión de algoritmos de regresión (basado en el conjunto de datos de precios de la vivienda en Boston)

La sección anterior mostró cómo revisar los algoritmos de clasificación e introdujo seis algoritmos de clasificación diferentes y
los revisó de la misma manera usando el mismo conjunto de datos, y este capítulo revisará los algoritmos de regresión de la misma manera.

En esta sección aprenderás:

  • Cómo revisar algoritmos de regresión para aprendizaje automático.
  • Cómo revisar cuatro algoritmos de clasificación lineal.
  • Cómo revisar tres algoritmos de clasificación no lineal.

Descripción general del algoritmo

Este capítulo revisará siete algoritmos de regresión. Primero, se introducen cuatro algoritmos lineales:

  • Algoritmo de regresión lineal.
  • Algoritmo de regresión de crestas (algoritmo de regresión de crestas).
  • Algoritmo de regresión de lazo.
  • Algoritmo de regresión de Elastic Net.

Luego se introducen tres algoritmos no lineales:

  • K algoritmo del vecino más cercano (KNN).
  • Algoritmos de clasificación y árbol de regresión.
  • Máquinas de vectores de soporte (SVM).

Este capítulo examina algoritmos de regresión que utilizan un conjunto de datos de precios de vivienda en Boston, utilizando una validación cruzada de 10 veces para separar los datos y aplicarlos a todos los algoritmos. Además, el modelo del algoritmo se evalúa mediante el error cuadrático medio. La función en scikit-learn cross_val_score()函数puede ayudar a evaluar el modelo de algoritmo y usamos esta función para evaluar el modelo de algoritmo.

Análisis de algoritmo lineal

Primero, presente los cuatro algoritmos utilizados en scikit-learn para abordar problemas de regresión en el aprendizaje automático.

Algoritmo de regresión lineal

El algoritmo de regresión lineal es un método de análisis estadístico que utiliza el análisis de regresión en estadística matemática para determinar la relación cuantitativa entre dos o más variables que dependen entre sí. Es ampliamente utilizado. Su expresión es y=w'x+e, y e indica que el error obedece a una distribución normal con un valor medio de 0. En el análisis de regresión, solo se incluyen una variable independiente y una variable dependiente, y la relación entre las dos se puede aproximar mediante una línea recta. Este análisis de regresión se denomina análisis de regresión lineal unaria.

Si en el análisis de regresión se incluyen dos o más variables independientes y existe una relación lineal entre la variable dependiente y la variable independiente, se denomina análisis de regresión lineal múltiple .

La implementación del algoritmo de regresión lineal en scikit-learn es la clase LinearRegression .

El código se muestra a continuación:

Dirección de descarga del conjunto de datos


import pandas as pd
from sklearn.linear_model import  LinearRegression

from sklearn.model_selection import  KFold, cross_val_score

#数据预处理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)

array = data.values

X = array[:, 0:13]
Y = array[:, 13]

n_splits = 10

seed = 7

kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = LinearRegression()

scoring = 'neg_mean_squared_error'

results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)

print("LinearRegression MSE: %.3f (%.3f)" % (results.mean(), results.std()))




resultado de la operación:

LinearRegression MSE: -23.747 (11.143)

Algoritmo de regresión de crestas

El algoritmo de regresión de cresta es un método de regresión de estimación sesgada especialmente utilizado para el análisis de datos colineales. En realidad, es un método de estimación de mínimos cuadrados mejorado. Al renunciar a la insesgación del método de mínimos cuadrados,
se pierde parte de la información y se reduce precisión, el método de regresión que obtiene coeficientes de regresión que son más realistas y confiables es mejor que el método de mínimos cuadrados para ajustar datos mal condicionados. La implementación del algoritmo de regresión de crestas en scikit-learn es la clase Ridge.

El código se muestra a continuación:


import pandas as pd
from sklearn.linear_model import LinearRegression, Ridge

from sklearn.model_selection import  KFold, cross_val_score

#数据预处理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)

array = data.values

X = array[:, 0:13]
Y = array[:, 13]

n_splits = 10

seed = 7

kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = Ridge()

scoring = 'neg_mean_squared_error'

results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)

print("Ridge MSE: %.3f (%.3f)" % (results.mean(), results.std()))




resultado de la operación:

Ridge MSE: -23.890 (11.407)

algoritmo de regresión de lazo

El algoritmo de regresión de lazo es similar al algoritmo de regresión de cresta. El algoritmo de regresión de lazo también penalizará el coeficiente de regresión. En la regresión de lazo, se penalizará el valor absoluto del coeficiente de regresión. Además, puede reducir el grado de variación y mejorar la precisión de los modelos de regresión lineal. El algoritmo de regresión de lazo es un poco diferente del algoritmo de regresión de cresta en que la función de penalización que utiliza es un valor absoluto en lugar de un cuadrado . Esto da como resultado valores penalizados (o iguales a la suma de los valores absolutos de las estimaciones de restricciones) que hacen que algunas estimaciones de parámetros sean iguales a cero. El uso de un valor de penalización mayor hará que el valor se reduzca más cerca de cero. Esto hará que elijamos variables de las n variables dadas. Si el conjunto de variables predicho es muy similar, el algoritmo de regresión de lazo selecciona una de las variables y reduce las demás a cero.

La clase de implementación en scikit-learn es Lasso.

El código se muestra a continuación:


import pandas as pd
from sklearn.linear_model import LinearRegression, Ridge, Lasso

from sklearn.model_selection import  KFold, cross_val_score

#数据预处理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)

array = data.values

X = array[:, 0:13]
Y = array[:, 13]

n_splits = 10

seed = 7

kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = Lasso()

scoring = 'neg_mean_squared_error'

results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)

print("Lasso MSE: %.3f (%.3f)" % (results.mean(), results.std()))




resultado de la operación:

Lasso MSE: -28.746 (12.002)

Algoritmo de regresión neta elástica

El algoritmo de regresión de red elástica es una mezcla del algoritmo de regresión de lazo y el algoritmo de regresión de cresta. Durante el entrenamiento del modelo, el algoritmo de regresión de red elástica utiliza métodos de regularización L1 y L2. Elastic Net Regression es útil cuando hay múltiples características correlacionadas, Lasso elegirá aleatoriamente uno de los algoritmos y Elastic Net elegirá dos. La ventaja de Elastic Net Regression en comparación con Lasso y Ridge es que permite que Elastic Net Regression herede parte de la estabilidad de Ridge Regression en el estado recurrente. Además, produce efectos de grupo en el caso de variables altamente correlacionadas; no hay límite para el número de variables para elegir; se puede tolerar una doble contracción.
La clase de implementación en scikit-learn es ElasticNet.
El código se muestra a continuación:


import pandas as pd
from sklearn.linear_model import LinearRegression, Ridge, Lasso, ElasticNet

from sklearn.model_selection import  KFold, cross_val_score

#数据预处理
path = 'D:\down\\BostonHousing.csv'
data = pd.read_csv(path)

array = data.values

X = array[:, 0:13]
Y = array[:, 13]

n_splits = 10

seed = 7

kflod = KFold(n_splits=n_splits, random_state=seed, shuffle=True)
#
model = ElasticNet()

scoring = 'neg_mean_squared_error'

results = cross_val_score(model, X, Y, cv=kflod, scoring=scoring)

print("ElasticNet MSE: %.3f (%.3f)" % (results.mean(), results.std()))




resultado de la operación:

ElasticNet MSE: -27.908 (11.484)

Supongo que te gusta

Origin blog.csdn.net/hai411741962/article/details/132488172
Recomendado
Clasificación