Explicación detallada del algoritmo KNN, de 0 a 1, este artículo es todo lo que necesita desde el ingreso hasta el empleo

Directorio de artículos

1.1 Introducción al algoritmo K-vecino más cercano

objetivo de aprendizaje

  • Objetivo
    • Entender qué es el algoritmo KNN
    • Conozca el proceso de solución del algoritmo KNN

1 ¿Qué es el algoritmo del vecino K-más cercano?

Insertar descripción de la imagen aquí

  • Infiere tu categoría en función de tus "vecinos"

1.1 Concepto de algoritmo K-vecino más cercano (KNN)

El algoritmo K vecino más cercano también se llama algoritmo KNN. Este algoritmo es un algoritmo relativamente clásico en el aprendizaje automático. En términos generales, el algoritmo KNN es un algoritmo relativamente fácil de entender.

  • definición

Si la mayoría de las k muestras más similares (es decir, las vecinas más cercanas en el espacio de características ) de una muestra pertenecen a una determinada categoría , entonces la muestra también pertenece a esta categoría.

Fuente: El algoritmo KNN fue propuesto por primera vez por Cover y Hart como algoritmo de clasificación.

  • fórmula de distancia

La distancia entre dos muestras se puede calcular mediante la siguiente fórmula, también llamada distancia euclidiana, que se analizará más adelante.
Insertar descripción de la imagen aquí

1.2 Análisis de tipos de películas

Supongamos que ahora tenemos varias películas.
Insertar descripción de la imagen aquí

¿en? Si no conoces la categoría de la película número 9, ¿cómo puedes predecirla? Podemos usar la idea del algoritmo K vecino más cercano.

1. Calcule la distancia entre cada película y la película predicha por separado y luego resuélvala.

Por ejemplo, calcular la distancia entre la Película No. 9 <<Chinatown Adventure>> y <<Double Exposure>> es:
d = ( 23 − 2 ) 2 + ( 3 − 3 ) 2 + ( 17 − 55 ) 2 = 43,42 d = \sqrt{(23-2)^2 + (3-3)^2 + (17-55)^2} = 43,42d=( 232 )2+( 33 )2+( 1755 )2 =43,42
Insertar descripción de la imagen aquí

2. El orden creciente de distancia es: 7,1,8,5,4,3,6,2

3. Establezca el valor de k, asumiendo que k es 5. Las primeras 5 películas son 7,1,8,5,4 respectivamente.

4. Comedia 3 veces, amor 2 veces

El valor previsto de 5,9 es comedia.

1.3 Resumen del proceso del algoritmo KNN

1) Calcule la distancia entre el punto en el conjunto de datos de categoría conocida y el punto actual

2) Ordenar por distancia creciente

3) Seleccione los k puntos con la distancia más pequeña desde el punto actual

4) Cuente la frecuencia de aparición de la categoría donde se ubican los primeros k puntos

5) Devuelve la categoría con la mayor frecuencia de aparición de los primeros k puntos como la clasificación prevista del punto actual

2 Resumen

  • Introducción al algoritmo K-vecino más cercano [Comprender]
    • Definición: Es juzgar a qué categoría perteneces a través de tus "vecinos"
    • Cómo calcular la distancia entre usted y sus "vecinos": normalmente se utiliza la distancia euclidiana

1.2 Uso preliminar de la API del algoritmo vecino más cercano k

objetivo de aprendizaje

  • Objetivo
    • Comprenda los beneficios y las inclusiones de la herramienta sklearn
    • Aplique la API en sklearn para implementar el uso simple del algoritmo KNN

  • Revisión del proceso de aprendizaje automático:
    Insertar descripción de la imagen aquí

  • 1. Obtenga el conjunto de datos

  • 2. Procesamiento de datos básicos

  • 3. Ingeniería de funciones

  • 4. Aprendizaje automático

  • 5. Evaluación del modelo

1 Introducción a las herramientas de aprendizaje de Scikit

  • Herramientas de aprendizaje automático en lenguaje Python
  • Scikit-learn incluye implementaciones de muchos algoritmos de aprendizaje automático conocidos
  • Scikit-learn tiene documentación completa, es fácil de usar y tiene API completas.
  • La versión estable actual es 0.19.1

1.1 Instalación

pip3 install scikit-learn==0.19.1

Después de la instalación, puede verificar si la instalación se realizó correctamente ejecutando el siguiente comando

import sklearn
  • Nota: La instalación de scikit-learn requiere Numpy, Scipy y otras bibliotecas

1.2 Introducción a Scikit-learn

Insertar descripción de la imagen aquí

  • Clasificación, agrupamiento, regresión, reducción de dimensionalidad, selección de modelo, preprocesamiento

API de algoritmo de 2 K vecinos más cercanos

  • sklearn.vecinos.KNeighborsClassifier(n_vecinos=5)
    • n_neighbors: int, opcional (predeterminado = 5), k_neighbors consulta el número de vecinos utilizados de forma predeterminada

3 casos

3.1 Análisis de pasos

  • 1. Obtenga el conjunto de datos
  • 2. Procesamiento básico de datos (omitido en este caso)
  • 3. Ingeniería de funciones (omitida en este caso)
  • 4. Aprendizaje automático
  • 5. Evaluación del modelo (omitido en este caso)

3.2 Proceso de código

  • Módulo de importación
from sklearn.neighbors import KNeighborsClassifier
  • Construir un conjunto de datos
x = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
  • Aprendizaje automático: entrenamiento de modelos
# 实例化API
estimator = KNeighborsClassifier(n_neighbors=1)
# 使用fit方法进行训练
estimator.fit(x, y)

estimator.predict([[1]])

4 Resumen

  • Ventajas de sklearn:
    • Hay muchos documentos y están estandarizados.
    • Contiene muchos algoritmos.
    • Fácil de implementar
  • api en knn
    • sklearn.vecinos.KNeighborsClassifier(n_vecinos=5)

pregunta

1. Fórmula de distancia: además de la distancia euclidiana, ¿qué otras fórmulas de distancia se pueden utilizar?

2. ¿Seleccione el tamaño del valor K?

3. ¿Cuáles son los significados específicos de otros parámetros en la API?

1.3 Medida de distancia

objetivo de aprendizaje

  • Objetivo
    • Conozca las fórmulas comunes de cálculo de distancias en el aprendizaje automático

1 Fórmulas de distancia comunes

1.1 Distancia euclidiana** (Distancia euclidiana):

La distancia euclidiana es el método de medición de distancia más fácil de entender intuitivamente. La distancia entre dos puntos en el espacio con los que entramos en contacto en la escuela primaria, secundaria y preparatoria generalmente se refiere a la distancia euclidiana.

Insertar descripción de la imagen aquí

Ejemplo:

