Práctica supervisada de modelos lineales y vecinos más cercanos de sklearn library-k

1. ¿Cómo manejar el conjunto de datos?

from sklearn.dataset import load_iris  # 加载鸢尾花数据集 

Cuando se usa scikit-learn, los datos generalmente se representan con una X mayúscula y la etiqueta se representa con una y minúscula.

La función train_test_split de model_selection de scikit-learn puede mezclar el conjunto de datos y dividirlo.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split( 
    iris_dataset['data'], iris_dataset['target'], random_state=0) 
# 在对数据进行拆分之前,train_test_split 函数利用伪随机数生成器将数据集打乱
# random_state 参数指定了随机数生成器的种子。这样函数输出就是固定不变的

Una de las mejores formas de verificar los datos es visualizarlos. Un método de visualización es dibujar un diagrama de dispersión. pandas tiene una función scatter_matrix () para dibujar una matriz de diagrama de dispersión. La diagonal de la matriz es un histograma de cada característica.

# 利用DataFrame创建散点图矩阵,按y_train着色, 现在函数名为pd.plotting.scatter_matrix()
grr = pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o', hist_kwds={
    
    'bins': 20}, s=60, alpha=.8)

Matriz de gráficos de dispersión:
Inserte la descripción de la imagen aquí

2. ¿Cómo llamar al algoritmo?

Todos los modelos de aprendizaje automático en scikit-learn se implementan en sus propias clases, que se denominan clases Estimator. Necesitamos crear una instancia de esta clase como un objeto antes de que podamos usar este modelo.

Por ejemplo: el algoritmo de clasificación de vecino más cercano k se implementa en la clase KNeighborsClassifier del módulo de vecinos.

from sklearn.neighbors import KNeighborsClassifier  # 加载实现KNN算法的类
knn = KNeighborsClassifier(n_neighbors=1)  # 创建一个实例对象,并初始化
knn.fit(X_train, y_train)  
# 调用knn对象的fit方法,fit方法返回的是knn对象本身并做原处修改,得到了分类器的字符串表示。
y_pred = knn.predict(X_test) # 调用knn对象的predict方法,对验证集进行预测。
score = knn.score(X_test, y_test) # 调用knn对象的score方法,计算测试集的精度
np.mean(y_pred == y_test) # 另外一种计算测试集精度的方法

3. Aprendizaje supervisado: clasificación y regresión

Hay dos tipos principales de problemas de aprendizaje automático supervisados, llamados clasificación (clasi fi cación) y regresión (regresión).

En el problema de clasificación, la variedad posible se llama clase y la variedad con datos conocidos se llama etiqueta.

Las tareas de clasificación a veces se pueden dividir en

  • Dos clasificación (clasificación binaria, un caso especial de distinguir entre dos categorías)

    Por lo general, una de las categorías se denomina clase positiva y la otra, clase negativa.

  • Clasificación múltiple (clasificación multiclase, distinguir entre dos o más categorías)

El objetivo de la tarea de regresión es predecir un valor continuo, el término de programación se llama número de punto flotante (número de punto flotante) y el término matemático se llama número real (número real).

Una forma sencilla de distinguir entre las tareas de clasificación y las tareas de regresión es hacer una pregunta: ¿Tiene la salida alguna continuidad?

La construcción de un modelo que es demasiado complicado para la cantidad de información disponible se denomina sobreajuste.

La elección de un modelo demasiado simple se llama desajuste.

Descripción general de los algoritmos de aprendizaje supervisado:

algoritmo para resumir
Vecino más cercano Adecuado para pequeños conjuntos de datos, es un buen modelo de referencia y fácil de explicar.
Modelo lineal Algoritmo preferido muy confiable, adecuado para conjuntos de datos muy grandes y también adecuado para datos de alta dimensión.
Bayes ingenuo Solo se aplica a problemas de clasificación. Es más rápido que los modelos lineales y es adecuado para conjuntos de datos muy grandes y datos de alta dimensión. La precisión suele ser menor que la del modelo lineal.
Árbol de decisión Es rápido, no requiere escalado de datos, se puede visualizar y es fácil de explicar.
Bosque aleatorio Casi siempre es mejor que un solo árbol de decisiones, es muy robusto y muy poderoso. No se requiere escalado de datos. No apto para datos dispersos de alta dimensión.
Árbol de decisión de aumento de gradiente La precisión suele ser ligeramente superior a la del bosque aleatorio. En comparación con el bosque aleatorio, la velocidad de entrenamiento es más lenta, pero la velocidad de predicción es más rápida y requiere menos memoria. Requiere más ajustes de parámetros que los bosques aleatorios.
Máquinas de vectores de soporte Es poderoso para conjuntos de datos de tamaño mediano con significados de características similares. La escala de datos es necesaria y sensible a los parámetros.
Redes neuronales Se pueden construir modelos muy complejos, especialmente para grandes conjuntos de datos. Sensible al escalado de datos y la selección de parámetros.

Cuarto, el algoritmo principal

4.1 Conjunto de datos utilizado
from sklearn.datasets import load_breast_cancer  # 威斯康星州乳腺癌数据集(用于分类数据集)
from sklearn.datasets import load_boston  # 波士顿房价数据集(用于回归数据集)

4.2 k vecinos más cercanos

Se puede decir que el algoritmo k-NN es el algoritmo de aprendizaje automático más simple.

from sklearn.neighbors import KNeighborsClassifier  # 用于分类的k近邻训练器
clf = KNeighborsClassifier(n_neighbors = 3)  
from sklearn.neighbors import KNeighborsRegressor  # 用于回归的k近邻训练器
reg = KNeighborsRegressor(n_neighbors=3)  
  • algoritmo del vecino k-más cercano para la clasificación
# 进行数据集的导入和拆分
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, stratify=cancer.target, random_state=66)
# 使用k近邻分类器训练邻居个数为1-10的模型,并计算准确率accuracy
from sklearn.neighbors import KNeighborsClassifier
training_accuracy = []
test_accuracy = []
neighbors_settings = range(1,11)
for n_neighbors in neighbors_settings:
    clf = KNeighborsClassifier(n_neighbors = n_neighbors)
    clf.fit(X_train, y_train)
    training_accuracy.append(clf.score(X_train, y_train))
    test_accuracy.append(clf.score(X_test, y_test))
plt.plot(neighbors_settings, training_accuracy, label="training accurcay")
plt.plot(neighbors_settings, test_accuracy, label="test accurcay")
plt.xlabel("n_neighbors")
plt.ylabel("Accuracy")
plt.legend()

Exactitud:
Inserte la descripción de la imagen aquí

  • algoritmo del vecino k-más cercano para la regresión

El resultado de la predicción utilizando un solo vecino es el valor objetivo del vecino más cercano. Cuando se utilizan varios vecinos, el resultado de la predicción es el promedio de estos vecinos. El código específico es consistente con la clasificación.

Para los problemas de regresión, el método de puntuación del modelo de evaluación devuelve una puntuación R 2 . La puntuación R 2 también se denomina coeficiente de determinación, que es una medida de la bondad de la predicción del modelo de regresión, que se encuentra entre 0 y 1. R2 igual a 1 corresponde a una predicción perfecta y R2 igual a 0 corresponde a un modelo constante.

  • para resumir

(1) Parámetros: el número de vecinos y el método de medición de la distancia entre puntos de datos

(2) Ventajas: fácil de entender, se puede obtener un buen rendimiento sin un ajuste excesivo, que es un buen método de referencia.

(3) Desventajas: La velocidad de predicción es lenta y no es adecuada para conjuntos de entrenamiento con muchas características, especialmente para conjuntos de datos escasos.


4.3 Modelo lineal

El modelo lineal utiliza la función lineal de las entidades de entrada para realizar predicciones.

from sklearn.linear_model import LinearRegression  # 线性回归的训练器
lr = LinearRegression()
from sklearn.linear_model import Ridge  # 岭回归的训练器
ridge = Ridge(alpha=1)  
# alpha参数指定简单性和训练集性能二者对于模型的重要程度,alpha 的最佳设定值取决于具体数据集。
# 一般来说,alpha值越小模型越复杂,正则化越弱。
from sklearn.linear_model import Lasso  # Lasso回归的训练器
ridge = Ridge(alpha=0.01, max_iter=100000)
from sklearn.linear_model import LogisticRegression  # Logistic回归的分类器
logreg = LogisticRegression(C=1, penalty="l2")  
# 参数C决定正则化强度的权衡参数,越大对应的正则化越弱;参数penalty决定选取正则化项类别
from sklearn.svm import LinearSVC   # 线性SVM的分类器,SVC代表支持向量分类器

