Normalización y estandarización del preprocesamiento de funciones de ingeniería de funciones, implementación del código de predicción de especies de flores de iris

1. Preprocesamiento de características

El propósito de la ingeniería de características: convertir datos en datos que sean más fáciles de reconocer para las máquinas 

scikit-learn: proporciona varias funciones de utilidad comunes y clases de transformadores para cambiar los vectores de características sin procesar en representaciones más adecuadas para los estimadores posteriores. Es decir, a través de algunas funciones de conversión, los datos característicos se convierten en un proceso de datos característicos

La unidad o el tamaño de la función es bastante diferente, o la varianza de una determinada función es varios órdenes de magnitud mayor que otras funciones, lo que es fácil de afectar (dominar) el resultado objetivo , lo que hace que algunos algoritmos no puedan aprender otras funciones, por lo que se requiere normalización/estandarización

Es necesario utilizar algunos métodos para la conversión adimensional , de modo que los datos de diferentes especificaciones se puedan convertir a la misma especificación , incluidas la normalización y la estandarización.

En segundo lugar, la normalización

Normalización: asigne los datos a (predeterminado [0,1]) transformando los datos originales

La fórmula es la siguiente

Actúa en cada columna, max es el valor máximo de una columna, min es el valor mínimo de una columna, luego X'' es el resultado final, mx, mi son los valores de intervalo especificados, por defecto mx es 1, mi es 0, los ejemplos son los siguientes

Use la función API de la siguiente manera 

  • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… ): feature_range especifica el rango
    • MinMaxScalar.fit_transform(X)
      • X: datos en formato de matriz numpy [n_samples, n_features]
    • Valor de retorno: matriz convertida con la misma forma

El código es el siguiente, el archivo date.txt de los datos de citas de Helen se puede ver al final del artículo en el enlace del disco de red

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

data = pd.read_csv("../data/dating.txt")
print(data)
transfer = MinMaxScaler(feature_range=(0, 1))   # 实例化一个转换器类
minmax_data = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']])   # 调用fit_transform
print("最小值最大值归一化处理后的结果:\n", minmax_data)
-------------------------------------------------------------
输出:
     milage     Liters  Consumtime  target
0     40920   8.326976    0.953952       3
1     14488   7.153469    1.673904       2
2     26052   1.441871    0.805124       1
3     75136  13.147394    0.428964       1
4     38344   1.669788    0.134296       1
..      ...        ...         ...     ...
995   11145   3.410627    0.631838       2
996   68846   9.974715    0.669787       1
997   26575  10.650102    0.866627       3
998   48111   9.134528    0.728045       3
999   43757   7.882601    1.332446       3

[1000 rows x 4 columns]
最小值最大值归一化处理后的结果:
 [[0.44832535 0.39805139 0.56233353]
 [0.15873259 0.34195467 0.98724416]
 [0.28542943 0.06892523 0.47449629]
 ...
 [0.29115949 0.50910294 0.51079493]
 [0.52711097 0.43665451 0.4290048 ]
 [0.47940793 0.3768091  0.78571804]]

Los valores máximo y mínimo cambian y se ven fácilmente afectados por los valores atípicos, por lo que este método es menos robusto y solo es adecuado para escenarios tradicionales de datos pequeños precisos.

3. Estandarización

Estandarización: al transformar los datos originales, los datos se transforman en datos con una media de 0 y una desviación estándar de 1.

La fórmula es la siguiente

 Actúa en cada columna, la media es la media, σ es la desviación estándar

  • Para la normalización: si hay valores atípicos que afectan los valores máximo y mínimo, el resultado obviamente cambiará
  • Para la estandarización: si hay valores atípicos, debido a una cierta cantidad de datos, un pequeño número de valores atípicos tiene poco efecto en el valor promedio, por lo que el cambio de varianza es pequeño

La API es la siguiente

  • sklearn.preprocessing.StandardScaler( ): Después del procesamiento, para cada columna, todos los datos se recopilan alrededor de la media 0 y la desviación estándar es 1
    • StandardScaler.fit_transform(X)
      • X: datos en formato de matriz numpy [n_samples, n_features]
    • Valor de retorno: matriz convertida con la misma forma
from sklearn.preprocessing import StandardScaler
import pandas as pd
data = pd.read_csv("../data/dating.txt")
print(data)
transfer = StandardScaler()   # 实例化一个转换器
minmax_data = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']])   # 调用fit_transform
print("最小值最大值标准化处理后的结果:\n", minmax_data)
print("每一列特征的平均值:\n", transfer.mean_)
print("每一列特征的方差:\n", transfer.var_)
-------------------------------------------------------
输出:
     milage     Liters  Consumtime  target