X=[[1,1],[2,2],[3,3],[4,4]];
经计算得:
d = 1.4142    2.8284    4.2426    1.4142    2.8284    1.4142

1.2 Distancia de Manhattan:

Al conducir de una intersección a otra en un vecindario de Manhattan, la distancia de conducción obviamente no es una distancia en línea recta entre dos puntos. Esta distancia de conducción real es la "distancia de Manhattan". La distancia de Manhattan también se llama "distancia de manzana".

Insertar descripción de la imagen aquí

Ejemplo:

X=[[1,1],[2,2],[3,3],[4,4]];
经计算得:
d =   2     4     6     2     4     2

1.3 Distancia de Chebyshev:

En el ajedrez, el rey puede moverse en línea recta, horizontal o diagonal, por lo que puede moverse a cualquiera de las 8 casillas adyacentes con un solo movimiento. ¿Cuántos pasos necesita el rey para pasar de la cuadrícula (x1, y1) a la cuadrícula (x2, y2)? Esta distancia se llama distancia de Chebyshev.

Insertar descripción de la imagen aquí

Ejemplo:

X=[[1,1],[2,2],[3,3],[4,4]];
经计算得:
d =   1     2     3     1     2     1

1.4 Distancia Minkowski:

La distancia mínima no es un tipo de distancia, sino un conjunto de definiciones de distancia, que es una expresión general de múltiples fórmulas de medición de distancia.

La distancia de Minkowski entre dos variables n-dimensionales a(x11,x12,…,x1n) y b(x21,x22,…,x2n) se define como:

Insertar descripción de la imagen aquí

donde p es un parámetro variable:

  • Cuando p=1, es la distancia de Manhattan;
  • Cuando p=2, es la distancia euclidiana;
  • Cuando p→∞, es la distancia de Chebyshev.

Dependiendo de p, la distancia Min puede representar la distancia de una determinada categoría/especie.

resumen:

La distancia de 1 minuto, incluida la distancia de Manhattan, la distancia euclidiana y la distancia de Chebyshev, tiene deficiencias obvias:

por ejemplo, muestra bidimensional (altura [unidad: cm], peso [unidad: kg]), hay tres muestras: a(180,50), b(190,50), c(180,60).

La distancia mínima entre a y b (ya sea distancia de Manhattan, distancia euclidiana o distancia de Chebyshev) es igual a la distancia mínima entre a y c. Pero, de hecho, 10 cm de altura no se pueden equiparar con 10 kg de peso.

2 desventajas de la distancia mínima:

(1) Trate la escala, es decir, la “unidad” de cada componente de la misma manera;

(2) No considera que la distribución (expectativa, varianza, etc.) de cada componente pueda ser diferente.


[[Extendido]Otras fórmulas de distancia]

2 Cálculo de distancia entre "atributos continuos" y "atributos discretos"

A menudo dividimos los atributos en "atributos continuos" y "atributos categóricos": el primero tiene infinitos valores posibles en el dominio de definición, mientras que el segundo tiene un número limitado de valores en el dominio de definición.

  • Si existe una relación ordinal entre los valores de los atributos, se pueden convertir en valores continuos. Por ejemplo, los atributos de altura "alto", "medio" y "bajo" se pueden convertir en {1, 0,5, 0}.
    • La distancia de Minkowski se puede utilizar para atributos ordenados.
  • Si no existe una relación ordinal entre los valores de los atributos, generalmente se convierten en forma vectorial. Por ejemplo, los atributos de género "masculino" y "femenino" se pueden convertir en {(1,0), (0,1)}.

3 Resumen

  • 1 Fórmulas de distancia comunes
    • 2.1 Distancia euclidiana [Saber]:
      • Calculado por el valor de la distancia al cuadrado.
    • 2. Distancia de Manhattan [Saber]:
      • Calcular por valor absoluto de la distancia.
    • 3. Distancia de Chebyshev [Saber]:
      • Calcular el valor máximo de la dimensión.
    • 4. Distancia de Minkowski [Saber]:
      • Cuando p=1, es la distancia de Manhattan;
      • Cuando p=2, es la distancia euclidiana;
      • Cuando p→∞, es la distancia de Chebyshev.
  • 2 atributos [saber]
    • atributo continuo
    • atributos discretos,
      • Existe una relación ordinal, que se puede convertir en un valor continuo.
      • No existe una relación de orden y generalmente se convierte en forma vectorial.

1.4 Caso: Predicción de especies de iris – Introducción al conjunto de datos

objetivo de aprendizaje

  • Objetivo
    • Sepa cómo obtener conjuntos de datos en sklearn.
    • Sepa cómo dividir el conjunto de datos en sklearn.

Esta práctica de laboratorio presenta algunos conceptos básicos del aprendizaje automático utilizando Python. En este caso, se utilizará el algoritmo K-Nearest Neighbor (KNN) para clasificar los tipos de flores de iris y medir las características de las flores.

Objeto de este caso:

  1. Siga y comprenda el proceso completo de aprendizaje automático.
  2. Tener un conocimiento básico de los principios del aprendizaje automático y la terminología relacionada.
  3. Comprender el proceso básico de evaluación de modelos de aprendizaje automático.

1 Caso: Predicción de especies de flores de iris

El conjunto de datos Iris es un conjunto de datos experimentales de clasificación de uso común, recopilado y organizado por Fisher, 1936. Iris, también conocido como conjunto de datos de flores de iris, es un tipo de conjunto de datos para análisis de múltiples variables. Introducción detallada sobre el conjunto de datos:

Insertar descripción de la imagen aquí

2 Introducción a los conjuntos de datos en scikit-learn

2.1 Introducción a la API del conjunto de datos scikit-learn

  • sklearn.conjuntos de datos
    • Cargando conjuntos de datos populares
    • conjuntos de datos.load_*()
      • Obtenga conjuntos de datos a pequeña escala, los datos están contenidos en conjuntos de datos
    • conjuntos de datos.fetch_*(data_home=Ninguno)
      • Para obtener un conjunto de datos a gran escala, debe descargarlo de Internet. El primer parámetro de la función es data_home, que indica el directorio donde se descarga el conjunto de datos. El valor predeterminado es ~/scikit_learn_data/
2.1.1 pequeño conjunto de datos de sklearn
  • sklearn.datasets.load_iris()

    Cargar y devolver el conjunto de datos del iris.

imagen

2.1.2 conjunto de datos grande de sklearn
  • sklearn.datasets.fetch_20newsgroups(data_home=Ninguno,subset='tren')
    • subconjunto: 'entrenar' o 'probar', 'todos', opcional, seleccione el conjunto de datos para cargar.
    • "entrenar" para el conjunto de entrenamiento, "prueba" para el conjunto de prueba, "todos" de ambos