La diferencia entre los algoritmos de modelo lineal:

  • Una medida de qué tan bien se ajusta una combinación específica de coeficiente e intersección a los datos de entrenamiento;
  • Si utilizar la regularización y qué método de regularización utilizar.

  1. Modelo lineal de regresión

Para un modelo lineal usado para regresión, la salida ŷ es una función lineal de la característica, que es una línea recta, un plano o un hiperplano (para conjuntos de datos de dimensiones superiores). El resultado de la predicción de una sola característica es una línea recta, dos características son un plano o un hiperplano en una dimensión superior (es decir, más características).

Si el número de características es mayor que el número de puntos de datos de entrenamiento, cualquier objetivo y se puede ajustar perfectamente (en el conjunto de entrenamiento) con una función lineal.

(¡Creo que se puede entender que los puntos en el conjunto de entrenamiento están todos en la curva de regresión!)

  • Regresión lineal (también conocida como mínimos cuadrados ordinarios (MCO))

La regresión lineal, o método de mínimos cuadrados ordinarios, es el método lineal más simple y clásico para problemas de regresión.

La regresión lineal busca los parámetros w y b para minimizar el error cuadrático medio entre el valor predicho del conjunto de entrenamiento y el valor objetivo de regresión verdadero y .

El error cuadrático medio es la suma de los cuadrados de la diferencia entre el valor predicho y el valor verdadero dividido por el número de muestras.

# 线性回归过程
from sklearn.linear_model import LinearRegression
X, y = mglearn.datasets.make_wave(n_samples =60)
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=42)
lr = LinearRegression().fit(X_train, y_train)  # 创建线性回归分类器实例对象并训练
lr.coef_  # 该属性保存w,即权重或者系数
lr.intercept_  # 该属性保存b,即偏移或截距
lr.score(X_train, y_train)  # 计算训练集性能
lr.score(X_test, y_test)  # 计算测试集性能

El parámetro w se almacena en el atributo coef_ , que es una matriz NumPy, y cada elemento corresponde a una característica de entrada.

El parámetro b se almacena en el atributo intercept_ , que es un número de coma flotante.

scikit-learn siempre guarda los valores derivados de los datos de entrenamiento en los atributos que terminan con un guión bajo. Esto es para distinguirlo de los parámetros establecidos por el usuario.


  • Regresión de crestas

En la regresión de crestas, la elección del coeficiente ( w ) no solo debe obtener un buen resultado de predicción en los datos de entrenamiento, sino que también debe ajustarse a restricciones adicionales. También esperamos que el coeficiente sea lo más pequeño posible. En otras palabras, todos los elementos de w deberían estar cerca de cero.

La restricción de la regresión de la cresta es un ejemplo de regularización. La regularización se refiere a hacer restricciones explícitas en el modelo para evitar el sobreajuste. Este tipo de regresión de crestas se denomina regularización L2.

from sklearn.linear_model import Ridge
ridge = Ridge(alpha=1)  

Comparación del rendimiento de regresión de
Inserte la descripción de la imagen aquí
crestas y regresión lineal : si hay suficientes datos de entrenamiento, la regularización se vuelve menos importante y la regresión de crestas y la regresión lineal tendrán el mismo rendimiento.


  • lazo

Lasso utiliza la regularización L1. El resultado de la regularización L1 es que algunos coeficientes son exactamente 0 cuando se usa lazo. Esto muestra que el modelo ignora por completo algunas características. Esto puede verse como una selección automática de funciones.

from sklearn.linear_model import Lasso
ridge = Ridge(alpha=0.01, max_iter=100000) 

La elección de regresión de cresta y regresión de lazo:

En la práctica, la regresión de crestas generalmente se prefiere en los dos modelos. Pero si hay muchas funciones y cree que solo algunas de ellas son importantes, entonces Lasso puede ser mejor. De manera similar, si desea un modelo que sea fácil de explicar, Lasso puede proporcionar un modelo que sea más fácil de entender porque solo selecciona una parte de las características de entrada.