0     40920   8.326976    0.953952       3
1     14488   7.153469    1.673904       2
2     26052   1.441871    0.805124       1
3     75136  13.147394    0.428964       1
4     38344   1.669788    0.134296       1
..      ...        ...         ...     ...
995   11145   3.410627    0.631838       2
996   68846   9.974715    0.669787       1
997   26575  10.650102    0.866627       3
998   48111   9.134528    0.728045       3
999   43757   7.882601    1.332446       3

[1000 rows x 4 columns]
最小值最大值标准化处理后的结果:
 [[ 0.33193158  0.41660188  0.24523407]
 [-0.87247784  0.13992897  1.69385734]
 [-0.34554872 -1.20667094 -0.05422437]
 ...
 [-0.32171752  0.96431572  0.06952649]
 [ 0.65959911  0.60699509 -0.20931587]
 [ 0.46120328  0.31183342  1.00680598]]
每一列特征的平均值:
 [3.36354210e+04 6.55996083e+00 8.32072997e-01]
每一列特征的方差:
 [4.81628039e+08 1.79902874e+01 2.46999554e-01]

La estandarización es relativamente estable cuando hay suficientes muestras y es adecuada para escenarios de big data

4. Predicción de especies de iris

API de algoritmo de vecino más cercano

  • sklearn.vecinos.KNeighborsClassifier(n_neighbors=5,algorithm='auto')
    • n_neighbors: int, opcional (predeterminado = 5), número de vecinos a usar de forma predeterminada para las consultas k_neighbors
    • algoritmo: {'auto', 'ball_tree', 'kd_tree', 'brute'}: algoritmo rápido de búsqueda del vecino más cercano, el parámetro predeterminado es auto , lo que puede entenderse como que el algoritmo decide el algoritmo de búsqueda apropiado por sí mismo. Además, los usuarios también pueden especificar los siguientes algoritmos de búsqueda para buscar
      • Árbol de bolas: Fue inventado para superar la falla de alta latitud del árbol kd Su proceso de construcción divide el espacio muestral por el centroide C y el radio r, y cada nodo es una hiperesfera.
      • kd_tree: una estructura de datos de árbol que construye un árbol kd para almacenar datos para una recuperación rápida. El árbol kd también es un árbol binario en la estructura de datos. El árbol construido por segmentación mediana, cada nodo es un súper rectángulo, es eficiente cuando la dimensión es menor a 20.
      • Bruto: Es una búsqueda de fuerza bruta, es decir, un escaneo lineal.Cuando el conjunto de entrenamiento es grande, el cálculo lleva mucho tiempo.

Conjunto de datos de iris

  • Número de instancias: 150 (50 para cada una de las tres clases)
  • Número de atributos: 4 (numérico, numérico, atributo y clase para ayudar a predecir)
  • atributo, valor de característica
    • longitud del sépalo: longitud del sépalo (cm)
    • ancho del sépalo: ancho del sépalo (cm)
    • longitud del pétalo: longitud del pétalo (cm)
    • ancho de pétalo: ancho de pétalo (cm)
  • tipo, valor objetivo
    • Iris-Setosa: Iris de montaña
    • Iris-Versicolor: Variación Iris
    • Iris-Virginica: Virginia Iris

 el código se muestra a continuación

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier  # 导入模块
# 1.获取数据集
iris = load_iris()
# 2.数据基本处理
# x_train,x_test,y_train,y_test为训练集特征值、测试集特征值、训练集目标值、测试集目标值
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)  # 划分数据集
# 3.特征工程:标准化
transfer = StandardScaler()  # 实例化转换器
x_train = transfer.fit_transform(x_train)  # 调用方法,标准化
x_test = transfer.transform(x_test)
# 4.机器学习(模型训练)
estimator = KNeighborsClassifier(n_neighbors=2)   # 实例化一个估计器,n_neighbors为选定参考的邻居数
estimator.fit(x_train, y_train)  # 模型训练
# 5.模型评估
# 方法1:比对真实值和预测值
y_predict = estimator.predict(x_test)
print("预测结果为:", y_predict)
print("比对真实值和预测值:", y_predict == y_test)
# 方法2:直接计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:", score)
-----------------------------------------------
输出:
预测结果为: [0 2 1 2 1 1 1 2 1 0 2 1 2 2 0 2 1 1 1 1 0 2 0 1 2 0 2 2 2 2]
比对真实值和预测值: [ True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True False  True  True  True  True  True
  True  True  True  True  True  True]
准确率为: 0.9666666666666667

Descargue los datos de citas de Helen.txt: https://pan.baidu.com/s/1JFrp-3YQyH_zFBwWulNqmQ?pwd=68ww

Aprendiendo a navegar: http://xqnav.top/ 

Supongo que te gusta

Origin blog.csdn.net/qq_43874317/article/details/128198199
Recomendado
Clasificación