2.2 Introducción a los valores de retorno del conjunto de datos de sklearn

  • Tipo de datos datasets.base.Bunch devueltos por carga y recuperación (formato de diccionario)
    • datos: matriz de datos de características, que es una matriz numpy.ndarray bidimensional de [n_samples * n_features]
    • objetivo: matriz de etiquetas, una matriz numpy.ndarray unidimensional de n_samples
    • DESCR: descripción de datos
    • feature_names: nombres de funciones, datos de noticias, números escritos a mano, conjuntos de datos de regresión no disponibles
    • target_names: nombres de etiquetas
from sklearn.datasets import load_iris
# 获取鸢尾花数据集
iris = load_iris()
print("鸢尾花数据集的返回值:\n", iris)
# 返回值是一个继承自字典的Bench
print("鸢尾花的特征值:\n", iris["data"])#调用iris.data和iris["data"]效果一样
print("鸢尾花的目标值:\n", iris.target)
print("鸢尾花特征的名字:\n", iris.feature_names)
print("鸢尾花目标值的名字:\n", iris.target_names)
print("鸢尾花的描述:\n", iris.DESCR)

2.3 Ver distribución de datos

Cree algunos gráficos para ver cómo se distinguen las diferentes categorías por características. En un mundo ideal, las clases de etiquetas estarían perfectamente separadas por uno o más pares de características. En el mundo real, esta situación ideal rara vez ocurre.

  • Introducción a los nacidos en el mar
    • Seaborn es una encapsulación API de nivel superior basada en la biblioteca central Matplotlib, que le permite dibujar fácilmente gráficos más hermosos. La belleza de Seaborn se refleja principalmente en la combinación de colores más cómoda y el estilo más delicado de los elementos gráficos.
    • Instalar pip3 instalar seaborn
    • seaborn.lmplot() es un método muy útil que completa automáticamente el ajuste de regresión al dibujar un diagrama de dispersión bidimensional.
      • xey en sns.lmplot() representan los nombres de las columnas de las coordenadas horizontales y verticales respectivamente.
      • data= está asociado con el conjunto de datos,
      • hue=* representa la visualización de clasificación según especies, es decir, categorías de flores.
      • fit_reg=Si se debe realizar un ajuste lineal.
    • Enlace de referencia: enlace api
%matplotlib inline  
# 内嵌绘图
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False 

# 把数据转换成dataframe的格式
iris_d = pd.DataFrame(iris['data'], columns = ['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])
iris_d['Species'] = iris.target

def plot_iris(iris, col1, col2):
    sns.lmplot(x = col1, y = col2, data = iris, hue = "Species", fit_reg = False)
    plt.xlabel(col1)
    plt.ylabel(col2)
    plt.title('鸢尾花种类分布图')
    plt.show()
plot_iris(iris_d, 'Petal_Width', 'Sepal_Length')

Insertar descripción de la imagen aquí

2.4 División del conjunto de datos

El conjunto de datos generales del aprendizaje automático se divide en dos partes:

  • Datos de entrenamiento: utilizados para entrenar y construir modelos.
  • Datos de prueba: se utilizan durante las pruebas del modelo para evaluar si el modelo es efectivo.

Relación de división:

  • Conjunto de entrenamiento: 70% 80% 75%
  • Conjunto de prueba: 30% 20% 25%

API de partición de conjuntos de datos

  • sklearn.model_selection.train_test_split(matrices, *opciones)
    • parámetro:
      • x valores propios del conjunto de datos
      • y valor de etiqueta del conjunto de datos
      • test_size El tamaño del conjunto de prueba, generalmente flotante
      • random_state es una semilla de número aleatorio. Diferentes semillas causarán diferentes resultados de muestreo aleatorio. Los mismos resultados del muestreo de semillas son los mismos.
    • devolver
      • tren_x, prueba_x, tren_y, prueba_y
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 1、获取鸢尾花数据集
iris = load_iris()
# 对鸢尾花数据集进行分割
# 训练集的特征值x_train 测试集的特征值x_test 训练集的目标值y_train 测试集的目标值y_test
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
print("x_train:\n", x_train.shape)
# 随机数种子
x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6)
x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6)
print("如果随机数种子不一致:\n", x_train == x_train1)
print("如果随机数种子一致:\n", x_train1 == x_train2)

3 Resumen

  • Obtenga el conjunto de datos 【Saber】
    • Pequeños datos:
      • sklearn.datasets.carga_*
    • Gran conjunto de datos:
      • sklearn.datasets.fetch_*
  • Introducción a los valores de retorno del conjunto de datos [Saber]
    • El tipo de valor de retorno es grupo: un tipo de diccionario
    • Propiedades del valor de retorno:
      • datos: matriz de datos de características
      • objetivo: matriz de etiquetas (destino)
      • DESCR: descripción de datos
      • feature_names: nombres de funciones,
      • target_names: nombre de la etiqueta (valor objetivo)
  • División de conjuntos de datos 【Maestría】
    • sklearn.model_selection.train_test_split(matrices, *opciones)
    • parámetro:
      • x – valor propio
      • y – valor objetivo
      • test_size – tamaño del conjunto de prueba
      • ramdom_state – semilla de número aleatorio
    • valor de retorno:
      • tren_x, prueba_x, tren_y, prueba_y

1.5 Ingeniería de características: preprocesamiento de características

objetivo de aprendizaje

  • Objetivo
    • Comprender qué es el preprocesamiento de funciones
    • Conozca los principios y diferencias entre normalización y estandarización.

1 ¿Qué es el preprocesamiento de funciones?

1.1 Definición de preprocesamiento de características

explicación de scikit-learn

proporciona varias funciones de utilidad comunes y clases de transformadores para cambiar los vectores de características sin procesar a una representación que sea más adecuada para los estimadores posteriores.

Traducido: el proceso de convertir datos de características en datos de características más adecuados para el modelo de algoritmo a través de algunas funciones de conversión

Insertar descripción de la imagen aquí

  • ¿Por qué necesitamos normalizar/estandarizar?
    • Las unidades o tamaños de las características son bastante diferentes, o la variación de una característica es varios órdenes de magnitud mayor que otras características , lo que fácilmente afecta (domina) los resultados objetivo , lo que hace imposible que algunos algoritmos aprendan otras características.
  • Ejemplo: datos de citas

Insertar descripción de la imagen aquí

Necesitamos utilizar algunos métodos de transformación adimensional para convertir datos de diferentes especificaciones en la misma especificación.

1.2 Contenidos incluidos (adimensionalización de datos numéricos)

  • Normalizado
  • Estandarización

1.3 API de preprocesamiento de funciones

sklearn.preprocessing

2 Normalización

2.1 Definición

Asigne los datos a (el valor predeterminado es [0,1]) transformando los datos originales

2.2 Oficial

Insertar descripción de la imagen aquí