scikit-learn también proporciona la clase ElasticNet, que combina los elementos de penalización de Lasso y Ridge. En la práctica, esta combinación tiene el mejor efecto, pero a costa de ajustar dos parámetros: uno para la regularización L1 y otro para la regularización L2.


  1. Modelo lineal para clasificación
  • Modelo lineal para clasificación binaria

Para los modelos lineales utilizados para la clasificación, el límite de decisión es una función lineal de la entrada. En otras palabras, un clasificador lineal (binario) es un clasificador que usa líneas rectas, planos o hiperplanos para separar dos categorías.

Los dos algoritmos de clasificación lineal más comunes son la regresión logística (regresión logística) y la máquina de vectores de soporte lineal (máquina de vectores de soporte lineal, SVM lineal).

from sklearn.linear_model import LogisticRegression 
from sklearn.svm import LinearSVC

Ambos modelos utilizan la regularización L2 de forma predeterminada, y el parámetro de compensación que determina la fuerza de la regularización se llama C. Cuanto mayor sea el valor C, más débil será la regularización correspondiente. Un valor C pequeño permite que el algoritmo se adapte a "la mayoría" de los puntos de datos tanto como sea posible, mientras que un valor C más grande enfatiza la importancia de la clasificación correcta de cada punto de datos.
Inserte la descripción de la imagen aquí

  • Modelo lineal para clasificación múltiple

Una forma común de extender el algoritmo de dos clasificaciones al algoritmo de clasificación múltiple es el método "uno frente al resto". Ejecute todos los clasificadores de segunda clase en los puntos de prueba para hacer predicciones. El clasificador con la puntuación más alta en la categoría correspondiente "gana" y devuelve esta etiqueta de categoría como resultado de la predicción.


  1. para resumir

(1) El parámetro principal del modelo lineal es el parámetro de regularización, que se denomina alfa en el modelo de regresión, y C en LinearSVC y LogisticRegression. Un valor alfa mayor o un valor C menor indica que el modelo es relativamente simple.

(2) La velocidad de entrenamiento del modelo lineal es muy rápida y la velocidad de predicción también es muy rápida. Este modelo se puede ampliar a conjuntos de datos muy grandes y también es eficaz para datos dispersos. La opción solver = 'sag', esta opción es más rápida que el valor predeterminado al procesar datos grandes.

(3) Versión promocional: clase SGDClassifier y clase SGDRegressor

4.4 Clasificador Bayes ingenuo

En comparación con el modelo lineal, el clasificador de Bayes ingenuo tiene una velocidad de entrenamiento más rápida y una capacidad de generalización ligeramente peor.

Se implementan tres clasificadores de Bayes ingenuos en scikit-learn:

nombre Rango de uso
GaussianNB Se puede aplicar a cualquier dato continuo y se guardará el promedio y la desviación estándar de cada característica en cada categoría.
BernoulliNB Suponiendo que los datos de entrada son datos de dos categorías, calcule el número de elementos en cada categoría con cada característica que no sea 0.
MultinomialNB Suponiendo que los datos de entrada son datos de recuento, calcule el promedio de cada característica en cada categoría.

Los tres clasificadores tienen solo un parámetro alfa. El principio de funcionamiento de alfa es que el algoritmo agrega tantos puntos de datos virtuales con alfa a los datos, y estos puntos toman valores positivos para todas las características. Esto puede "suavizar" las estadísticas. Cuanto mayor sea el alfa, más fuerte será el suavizado y menor la complejidad del modelo.

  • para resumir

La velocidad de entrenamiento y predicción del modelo ingenuo de Bayes es muy rápida y el proceso de entrenamiento es fácil de entender.

El modelo tiene un buen efecto en datos dispersos de alta dimensión y su solidez a los parámetros es relativamente buena.

El modelo Naive Bayes es un buen modelo de referencia y se utiliza a menudo para conjuntos de datos muy grandes.

Supongo que te gusta

Origin blog.csdn.net/xylbill97/article/details/105877730
Recomendado
Clasificación