Actuando sobre 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 respectivamente los valores de intervalo especificados. El valor predeterminado mx es 1, mi es 0

Entonces, ¿cómo entender este proceso? Veamos un ejemplo

Insertar descripción de la imagen aquí

2.3 API

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

2.4 Cálculo de datos

Realizamos operaciones sobre los siguientes datos, en dating.txt. Lo que se guarda son los datos de fechas anteriores.

milage,Liters,Consumtime,target
40920,8.326976,0.953952,3
14488,7.153469,1.673904,2
26052,1.441871,0.805124,1
75136,13.147394,0.428964,1
38344,1.669788,0.134296,1
  • analizar

1. Crear una instancia de MinMaxScalar

2. Convertir mediante fit_transform

import pandas as pd
from sklearn.preprocessing import MinMaxScaler

def minmax_demo():
    """
    归一化演示
    :return: None
    """
    data = pd.read_csv("./data/dating.txt")
    print(data)
    # 1、实例化一个转换器类
    transfer = MinMaxScaler(feature_range=(2, 3))
    # 2、调用fit_transform
    data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
    print("最小值最大值归一化处理的结果:\n", data)

    return None
minmax_demo()

Resultados de devolución:

     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
..      ...        ...         ...     ...
998   48111   9.134528    0.728045       3
999   43757   7.882601    1.332446       3

[1000 rows x 4 columns]
最小值最大值归一化处理的结果:
 [[ 2.44832535  2.39805139  2.56233353]
 [ 2.15873259  2.34195467  2.98724416]
 [ 2.28542943  2.06892523  2.47449629]
 ..., 
 [ 2.29115949  2.50910294  2.51079493]
 [ 2.52711097  2.43665451  2.4290048 ]
 [ 2.47940793  2.3768091   2.78571804]]

Pregunta: ¿Cuál será el impacto si hay muchos valores atípicos en los datos?
Insertar descripción de la imagen aquí

2.5 Resumen normalizado

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

¿qué hacer?

3 Estandarización

3.1 Definición

Al transformar los datos originales, los datos se transforman en un rango con una media de 0 y una desviación estándar de 1.

3.2 Oficial

Insertar descripción de la imagen aquí

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

Entonces, volvamos al punto anormal de ahora, echemos un vistazo a la estandarización.

Insertar descripción de la imagen aquí

  • Para la normalización: si hay valores atípicos que afectan los valores máximo y mínimo, entonces los resultados obviamente cambiarán.
  • Para la estandarización: si ocurren valores atípicos, debido a una cierta cantidad de datos, una pequeña cantidad de valores atípicos no tendrá un gran impacto en el valor promedio, por lo que la varianza cambiará poco.

3.3 API

  • sklearn.preprocesamiento.StandardScaler( )
    • Después del procesamiento, todos los datos de cada columna se agrupan alrededor de la media 0 y la desviación estándar es 1.
    • StandardScaler.fit_transform(X)
      • X: Datos en formato de matriz numerosa [n_samples,n_features]
    • Valor de retorno: matriz convertida con la misma forma

3.4 Cálculo de datos

Procese los datos anteriores de manera similar

  • analizar

1. Crear una instancia de StandardScaler

2. Convertir mediante fit_transform

import pandas as pd
from sklearn.preprocessing import StandardScaler

def stand_demo():
    """
    标准化演示
    :return: None
    """
    data = pd.read_csv("./data/dating.txt")
    print(data)
    # 1、实例化一个转换器类
    transfer = StandardScaler()
    # 2、调用fit_transform
    data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
    print("标准化的结果:\n", data)
    print("每一列特征的平均值:\n", transfer.mean_)
    print("每一列特征的方差:\n", transfer.var_)

    return None

Resultados de devolución:

     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
..      ...        ...         ...     ...
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]

3.5 Resumen de estandarización

Es relativamente estable cuando hay suficientes muestras y es adecuado para escenarios modernos y ruidosos de big data.

4 Resumen

  • ¿Qué es la ingeniería de características? [saber]
    • definición
      • El proceso de convertir datos de características en datos de características más adecuados para el modelo de algoritmo a través de algunas funciones de conversión.
    • Contiene:
      • Normalizado
      • Estandarización
  • normalizar【saber】
    • definición:
      • Transforme los datos originales y asigne los datos a (el valor predeterminado es [0,1])
    • API:
      • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)…)
      • Parámetro: feature_range: especifique el rango usted mismo, valor predeterminado 0-1
    • Resumir:
      • Poca robustez (fácilmente afectada por valores atípicos)
      • Solo adecuado para escenarios tradicionales de datos pequeños y precisos (no lo usaré en el futuro)
  • Estandarización [dominio]
    • definición:
      • Transforme los datos originales a un rango donde la media es 0 y la desviación estándar es 1.
    • API:
      • sklearn.preprocesamiento.StandardScaler( )
    • Resumir:
      • Los valores atípicos tienen poco impacto en mí
      • Adecuado para escenarios modernos y ruidosos de big data (lo usaré de ahora en adelante)

1.6 Caso: Predicción de especies de iris: implementación del proceso

objetivo de aprendizaje

  • Objetivo
    • Conozca el uso de KNeighborsClassifier

1 Recomprensión de la API del algoritmo K-Vecino más cercano

  • sklearn.neighbors.KNeighborsClassifier(n_vecinos=5,algoritmo='auto')
    • n_vecinos:
      • int, opcional (predeterminado = 5), k_neighbors consulta el número de vecinos utilizados de forma predeterminada
    • algoritmo: {'auto', 'ball_tree', 'kd_tree', 'brute'}
      • Algoritmo rápido de búsqueda del vecino más cercano k, el parámetro predeterminado es automático, lo que puede entenderse como que el propio algoritmo determina el algoritmo de búsqueda apropiado. Además, los usuarios también pueden especificar el algoritmo de búsqueda ball_tree, kd_tree y los métodos brutos para buscar.
        • bruta es una búsqueda de fuerza bruta, que es un escaneo lineal. Cuando el conjunto de entrenamiento es grande, el cálculo lleva mucho tiempo.
        • 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 mediante división de la mediana, cada nodo es un hiperrectángulo, es eficiente cuando la dimensión es menor que 20.
        • El árbol de bolas fue inventado para superar la falla de alta dimensión del árbol kd. Su proceso de construcción consiste en dividir el espacio muestral con el centro de masa C y el radio r, y cada nodo es una hiperesfera.

2 Caso: Predicción de especies de iris

2.1 Introducción a los conjuntos de datos

El conjunto de datos Iris es un conjunto de datos experimentales de clasificación de uso común, recopilado y organizado por Fisher, 1936. Iris, también conocido como conjunto de datos de flores de iris, es un tipo de conjunto de datos para análisis de múltiples variables. Introducción detallada sobre el conjunto de datos:
Insertar descripción de la imagen aquí

2.2 Análisis de pasos

  • 1. Obtenga el conjunto de datos
  • 2. Procesamiento de datos básicos
  • 3. Ingeniería de funciones
  • 4. Aprendizaje automático (entrenamiento de modelos)
  • 5. Evaluación del modelo

2.3 Proceso de código

  • Módulo de importació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
  • Primero obtenga el conjunto de datos de sklearn y luego divida el conjunto de datos
# 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)
  • Realizar la estandarización de datos.
    • Estandarización de valores propios.
# 3、特征工程:标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
  • El modelo está entrenado para predecir
# 4、机器学习(模型训练)
estimator = KNeighborsClassifier(n_neighbors=9)
estimator.fit(x_train, y_train)
# 5、模型评估
# 方法1:比对真实值和预测值
y_predict = estimator.predict(x_test)
print("预测结果为:\n", y_predict)
print("比对真实值和预测值:\n", y_predict == y_test)
# 方法2:直接计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)

3 Resumen del caso

En este caso, los contenidos específicos de cumplimentación incluyen:
  • Utilice la visualización para cargar y explorar datos para determinar si las características separan diferentes categorías.
  • Prepare los datos normalizando características numéricas y realizando muestreos aleatorios en conjuntos de entrenamiento y prueba.
  • Cree y evalúe modelos de aprendizaje automático a través de estadísticas y medidas de precisión.

Discuta el código de aprendizaje automático que acaba de completar entre sus compañeros y asegúrese de que se ejecute correctamente en sus propias computadoras.

4 Resumen

  • Uso de KNeighborsClassifier【Saber】
    • sklearn.neighbors.KNeighborsClassifier(n_vecinos=5,algoritmo='auto')
      • algoritmo(auto,ball_tree, kd_tree, brute): qué algoritmo elegir para el cálculo

1.7 Resumen del algoritmo KNN

Resumen de ventajas y desventajas del algoritmo k vecino más cercano
  • ventaja:
    • Sencillo y eficaz
    • El algoritmo k-vecino más cercano es una tecnología en línea donde se pueden agregar nuevos datos directamente al conjunto de datos sin volver a entrenar.
    • Tenga una alta tolerancia a los valores atípicos y al ruido.
    • El algoritmo de k-vecino más cercano admite inherentemente la clasificación múltiple y se distingue de los perceptrones, la regresión logística y la SVM.
    • Adecuado para muestras cruzadas de dominio de clase
      • El método KNN se basa principalmente en las muestras circundantes limitadas , en lugar del método de discriminar el dominio de clase, para determinar la categoría a la que pertenece. Por lo tanto, para que el conjunto de muestras se divida con más intersecciones o superposiciones en el dominio de clase, el KNN El método es más eficiente que otros métodos. Adecuado.

  • defecto:
    • aprendizaje perezoso
      • El algoritmo KNN es un método de aprendizaje diferido (básicamente sin aprendizaje) y algunos algoritmos de aprendizaje activo son mucho más rápidos.
    • Ocupa memoria
      • El establecimiento de modelos como árboles KD y árboles de bolas requiere una gran cantidad de memoria.
    • El resultado no es muy interpretable.
      • Por ejemplo, el resultado de los árboles de decisión es más interpretable.
    • No es bueno para muestras desequilibradas.
      • Cuando las muestras están desequilibradas, por ejemplo, la capacidad de muestra de una clase es muy grande, mientras que la capacidad de muestra de otras clases es muy pequeña, puede causar que cuando se ingresa una nueva muestra, las muestras de la clase de gran capacidad tengan en cuenta para la mayoría entre los K vecinos de la muestra. Este algoritmo solo calcula las muestras vecinas "más cercanas". Si el número de muestras de un determinado tipo es grande, entonces este tipo de muestra no está cerca de la muestra objetivo o este tipo de muestra está muy cerca de la muestra objetivo. En cualquier caso, la cantidad no afecta el resultado de la operación. Se puede utilizar el método del peso (los vecinos con una distancia pequeña de la muestra tienen un peso grande) para mejorarlo.
    • Gran cantidad de cálculo
      • La solución comúnmente utilizada en la actualidad es editar los puntos de muestra conocidos de antemano y eliminar las muestras que tienen poco efecto en la clasificación.

1.8 Validación cruzada, búsqueda en cuadrícula

objetivo de aprendizaje

  • Objetivo
    • Sepa por qué necesita un conjunto de validación
    • Conocer los conceptos de validación cruzada y búsqueda en grid.
    • Puede utilizar validación cruzada y búsqueda de cuadrícula para optimizar los modelos de entrenamiento.

1 ¿Qué es la validación cruzada?

Validación cruzada: divida los datos de entrenamiento obtenidos en conjuntos de entrenamiento y validación. Tome la siguiente figura como ejemplo: los datos se dividen en 4 partes, una de las cuales se utiliza como conjunto de verificación. Luego, después de 4 veces (conjuntos) de pruebas, cada vez se reemplazó un conjunto de validación diferente. Es decir, se obtienen los resultados de 4 conjuntos de modelos y se toma el valor medio como resultado final. También se llama validación cruzada cuádruple.

1.1 Análisis

Antes sabíamos que los datos se dividen en conjunto de entrenamiento y conjunto de prueba, pero para que los resultados del modelo obtenidos del entrenamiento sean más precisos. **Realice el siguiente procesamiento

  • Conjunto de entrenamiento: conjunto de entrenamiento + conjunto de validación
  • conjunto de prueba: conjunto de prueba

Insertar descripción de la imagen aquí

1.2 Por qué es necesaria la validación cruzada

El propósito del conjunto de validación: ajustar los hiperparámetros

Propósito de la validación cruzada: hacer que el modelo evaluado sea más preciso y creíble

Pregunta: Esto sólo hace que el modelo evaluado sea más preciso y creíble, entonces, ¿cómo elegir o ajustar los parámetros?

2 ¿Qué es la búsqueda en cuadrícula?

Por lo general, hay muchos parámetros que deben especificarse manualmente (como el valor K en el algoritmo vecino más cercano), que se denominan hiperparámetros . Sin embargo, el proceso manual es complicado, por lo que es necesario preestablecer varias combinaciones de hiperparámetros para el modelo. Cada conjunto de hiperparámetros se evalúa mediante validación cruzada. Finalmente, se selecciona la combinación óptima de parámetros para construir el modelo.

Insertar descripción de la imagen aquí

3 API de validación cruzada y búsqueda de cuadrícula (selección y ajuste de modelo):

  • sklearn.model_selection.GridSearchCV(estimador, param_grid=Ninguno,cv=Ninguno)
    • Realizar una búsqueda exhaustiva de valores de parámetros específicos del estimador.
    • estimador: objeto estimador
    • param_grid: parámetros del estimador (dict){"n_neighbors":[1,3,5]}
    • cv: Especificar varios pliegues de validación cruzada
    • ajuste: datos de entrenamiento de entrada
    • puntuación: precisión
    • Análisis de resultados:
      • mejor puntuación__: El mejor resultado verificado en validación cruzada
      • mejor estimador : el mejor modelo paramétrico
      • Resultados de CV : resultados de precisión del conjunto de validación y resultados de precisión del conjunto de entrenamiento después de cada validación cruzada.

4. Agregue ajuste del valor K en el caso del iris.

  • Construyendo un estimador usando GridSearchCV
from sklearn.model_selection import GridSearchCV
# 1、获取数据集
iris = load_iris()
# 2、数据基本处理 -- 划分数据集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
# 3、特征工程:标准化
# 实例化一个转换器类
transfer = StandardScaler()
# 调用fit_transform
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、KNN预估器流程
#  4.1 实例化预估器类
estimator = KNeighborsClassifier()

# 4.2 模型选择与调优——网格搜索和交叉验证
# 准备要调的超参数
param_dict = {
    
    "n_neighbors": [1, 3, 5]}
estimator = GridSearchCV(estimator, param_grid=param_dict, cv=3)
# 4.3 fit数据进行训练
estimator.fit(x_train, y_train)
# 5、评估模型效果
# 方法a:比对预测结果和真实值
y_predict = estimator.predict(x_test)
print("比对预测结果和真实值:\n", y_predict == y_test)
# 方法b:直接计算准确率
score = estimator.score(x_test, y_test)
print("直接计算准确率:\n", score)
  • Luego evalúe para ver los resultados finales de la selección y los resultados de la validación cruzada.
print("在交叉验证中验证的最好结果:\n", estimator.best_score_)
print("最好的模型:\n", estimator.best_estimator_)
print("最好模型的参数:\n",estimator.best_params_)
print("每次交叉验证后的准确率结果:\n", estimator.cv_results_)

5 Resumen

  • Validación cruzada 【Saber】
    • definición:
      • Divida los datos de entrenamiento obtenidos en conjuntos de entrenamiento y validación.
      • *validación cruzada doble
    • Método dividido:
      • Conjunto de entrenamiento: conjunto de entrenamiento + conjunto de validación
      • conjunto de prueba: conjunto de prueba
    • Por qué es necesaria la validación cruzada
      • Para hacer el modelo evaluado más preciso y creíble
      • Nota: La validación cruzada no puede mejorar la precisión del modelo.
  • Búsqueda de cuadrícula【Saber】
    • Hiperparámetros:
      • En sklearn, los parámetros que deben especificarse manualmente se denominan hiperparámetros.
    • La búsqueda de cuadrícula consiste en pasar los valores de estos hiperparámetros en forma de diccionario y luego seleccionar los valores óptimos.
  • API【saber】
    • sklearn.model_selection.GridSearchCV(estimador, param_grid=Ninguno,cv=Ninguno)
      • Estimador: qué modelo de entrenamiento se seleccionó.
      • param_grid: los hiperparámetros que se pasarán
      • cv – validación cruzada múltiple

Ampliación del conocimiento: otras fórmulas de distancia


1 Distancia euclidiana estandarizada:

La distancia euclidiana estandarizada es una mejora realizada para abordar las deficiencias de la distancia euclidiana.

Idea: dado que la distribución de cada componente dimensional de los datos es diferente, primero "estandarice" cada componente para que tenga la misma media y varianza.

S_k S**k representa la desviación estándar de cada dimensión

Insertar descripción de la imagen aquí

Si el recíproco de la varianza se considera un peso, también se le puede llamar distancia euclidiana ponderada.

Ejemplo:

X=[[1,1],[2,2],[3,3],[4,4]];(假设两个分量的标准差分别为0.5和1)
经计算得:
d =   2.2361    4.4721    6.7082    2.2361    4.4721    2.2361

2 Distancia del coseno

En geometría, el coseno del ángulo se puede utilizar para medir la diferencia de dirección entre dos vectores; en el aprendizaje automático, este concepto se toma prestado para medir la diferencia entre vectores de muestra.

  • La fórmula del coseno del ángulo entre el vector A(x1,y1) y el vector B(x2,y2) en un espacio bidimensional:

Insertar descripción de la imagen aquí

  • El coseno del ángulo entre dos puntos muestrales de n dimensiones a(x11,x12,…,x1n) y b(x21,x22,…,x2n) es:

Insertar descripción de la imagen aquí

Ahora mismo:

(La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-oPC0ym2D-1664343761290) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8t6cjvi7j306f01qa9t .jpg)]

El rango de valores del coseno del ángulo incluido es [-1,1]. Cuanto mayor es el coseno, menor es el ángulo entre los dos vectores y cuanto menor es el coseno, mayor es el ángulo entre los dos vectores. Cuando las direcciones de los dos vectores coinciden, el coseno toma un valor máximo de 1, y cuando las direcciones de los dos vectores son completamente opuestas, el coseno toma un valor mínimo de -1.

Ejemplo:

X=[[1,1],[1,2],[2,5],[1,-4]]
经计算得:
d =   0.9487    0.9191   -0.5145    0.9965   -0.7593   -0.8107

3 Distancia de Hamming [Entender]:

La distancia de Hamming de dos cadenas de igual longitud s1 y s2 es: el número mínimo de sustituciones de caracteres necesarias para cambiar una de ellas por la otra.

Por ejemplo:

  The Hamming distance between "1011101" and "1001001" is 2. 
  The Hamming distance between "2143896" and "2233796" is 3. 
  The Hamming distance between "toned" and "roses" is 3.

[La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-wocCqjOI-1664343761290) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8t6bsafnj30kg0cgmzu .jpg)]

随堂练习:
求下列字符串的汉明距离:

  1011101与 1001001  

  2143896与 2233796 
 
  irie与 rise

Peso de Hamming : es la distancia de Hamming de una cadena con respecto a una cadena cero de la misma longitud, es decir, es el número de elementos distintos de cero en la cadena: para una cadena binaria, es el número de 1 , entonces el peso Hamming de 11101 es 4. Por tanto, si la distancia de Hamming entre los elementos a y b en un espacio vectorial es igual a la diferencia ab de sus pesos de Hamming.

Aplicación: El análisis de peso de Hamming tiene aplicaciones en campos que incluyen la teoría de la información, la teoría de la codificación, la criptografía y otros campos. Por ejemplo, en el proceso de codificación de información, para mejorar la tolerancia a errores, la distancia mínima de Hamming entre códigos debe ser lo más grande posible. Sin embargo, si desea comparar dos cadenas de diferentes longitudes, no solo necesita realizar operaciones de reemplazo, sino también de inserción y eliminación, en este caso se suelen utilizar algoritmos más complejos, como la distancia de edición.

Ejemplo:

X=[[0,1,1],[1,1,2],[1,5,2]]
注:以下计算方式中,把2个向量之间的汉明距离定义为2个向量不同的分量所占的百分比。

经计算得:
d =   0.6667    1.0000    0.3333

4 Distancia Jaccard [Entender]:

Coeficiente de similitud de Jaccard: La proporción de los elementos de intersección de dos conjuntos A y B en la unión de A y B se llama coeficiente de similitud de Jaccard de los dos conjuntos, representado por el símbolo J(A, B) significa:

(La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-z5opAsN3-1664343761294) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8t66j2f7j30ai04i0sr .jpg)]

Distancia de Jaccard: a diferencia del coeficiente de similitud de Jaccard, la diferencia entre dos conjuntos se mide por la proporción de diferentes elementos en los dos conjuntos con respecto a todos los elementos:

[La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-8JJAyRSf-1664343761296) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8t65450oj30o204smxb .jpg)]

Ejemplo:

X=[[1,1,0],[1,-1,0],[-1,1,0]]
注:以下计算中,把杰卡德距离定义为不同的维度的个数占“非全零维度”的比例
经计算得:
d =   0.5000    0.5000    1.0000

5 Distancia de Mahalanobis [Comprender]

Hay dos gráficas de distribución normal en la siguiente figura. Sus medias son a y b respectivamente, pero sus varianzas son diferentes. ¿A qué población está más cerca el punto A en la gráfica? En otras palabras, ¿a quién tiene mayor probabilidad de pertenecer A? Evidentemente, A está más cerca del de la izquierda, y la probabilidad de que A pertenezca a la población de la izquierda es mayor, aunque la distancia euclidiana entre A y a es mayor. Ésta es la explicación intuitiva de la distancia de Mahalanobis.

[La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-fRIoP9Lz-1664343761297) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8t67dr3cj30za0au78d .jpg)]

La distancia de Mahalanobis es una distancia basada en la distribución de la muestra.

La distancia de Mahalanobis fue propuesta por el estadístico indio Mahalanobis y representa la distancia de covarianza de los datos. Es un método eficaz para calcular la similitud de dos conjuntos de muestras de posición.

A diferencia de la distancia euclidiana, tiene en cuenta la conexión entre varias propiedades, es decir, independientemente de la escala de medición.

**Definición de distancia de Mahalanobis: **Supongamos que la población G es una población m-dimensional (se examinan m indicadores), el vector medio es μ= (μ1, μ2,..., μm,)`, y la matriz de covarianza es ∑= (σij) ,

Entonces la distancia de Mahalanobis entre la muestra X=(X1, X2,...,Xm,)` y la población G se define como:

[La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-KdVJDgQp-1664343761297) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8t6841bfj30ze086q5u .jpg)]

La distancia de Mahalanobis también se puede definir como el grado de diferencia entre dos variables aleatorias que obedecen a la misma distribución y cuya matriz de covarianza es Σ: Si la matriz de covarianza es la matriz identidad, la distancia de Mahalanobis se simplifica a la distancia euclidiana ; si la matriz de covarianza es una matriz diagonal, también se la puede llamar distancia euclidiana normalizada.

Características de la distancia de Mahalanobis:

1. Dimensionalmente independiente , eliminando la interferencia de correlación entre variables;

2. El cálculo de la distancia de Mahalanobis se basa en la muestra de población . Si toma las mismas dos muestras y las coloca en dos poblaciones diferentes, la distancia de Mahalanobis finalmente calculada entre las dos muestras suele ser diferente. Lo mismo, a menos que las matrices de covarianza de la dos poblaciones resultan ser iguales;

3. Durante el cálculo de la distancia de Mahalanobis, se requiere que el número de muestras totales sea mayor que la dimensión de la muestra , de lo contrario la matriz inversa de la matriz de covarianza de la muestra global obtenida no existe, en este caso solo use el cálculo de la distancia euclidiana.

4. Existe otra situación en la que se cumple la condición y el número de muestras generales es mayor que la dimensión de la muestra, pero la matriz inversa de la matriz de covarianza aún no existe, como tres puntos de muestra (3, 4), (5, 6), (7, 8), esta situación se debe a que las tres muestras son colineales en el plano espacial bidimensional en el que se encuentran. En este caso también se utiliza el cálculo de la distancia euclidiana.

Distancia euclidiana y distancia de Mahalanobis:

(La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-fvQdKslr-1664343761298) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8t6911xoj30xe0a8778 .jpg)]

Ejemplo:

Se sabe que hay dos categorías G1 y G2. Por ejemplo, G1 es un producto producido por el equipo A y G2 es un producto similar producido por el equipo B. La calidad del producto del equipo A es alta (por ejemplo, el índice de inspección es la resistencia al desgaste. La pérdida μ2=75 refleja la variación de la precisión del equipo σ2(2)=4.

Hoy existe un producto G0 y la resistencia al desgaste medida es X0 = 78. ¿Intenta determinar con qué equipo se fabrica este producto?

Intuitivamente, la distancia absoluta entre X0 y μ1 (equipo A) es más cercana. Con base en el principio de la distancia más cercana, ¿debe considerarse que este producto es producido por el equipo A?

Considere una distancia relativa a la dispersión, sean las distancias relativas entre X0 y G1, G2 d1, d2, entonces:

[La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-oDEkLHTm-1664343761299) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8t64may4j30v40ak440 .jpg)]

Debido a que d2 = 1,5 < d1 = 4, de acuerdo con este criterio de distancia, se debe considerar que X0 es producido por el equipo B.

La calidad de los productos producidos por el equipo B está más dispersa y la posibilidad de que X0 sea 78 es mayor; mientras que la calidad de los productos producidos por el equipo A está más concentrada y la posibilidad de que X0 sea 78 es menor.

Este juicio de distancia relativo a la dispersión es la distancia de Mahalanobis.

[La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-g0JT1wJ5-1664343761300) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8t6a16yvj30w40d8tbq .jpg)]

1.9 Caso 2: Predicción de la ubicación del check-in en Facebook

objetivo de aprendizaje

  • Objetivo
    • Domine el contenido de aprendizaje del Capítulo 1 a través del caso de predicción de ubicación de Facebook

1 descripción del proyecto

[La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-ZWbTZqDP-1664343761303) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8u5nj8stj30nu07gaio .jpg)]

El objetivo de este concurso es predecir dónde firmará una persona. Para este concurso, Facebook creó un mundo virtual que incluye alrededor de 100.000 lugares que cubren 10 kilómetros por 10 kilómetros, con un total de 100 kilómetros cuadrados. Para un conjunto determinado de coordenadas, su tarea será predecir la próxima ubicación de registro del usuario en función de su ubicación, precisión, marca de tiempo, etc. Los datos están diseñados para parecerse a los datos de ubicación de los dispositivos móviles. Tenga en cuenta: solo puede hacer predicciones utilizando los datos proporcionados.

2 Introducción a los conjuntos de datos

Introducción de datos:

(La transferencia de la imagen del enlace externo falló. El sitio de origen puede tener un mecanismo anti-leeching. Se recomienda guardar la imagen y cargarla directamente (img-1htKvqGU-1664343761304) (C:\Users\Administrator\Documents\assets\006tNbRwly1ga8u5nxn8qj30cy058js5 .jpg)]

文件说明 train.csv, test.csv
  row id:签入事件的id
  x y:坐标
  accuracy: 准确度,定位精度
  time: 时间戳
  place_id: 签到的位置,这也是你需要预测的内容

Sitio web oficial: https://www.kaggle.com/c/facebook-v-predicting-check-ins

Análisis de 3 pasos

  • Realice un procesamiento básico de los datos (es posible que parte del procesamiento realizado aquí no logre buenos resultados, solo lo estamos probando brevemente y podemos procesar algunas características según algunos métodos de selección de características)
    • 1 Reducir el alcance del conjunto de datos DataFrame.query()
    • 2 Seleccione funciones de tiempo útiles
    • 3 Eliminar usuarios cuyas posiciones de check-in sean menores que n
  • Dividir el conjunto de datos
  • Estandarización
  • k-predicción del vecino más cercano
具体步骤:
# 1.获取数据集
# 2.基本数据处理
# 2.1 缩小数据范围(这个不是处理数据的技巧,只是因为我们的数据集太大了,我们使用了部分数据来做演示)
# 2.2 选择时间特征
# 2.3 去掉签到较少的地方
# 2.4 确定特征值和目标值
# 2.5 分割数据集
# 3.特征工程 -- 特征预处理(标准化)
# 4.机器学习 -- knn+cv
# 5.模型评估

4 implementación de código

  • 1. Obtenga el conjunto de datos
# 1、获取数据集
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
facebook = pd.read_csv("./data/train.csv")
  • 2. Procesamiento de datos básicos
# 2.基本数据处理
# 2.1 缩小数据范围
#(这个不是处理数据的技巧,只是因为我们的数据集太大了,我们使用了部分数据来做演示)
facebook_data = facebook.query("x>2.0 & x<2.5 & y>2.0 & y<2.5")
# 2.2 选择时间特征
time = pd.to_datetime(facebook_data["time"], unit="s")#将该列数据转换为时间类型
time = pd.DatetimeIndex(time)#将时间类型数据转换为索引格式
facebook_data = facebook_data.copy()
facebook_data["hour"] = time.hour
facebook_data["weekday"] = time.weekday
# 2.3 去掉签到较少的地方(我们可以认为签到少的地方是异常值)
place_count = facebook_data.groupby("place_id").count()
place_count = place_count[place_count["row_id"]>30]
facebook_data = facebook_data[facebook_data["place_id"].isin(place_count.index)]
# 2.4 确定特征值和目标值
x = facebook_data[["x", "y", "accuracy","hour", "weekday"]]
y = facebook_data["place_id"]
# 2.5 分割数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1,random_state=22)
  • 3. Ingeniería de funciones: preprocesamiento de funciones (estandarización)
# 3.特征工程--特征预处理(标准化)
# 3.1 实例化一个转换器
transfer = StandardScaler()
# 3.2 调用fit_transform
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
  • 4. Aprendizaje automático: knn+cv
# 4.机器学习--knn+cv
# 4.1 实例化一个估计器
estimator = KNeighborsClassifier()
# 4.2 调用gridsearchCV
param_grid = {
    
    "n_neighbors": [1, 3, 5]}
estimator = GridSearchCV(estimator, param_grid=param_grid, cv=3)
# 4.3 模型训练
estimator.fit(x_train, y_train)
  • 5. Evaluación del modelo
# 5.模型评估
# 5.1 基本评估方式
score = estimator.score(x_test, y_test)
print("最后预测的准确率为:\n", score)

y_predict = estimator.predict(x_test)
print("最后的预测值为:\n", y_predict)
print("预测值和真实值的对比情况:\n", y_predict == y_test)

# 5.2 使用交叉验证后的评估方式
print("在交叉验证中验证的最好结果:\n", estimator.best_score_)
print("最好的参数模型:\n", estimator.best_estimator_)
print("每次交叉验证后的验证集准确率结果和训练集准确率结果:\n",estimator.cv_results_)

meIndex(time)#Convertir datos de tipo de hora a formato de índice
facebook_data = facebook_data.copy()
facebook_data["hora"] = hora.hora
facebook_data["weekday"] = time.weekday

5. Eliminar los lugares con pocos check-ins (podemos considerar los lugares con pocos check-ins como valores atípicos)

place_count = facebook_data.groupby(“place_id”).count()
place_count = place_count[place_count[“row_id”]>30]
facebook_data = facebook_data[facebook_data[“place_id”].isin(place_count.index)]

6 Determinar los valores característicos y los valores objetivo.

x = facebook_data[[“x”, “y”, “exactitud”, “hora”, “día de la semana”]]
y = facebook_data[“place_id”]

7 Dividir el conjunto de datos

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1,random_state=22)


- 3.特征工程--特征预处理(标准化)

```python
# 3.特征工程--特征预处理(标准化)
# 3.1 实例化一个转换器
transfer = StandardScaler()
# 3.2 调用fit_transform
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
  • 4. Aprendizaje automático: knn+cv
# 4.机器学习--knn+cv
# 4.1 实例化一个估计器
estimator = KNeighborsClassifier()
# 4.2 调用gridsearchCV
param_grid = {
    
    "n_neighbors": [1, 3, 5]}
estimator = GridSearchCV(estimator, param_grid=param_grid, cv=3)
# 4.3 模型训练
estimator.fit(x_train, y_train)
  • 5. Evaluación del modelo
# 5.模型评估
# 5.1 基本评估方式
score = estimator.score(x_test, y_test)
print("最后预测的准确率为:\n", score)

y_predict = estimator.predict(x_test)
print("最后的预测值为:\n", y_predict)
print("预测值和真实值的对比情况:\n", y_predict == y_test)

# 5.2 使用交叉验证后的评估方式
print("在交叉验证中验证的最好结果:\n", estimator.best_score_)
print("最好的参数模型:\n", estimator.best_estimator_)
print("每次交叉验证后的验证集准确率结果和训练集准确率结果:\n",estimator.cv_results_)

Supongo que te gusta

Origin blog.csdn.net/weixin_52733693/article/details/127091573
Recomendado
Clasificación