Conferencia intensiva de casos de aplicación práctica de algoritmos: ingeniería de funciones | Aprendizaje automático gráfico

Tabla de contenido

prefacio

Introducción a la ingeniería de funciones

Proyecto de combate del Titanic.

1. Tipo de característica

2. Limpieza de datos

2.1 Alineación de datos

2.2 Procesamiento de valores faltantes

(1) Eliminación y procesamiento de valores faltantes

(2) Llenado de datos y procesamiento de valores faltantes

2.3 Procesamiento de valores atípicos

(1) Método de detección de anomalías

(2) Método de manejo de excepciones

3. Construcción de funciones

3.1 Construcción de características estadísticas

3.2 Valor del período

3.3 agrupación de datos

3.4 Combinación de funciones

4. Transformación de funciones

4.1 Estandarización

4.2 Normalización

4.3 Escalado de amplitud (escalado)

4.4 Normalización versus normalización

4.5 Transformación no lineal

4.6 Procesamiento de variables discretas

4.7 Reducción de dimensionalidad

5. Selección de funciones

5.1 Filtro Filtro

5.2 Envoltorio envuelto

5.3 Integrado Integrado

5.4 Resumen de selección de funciones

6. Sugerencias prácticas para la ingeniería de funciones.

6.1 Comprensión de los datos

6.2 Preprocesamiento de datos

6.3 Limpieza de datos

6.4 Construcción y transformación de características

6.5 Modelo

Una descripción general del proceso de modelado de aprendizaje automático (código Python)

1.1 Definir el problema

1.2 Selección de datos

2 Ingeniería de funciones

2.1 Análisis de datos exploratorios

2.2 Preprocesamiento de datos

Manejo de valores atípicos

Manejo de valores faltantes

discretización de datos

estandarización de datos

2.3 Extracción de características

representación de características

Derivación de características

selección de características

reducción de dimensionalidad de características

3 entrenamiento modelo

3.1 División del conjunto de datos

3.3 Proceso de formación

4 Evaluación del modelo

4.1 Indicadores de evaluación

Evaluar modelos de clasificación.

Evaluar modelos de regresión

Evaluar el modelo de agrupamiento.

4.2 Evaluación y optimización del modelo.

5 Decisión modelo

6 Combate del proyecto de aprendizaje automático (minería de datos)

6.1 Introducción al proyecto

6.2 Implementación del código


 

prefacio

Este artículo es un complemento al aprendizaje de funciones. Los estudiantes que estén interesados ​​en un análisis detallado de la ingeniería de funciones pueden pasar a la trilogía de ingeniería de funciones.

Conferencias intensivas sobre casos prácticos de aplicación de algoritmos de MATLAB-[Aplicaciones digitales y analógicas] Ingeniería de funciones

Conferencias intensivas sobre casos de aplicación práctica de algoritmos MATLAB - [Aplicaciones digitales y analógicas] Ingeniería de funciones (suplementario) 

Conferencias intensivas sobre casos prácticos de aplicación de algoritmos de MATLAB - [Aplicaciones Digitales y Analógicas] Ingeniería de Funciones (Final) 

imagen

La figura anterior es el diagrama de flujo familiar del modelado de aprendizaje automático. Un paso muy importante en todo el proceso de modelado es el preprocesamiento de datos y la ingeniería de características, que determinan en gran medida la calidad del efecto de modelado final.

Introducción a la ingeniería de funciones

Primero, echemos un vistazo a la "ingeniería de funciones". De hecho, ya ha visto que hemos incluido funciones en la serie práctica de artículos de ShowMeAI Proyecto integral de aprendizaje automático Python: pronóstico de ventas de comercio electrónico [2] y Proyecto integral de aprendizaje automático Python: pronóstico de ventas de comercio electrónico (avanzado) [3] Procesamiento de ingeniería.

imagen

Si definimos ingeniería de características , se refiere a: utilizar el conocimiento del dominio y los datos existentes para crear nuevas características para su uso en algoritmos de aprendizaje automático; puede ser manual o automático.

Hay un dicho popular en la industria: la ingeniería de características y datos determina el límite superior del modelo, y el algoritmo mejorado apenas se acerca a este límite superior.

Esto se debe a que, en términos de modelado de datos, existe una diferencia entre "estado ideal" y "escena real" y, en muchos casos, los datos originales no están limpios, claros y suficientes:

imagen

El proceso de ingeniería de características equivale a clasificar los datos, extraer información significativa junto con el negocio y organizarla de forma limpia y ordenada: la ingeniería de características tiene significados muy importantes:

imagen

El contenido de este artículo incluye " 1. Tipo de función ", " 2. Limpieza de datos ", " 3. Construcción de funciones ", " 4. Transformación de funciones ", " 5. Selección de funciones " y otras secciones.

Proyecto de combate del Titanic.

imagen

Aquí utilizamos el conjunto de datos del Titanic más simple y más utilizado para explicárselo.

El conjunto de datos del Titanic es un conjunto de datos muy adecuado para principiantes en ciencia de datos y aprendizaje automático. El conjunto de datos contiene la información personal y el estado de supervivencia de algunos miembros de la tripulación en el naufragio del Titanic en 1912. Podemos entrenar un modelo adecuado en el conjunto de datos y predecir la supervivencia en nuevos datos (conjunto de prueba).

El conjunto de datos del Titanic se puede cargar directamente a través de la biblioteca de herramientas de Seaborn, como se muestra en el siguiente código:

import pandas as pd
import numpy as np
import seaborn as sns
df_titanic = sns.load_dataset('titanic')

La descripción del campo de datos del conjunto de datos se muestra en la siguiente figura:

imagen

1. Tipo de característica

Antes de demostrar el preprocesamiento de datos y la ingeniería de funciones de Titanic, ShowMeAI le brindará algunos conocimientos básicos sobre los datos.

imagen

Los datos se pueden dividir en "datos estructurados" y "datos no estructurados". Por ejemplo, en el campo de Internet, la mayoría de los datos comerciales tabulares almacenados en bases de datos son datos estructurados, mientras que el texto, la voz, las imágenes y los videos, etc., pertenecen a datos no estructurados.

imagen

Para los datos que hemos registrado, normalmente podemos distinguir entre alineación de "datos cuantitativos" y "datos cualitativos", donde:

  • Datos cuantitativos : Se refiere a algunos valores numéricos utilizados para medir cantidad y tamaño. Como altura, longitud, volumen, área, humedad, temperatura y otras medidas.

  • Datos cualitativos : se refiere a categorías que describen la naturaleza de los artículos. Como textura, sabor, olor, color, etc.

imagen

2. Limpieza de datos

Antes de la extracción o modelado de datos real, tendremos un enlace de "preprocesamiento de datos" para realizar la limpieza de datos y otras operaciones en los datos originales.

Debido a que los datos en el mundo real son generalmente "datos sucios" incompletos e inconsistentes, la extracción de datos no se puede realizar directamente o los resultados de la extracción no son satisfactorios.

Las principales causas de los "datos sucios" incluyen: datos manipulados, datos incompletos, inconsistencia de datos, duplicación de datos, datos anormales, etc.

imagen

El proceso de limpieza de datos incluye los métodos de procesamiento de datos " 2.1 Alineación de datos ", " 2.2 Procesamiento de valores faltantes ", " 2.3 Procesamiento de valores anormales ", " 2.4 Conversión de datos, etc. ". Explicamos estos métodos de procesamiento en detalle.

2.1 Alineación de datos

imagen

Los datos sin procesar recopilados tienen diferentes formatos y formas. Realizaremos el procesamiento de alineación de datos en tiempo, campos y dimensiones relacionadas. Después de la alineación y normalización de los datos, los datos están limpios y consistentes, lo que es más adecuado para el modelado. La siguiente figura muestra algunos ejemplos de procesamiento:

① tiempo

  • Los formatos de fecha son inconsistentes〖2022-02-20, 20220220, 2022/02/20, 20/02/2022〗.

  • Las unidades de marca de tiempo son inconsistentes, algunas se expresan en segundos y otras en milisegundos.

  • Utilice una hora no válida para representar, utilice 0 para representar la marca de tiempo y utilice FFFF para representar la marca de tiempo final.

② campo

  • El sexo está escrito en el nombre y el número de teléfono móvil está escrito en el número de identificación.

③ dimensión

  • El tipo numérico está unificado [como 1, 2.0, 3.21E3, cuatro].

  • La unidad está unificada [como 180 cm, 1,80 m].

2.2 Procesamiento de valores faltantes

imagen

Los datos faltantes son un problema común en los datos reales. Por diversas razones, los datos que recopilamos no están necesariamente completos. Tenemos algunas formas comunes de lidiar con los valores faltantes. El método de procesamiento específico se puede ampliar a un diagrama:

  • No procesado (algunos modelos como XGBoost[4] / LightGBM[5], etc. pueden manejar valores faltantes).

  • Elimine los datos faltantes (según la dimensión de la muestra o la dimensión del campo).

  • Complete con media, mediana, moda, medias de clase o estimaciones.

Volviendo a nuestro conjunto de datos del Titanic, demostramos varios métodos. Primero comprendamos el valor faltante del conjunto de datos (distribución resumida):

df_titanic.isnull().sum()
survived         0
pclass           0
sex              0
age            177
sibsp            0
parch            0
fare             0
embarked         2
class            0
who              0
adult_male       0
deck           688
embark_town      2
alive            0
alone            0

(1) Eliminación y procesamiento de valores faltantes

El tratamiento más directo y aproximado es eliminar los valores faltantes, es decir, eliminar objetos (campos, muestras/registros) a los que les faltan valores de atributos de información, para obtener una tabla de información completa. Las ventajas y desventajas son las siguientes:

  • Ventajas : Simple y fácil de implementar, es efectivo cuando el objeto tiene varios valores faltantes de atributos y los objetos eliminados con valores faltantes son muy pequeños en comparación con el volumen de datos del conjunto de datos inicial;

  • Desventajas : Cuando la proporción de datos faltantes es grande, especialmente cuando los datos faltantes no se distribuyen aleatoriamente, este método puede provocar desviaciones en los datos y llevar a conclusiones erróneas.

En nuestro caso actual de Titanic, embark_townel campo tiene 2 valores nulos, considere eliminar el procesamiento que falta.

df_titanic[df_titanic["embark_town"].isnull()]
df_titanic.dropna(axis=0,how='any',subset=['embark_town'],inplace=True)

imagen

(2) Llenado de datos y procesamiento de valores faltantes

imagen

La segunda categoría es que podemos usar algunos métodos para completar los valores faltantes. Por ejemplo, llenado basado en métodos estadísticos, métodos modelo y métodos combinados con negocios.

① Llenado manual . El llenado manual se realiza en base al conocimiento del negocio.

② Complete con valor especial . Trate los valores nulos como un valor de propiedad especial, diferente de cualquier otro valor de propiedad. Como se unknownllenan todos los valores vacíos. Generalmente como relleno temporal o proceso intermedio.

df_titanic['embark_town'].fillna('unknown', inplace=True)

③ Llenado de estadísticas . Si la tasa faltante es baja, se puede completar de acuerdo con la distribución de datos. Las estadísticas de llenado comunes son las siguientes:

  • Mediana : para datos con una distribución asimétrica, la mediana se utiliza para completar los valores faltantes.

  • Modo : las funciones discretas pueden usar el modo para completar los valores faltantes.

  • Media : para datos que se ajustan a una distribución uniforme, complete los valores faltantes con la media de la variable.

Llenado de mediana - tarifa: faltan muchos valores y se utiliza la mediana para llenar.

imagen

df_titanic['fare'].fillna(df_titanic['fare'].median(), inplace=True) 

Relleno de modo: embarcado: solo faltan dos valores y se utiliza el relleno de modo.

df_titanic['embarked'].isnull().sum()
#执行结果:2
df_titanic['embarked'].fillna(df_titanic['embarked'].mode(), inplace=True)
df_titanic['embarked'].value_counts()
#执行结果:
#S    64

Acolchado similar a la media.

edad : Agrupar por sexo, pclass y quiénes, si caen en el mismo grupo, completar con la media o mediana de este grupo.

df_titanic.groupby(['sex', 'pclass', 'who'])['age'].mean()
age_group_mean = df_titanic.groupby(['sex', 'pclass', 'who'])['age'].mean().reset_index()
def select_group_age_median(row):
    condition = ((row['sex'] == age_group_mean['sex']) &
                (row['pclass'] == age_group_mean['pclass']) &
                (row['who'] == age_group_mean['who']))
    return age_group_mean[condition]['age'].values[0]

df_titanic['age'] =df_titanic.apply(lambda x: select_group_age_median(x) if np.isnan(x['age']) else x['age'],axis=1)

imagen

④ Llenado de predicción del modelo . Si abundan otros campos que no faltan, también podemos usar el modelo para modelar y predecir el llenado. El campo a llenar se usa como etiqueta y los datos sin datos faltantes se usan como datos de entrenamiento. Un modelo de clasificación/regresión se establece para predecir y llenar los campos faltantes por llenar.

imagen

  • Vecino más cercano (KNN) . Primero determine las K muestras más cercanas a la muestra con datos faltantes de acuerdo con la distancia euclidiana o el análisis de correlación, y use el promedio ponderado / voto de estos valores K para estimar los datos faltantes de la muestra.

  • Regresión . A partir del conjunto completo de datos se establece una ecuación de regresión. Para objetos que contienen valores nulos, el valor de propiedad desconocido se estima sustituyendo el valor de propiedad conocido en la ecuación, y esta estimación se utiliza para completar. Cuando las variables no están relacionadas linealmente, se producirán estimaciones sesgadas y, a menudo, se utiliza la regresión lineal.

Tomemos el campo de edad en el caso del Titanic como ejemplo para explicar:

Falta una gran cantidad de edad. Aquí utilizamos las seis características de sexo, pclass, who, fare, parch y sibsp para construir un modelo de bosque aleatorio para completar los valores faltantes de edad.

df_titanic_age = df_titanic[['age', 'pclass', 'sex', 'who','fare', 'parch', 'sibsp']]
df_titanic_age = pd.get_dummies(df_titanic_age)
df_titanic_age.head()
# 乘客分成已知年龄和未知年龄两部分
known_age = df_titanic_age[df_titanic_age.age.notnull()]
unknown_age = df_titanic_age[df_titanic_age.age.isnull()]
# y 即目标年龄
y_for_age = known_age['age']
# X 即特征属性值
X_train_for_age = known_age.drop(['age'], axis=1)
X_test_for_age = unknown_age.drop(['age'], axis=1)
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)
rfr.fit(X_train_for_age, y_for_age)
# 用得到的模型进行未知年龄结果预测
y_pred_age = rfr.predict(X_test_for_age)
# 用得到的预测结果填补原缺失数据
df_titanic.loc[df_titanic.age.isnull(), 'age'] = y_pred_age
sns.distplot(df_titanic.age)

imagen

⑤ Relleno con método de interpolación . También puede utilizar el método de interpolación para completar los datos, incluida la interpolación lineal, la interpolación múltiple, la interpolación de plataforma caliente, la interpolación lagrangiana, la interpolación de Newton, etc.

imagen

Interpolación linear

imagen

.interpolate(method = 'linear', axis)El método reemplazará los valores NaN lineara lo largo del valor dado mediante interpolación , la diferencia es el valor medio antes y después o arriba y abajo.axis

df_titanic['fare'].interpolate(method = 'linear', axis = 0)

Al mismo tiempo, los valores de fila también se pueden usar para insertar

df_titanic['fare'].interpolate(method = 'linear', axis = 1)

Imputación múltiple

imagen

La idea de interpolación multivalor proviene de la estimación bayesiana, que considera que el valor a interpolar es aleatorio y su valor proviene del valor observado. En la práctica, los valores que se van a interpolar generalmente se estiman y luego se agregan diferentes ruidos para formar múltiples conjuntos de valores interpolados opcionales. Según alguna base de selección, seleccione el valor de interpolación más apropiado. El método de imputación múltiple consta de tres pasos:

  • ① Genere un conjunto de posibles valores de imputación para cada valor nulo, que reflejen la incertidumbre del modelo de falta de respuesta; cada valor se puede utilizar para imputar valores faltantes en el conjunto de datos, lo que da como resultado varios conjuntos de datos completos;

  • ② Cada conjunto de datos de imputación se analiza estadísticamente utilizando el método estadístico para el conjunto de datos completo;

  • ③ Los resultados de cada conjunto de datos de imputación se seleccionan de acuerdo con la función de puntuación para generar el valor de imputación final.

⑥ Llenado variable ficticio . Existe otro método de llenado muy interesante llamado "relleno de variable ficticia", que se puede utilizar cuando la variable es discreta y hay pocos valores diferentes. Tome los datos del Titanic como ejemplo:

imagen

  • Variable de género SEXO, hay tres valores diferentes de masculino, famoso, NA (faltante), la columna se puede convertir en IS_SEX_MALE, IS_SEX_FEMALE, IS_SEX_NA.

  • Si hay más de una docena de valores diferentes para una variable, los valores con frecuencias más pequeñas se pueden clasificar en una categoría según la frecuencia de cada valor otherpara reducir la dimensionalidad. Esta práctica maximiza la preservación de la información variable.

El siguiente es un código de muestra como referencia:

sex_list = ['MALE', 'FEMALE', np.NaN, 'FEMALE', 'FEMALE', np.NaN, 'MALE']
df = pd.DataFrame({'SEX': sex_list})
display(df)

df.fillna('NA', inplace=True)
df = pd.get_dummies(df['SEX'],prefix='IS_SEX')
display(df)
# 原始数据
 SEX
0    MALE
1    FEMALE
2    NaN
3    FEMALE
4    FEMALE
5    NaN
6    MALE
# 填充后
 IS_SEX_FEMALE     IS_SEX_MALE    IS_SEX_NA
0    0                 1                0
1    1                 0                0
2    0                 0                1
3    1                 0                0
4    1                 0                0
5    0                 0                1
6    0                 1 

Cuando faltan más del 80% de los valores propios, se recomienda eliminar [o agregar información de marca "sí" y "no", lo que afectará fácilmente el efecto del modelo.

df_titanic.drop(["deck"],axis=1)

2.3 Procesamiento de valores atípicos

La calidad de los datos también afectará en gran medida el efecto de la aplicación del aprendizaje automático. Los valores de error o valores atípicos en los datos pueden provocar errores de medición o condiciones anormales del sistema, lo que traerá grandes problemas al aprendizaje del modelo. De hecho, a menudo tenemos enlaces de detección y procesamiento de valores atípicos, déjame darte un resumen.

(1) Método de detección de anomalías

① Basado en análisis estadístico . Por lo general, el usuario modela los puntos de datos con una determinada distribución estadística y luego utiliza el modelo asumido para determinar si es anómalo según la distribución de los puntos. Por ejemplo, al analizar la divergencia de los datos estadísticos, es decir, el índice de variación de datos, podemos comprender la distribución de los datos y luego usar el índice de variación de datos para encontrar datos atípicos en los datos.

Los indicadores de variación de datos comúnmente utilizados incluyen rango , rango intercuartílico , desviación media , desviación estándar , coeficiente de variación , etc. Por ejemplo, un valor grande del indicador de variación indica una variación grande y una distribución amplia; un valor pequeño indica una dispersión pequeña y más densa.

Por ejemplo, los valores máximo y mínimo se pueden utilizar para juzgar si el valor de esta variable excede un rango razonable. Por ejemplo, si la edad del cliente es -20 o 200 años, es un valor atípico.

② Principio 3σ . Si los datos tienen una distribución aproximadamente normal,  3\sigma un valor atípico es, en principio, un valor que se desvía más de 3 desviaciones estándar de la media en un conjunto de mediciones.

imagen

③ Análisis de diagrama de caja . Todo el mundo recuerda que existe una herramienta muy eficaz en el apartado de análisis de datos llamada boxplot [6]. El método para juzgar los valores atípicos mediante diagramas de caja se basa en cuartiles y rangos intercuartiles. Los cuartiles son robustos. Por lo tanto, los diagramas de caja son más objetivos a la hora de identificar valores atípicos y tienen ciertas ventajas a la hora de identificarlos.

imagen

sns.catplot(y="fare",x="survived", kind="box", data=df_titanic,palette="Set2")

imagen

④ Basado en la detección del modelo . También podemos detectar valores atípicos según el modelo. La idea básica es establecer primero un modelo de datos, y aquellos objetos que no pueden ajustarse perfectamente al mismo modelo se consideran anormales. Si el modelo es una colección de clústeres, las anomalías son objetos que no pertenecen significativamente a ningún clúster. Cuando se utilizan modelos de regresión, las anomalías son objetos que están relativamente lejos del valor predicho.

imagen

  • Puntos fuertes : Tener una base sólida en teoría estadística y estas pruebas pueden ser muy poderosas cuando están presentes suficientes datos y conocimiento del tipo de prueba utilizada.

  • Desventajas : para datos multivariados, hay menos opciones disponibles y, para datos de alta dimensión, estas probabilidades de detección son bajas.

⑤ Basado en la distancia . También disponemos de métodos basados ​​en la distancia que se pueden utilizar para la detección de anomalías. Estos métodos se basan en el supuesto de que un objeto de datos es una anomalía si está lejos de la mayoría de los puntos. Al definir la medida de proximidad entre objetos, se juzga si el objeto anormal está lejos de otros objetos según la distancia. Los principales métodos de medición de distancia utilizados incluyen la distancia absoluta (distancia de Manhattan), la distancia euclidiana y la distancia de Mahalanobis.

imagen

  • Ventajas : Los métodos basados ​​en la distancia son mucho más simples que los métodos estadísticos; porque es mucho más fácil definir una medida de distancia para un conjunto de datos que determinar la distribución del conjunto de datos.

  • Desventajas :

    • Los métodos basados ​​en proximidad toman O(metro^{2})  tiempo y no son adecuados para grandes conjuntos de datos;

    • El método también es sensible a la elección de parámetros;

    • No puede manejar conjuntos de datos con regiones de diferente densidad porque utiliza un umbral global que no puede tener en cuenta dichos cambios de densidad.

⑥ Basado en la densidad . Una idea de detección de anomalías muy directa se basa en la densidad de distribución. Específicamente: al inspeccionar la densidad alrededor del punto actual, la densidad local del punto anormal local/punto atípico es significativamente menor que la de la mayoría de los puntos vecinos. Estos métodos son adecuados para conjuntos de datos no uniformes.

imagen

  • Ventajas : proporciona una medida cuantitativa de que los objetos son valores atípicos y se maneja bien incluso si los datos tienen regiones distintas.

  • Desventajas :

    • Al igual que los métodos basados ​​en la distancia, estos métodos necesariamente tienen   O(metro^{2})una complejidad temporal significativa.

    • Para datos de baja dimensión, se puede lograr utilizando una estructura de datos específica O(ologmo) ;

    • La selección de parámetros es difícil.

    • Aunque el algoritmo maneja este problema observando diferentes valores de k y obteniendo la puntuación atípica máxima, aún es necesario elegir los límites superior e inferior para estos valores.

⑦ Basado en agrupación . Podemos realizar la detección de anomalías basándose en un método de agrupación, y es más probable que las muestras alejadas del grupo sean valores atípicos.

imagen

Sin embargo, este método se verá afectado por el número de conglomerados. Una estrategia es repetir el análisis para diferentes números de conglomerados; otro método es encontrar una gran cantidad de conglomerados pequeños. La idea es que los conglomerados más pequeños tienden a ser más cohesivos. Si un objeto es un valor atípico en presencia de una gran cantidad de grupos pequeños, es probable que sea un verdadero valor atípico. La desventaja es que un grupo de valores atípicos puede formar pequeños grupos y evadir la detección.

  • Ventajas :

    • Las técnicas de agrupación basadas en complejidad lineal y casi lineal (k-medias) pueden ser muy eficaces para encontrar valores atípicos;

    • La definición de conglomerados suele ser el complemento de valores atípicos, por lo que es posible encontrar conglomerados y valores atípicos al mismo tiempo.

  • Desventajas :

    • Los conjuntos de valores atípicos resultantes y sus puntuaciones pueden depender en gran medida del número de grupos utilizados y de la presencia de valores atípicos en los datos;

    • La calidad de los grupos producidos por el algoritmo de agrupamiento tiene una gran influencia en la calidad de los valores atípicos producidos por el algoritmo.

⑧ Detección de valores atípicos basada en proximidad . De manera similar, también tenemos una idea basada en la proximidad para realizar la detección de anomalías. Creemos que los puntos anormales están lejos de la mayoría de los puntos. Este enfoque es más general y más fácil de usar que los métodos estadísticos, ya que es más fácil determinar una medida de proximidad significativa para un conjunto de datos que determinar su distribución estadística.

imagen

La puntuación atípica de un objeto viene dada por la distancia a su vecino más cercano, por lo que la puntuación atípica es muy sensible al valor de:

  • Ventajas : Sencillo.

  • Desventajas :

    • Los métodos basados ​​en proximidad toman  O(metro^{2}) tiempo y no son adecuados para grandes conjuntos de datos;

    • El método también es sensible a la elección de parámetros;

    • No puede manejar conjuntos de datos con regiones de diferente densidad porque utiliza un umbral global que no puede tener en cuenta dichos cambios de densidad.

En la etapa de procesamiento de datos, los valores atípicos se consideran puntos anormales que afectan la calidad de los datos, en lugar de puntos objetivo de detección anormal. Generalmente, se utiliza un método relativamente simple e intuitivo para juzgar los valores atípicos de las variables combinando diagramas de caja y estadísticas MAD. métodos grupo de puntos. Lo siguiente es dibujar un diagrama de dispersión y juzgar directamente según la distribución.

sns.scatterplot(x="fare", y="age", hue="survived",data=df_titanic,palette="Set1")

imagen

(2) Método de manejo de excepciones

El procesamiento de valores atípicos requiere un análisis específico de situaciones específicas. Los métodos comúnmente utilizados para el procesamiento de valores atípicos son los siguientes:

  • Eliminar registros que contengan valores atípicos: si algunas de las muestras anormales eliminadas son realmente muestras innecesarias con características anormales, es mejor confirmar una compilación junto con la empresa para evitar que se filtren muestras normales.

  • Trate los valores atípicos como valores faltantes y entréguelos al método de procesamiento de valores faltantes.

  • Corregido usando media/mediana/moda.

  • No procesado.

3. Construcción de funciones

El proceso de preprocesamiento de datos de pedido anticipado puede garantizar que obtengamos datos limpios, ordenados y precisos, pero estos datos pueden no ser los más efectivos para el modelado. En el siguiente paso, generalmente realizamos la construcción de características y generamos variables derivadas combinadas con escenarios comerciales. para mejorar las capacidades de expresión de datos y efectos de modelado de modelos.

3.1 Construcción de características estadísticas

imagen

Las características estadísticas son una clase de características muy efectiva, especialmente en escenarios de problemas de sincronización. Las siguientes son algunas dimensiones de pensamiento y métodos para construir características estadísticas:

  • Cree nuevas funciones basadas en reglas comerciales, conocimientos previos, etc.

  • Cuartil, mediana, media, desviación estándar, desviación, asimetría, inclinación, sistema discreto.

  • Construya estadísticas a largo y corto plazo (como semanas y meses).

  • Decaimiento del tiempo (cuanto más cercana es la observación, mayor es el valor de peso).

Volviendo al conjunto de datos del Titanic, echemos un vistazo a las nuevas funciones que podemos implementar en combinación con la comprensión empresarial:

① tratamiento de edad . Procesamos aún más el campo de edad. Teniendo en cuenta que las personas en diferentes grupos de edad pueden tener diferentes probabilidades de rescate, las dividimos en diferentes intervalos según el valor de edad, correspondientes a niños, jóvenes, mediana edad, ancianos, etc.

def age_bin(x):
 if x <= 18:
 return 'child'
 elif x <= 30:
 return 'young'
 elif x <= 55:
 return 'midlife'
 else:
 return 'old'
df_titanic['age_bin'] = df_titanic['age'].map(age_bin)
df_titanic['age_bin'].unique()
执行结果:
array(['young', 'midlife', 'child', 'old'], dtype=object)

② Extraiga la función "título" . En el campo de nombre, podemos ver varios títulos, como "Sr", "Maestro", "Dr", etc. Estos títulos reflejan la identidad del pasajero y otra información, y podemos extraerlos para construir nuevas funciones.

# 提取称呼
df_titanic['title'] = df_titanic['name'].map(lambda x: x.split(',')[1].split('.')[0].strip())

df_titanic['title'].value_counts()

Los resultados de la ejecución son los siguientes:

Mr              757
Miss            260
Mrs             197
Master           61
Rev               8
Dr                8
Col               4
Ms                2
Major             2
Mlle              2
Dona              1
Sir               1
Capt              1
Don               1
Lady              1
Mme               1
the Countess      1
Jonkheer          1

Hagamos una simple estadística de "llamada"

# 对称呼细分,是官员,还是皇室,还是女士、先生、小姐
df_titanic['title'].unique()

Resultados de:

array(['Mr', 'Mrs', 'Miss', 'Master', 'Don', 'Rev', 'Dr', 'Mme', 'Ms',
 'Major', 'Lady', 'Sir', 'Mlle', 'Col', 'Capt', 'the Countess',
 'Jonkheer', 'Dona'], dtype=object)

A continuación, estandarizaremos y unificaremos estos "títulos" y "títulos".

title_dictionary = {
 "Mr": "Mr",
 "Mrs": "Mrs",
 "Miss": "Miss",
 "Master": "Master",
 "Don": "Royalty",
 "Rev": "Officer",
 "Dr": "Officer",
 "Mme": "Mrs",
 "Ms": "Mrs",
 "Major": "Officer",
 "Lady": "Royalty",
 "Sir": "Royalty",
 "Mlle": "Miss",
 "Col": "Officer",
 "Capt": "Officer",
 "the Countess": "Royalty",
 "Jonkheer": "Royalty",
 "Dona": 'Mrs'
}
df_titanic['title'] = df_titanic['title'].map(title_dictionary)
df_titanic['title'].value_counts()

Los resultados de la ejecución son los siguientes:

Mr         757
Miss       262
Mrs        201
Master      61
Officer     23
Royalty      5

③ Seleccione el tamaño de la familia . En Titanic, algunos miembros tienen una relación de parentesco. Teniendo en cuenta que el tamaño de la familia también influye en si finalmente son rescatados, podemos construir una  family_size característica para representar el tamaño de la familia.

df_titanic['family_size'] = df_titanic['sibsp'] + df_titanic['parch'] + 1
df_titanic['family_size'].head()

Los resultados de la ejecución son los siguientes:

0    2
1    2
2    1
3    2
4    1

3.2 Valor del período

imagen

En escenarios como el comercio electrónico, los datos tienen una cierta periodicidad y podemos extraer algunos valores periódicos como información efectiva. Algunas consideraciones para el ciclo de sincronización son las siguientes:

  • Valores de período para los n períodos/días/meses/años anteriores, como cuantiles de los últimos 5 días, promedios, etc.

  • interanual/trimestral

3.3 agrupación de datos

imagen

El agrupamiento de datos es un método común para procesar atributos de valores continuos, lo que significa que cortamos valores continuos en segmentos y asignamos valores continuos a los segmentos correspondientes. La agrupación de datos también se denomina agrupación o discretización de datos.

① Cubos de igual frecuencia y equidistantes

(a) Agrupación personalizada . Se refiere a establecer los intervalos según la experiencia empresarial o el sentido común y luego clasificar los datos originales en cada intervalo.

(b) Agrupación equidistante . Divida los datos en partes iguales con el mismo ancho.

imagen

La agrupación equidistante solo considera el límite y el número de instancias en cada agrupación igual puede variar. La desventaja del agrupamiento equidistante es que se ve muy afectado por valores atípicos.

(c) Agrupación de frecuencias iguales . Divida los datos en varias partes iguales y la cantidad de datos en cada parte igual será la misma.

imagen

En la agrupación de igual frecuencia, los valores límite de los intervalos se calculan de modo que cada intervalo contenga un número aproximadamente igual de instancias. Digamos que N=5, cada intervalo debe contener aproximadamente el 20% de las instancias.

Binning de variables numéricas . Primero hagamos una segmentación de igual frecuencia del precio del boleto (si dibuja la distribución del precio del boleto, encontrará que es una distribución de cola muy larga, que no es adecuada para la segmentación equidistante), y observemos los separados intervalos.

# qcut 等频率分箱
df_titanic['fare_bin'], bins = pd.qcut(df_titanic['fare'], 5, retbins=True)
df_titanic['fare_bin'].value_counts()

El resultado es el siguiente:

(7.854, 10.5]        184
(21.679, 39.688]     180
(-0.001, 7.854]      179
(39.688, 512.329]    176
(10.5, 21.679]       172
bins #array([  0.    ,   7.8542,  10.5   ,  21.6792,  39.6875, 512.3292])

La siguiente es una segmentación de igual frecuencia según el segmento de intervalo.

# 对船票fare进行分段分桶
def fare_cut(fare):
    if fare <=  7.8958:
        return 0
    if fare <= 10.5:
        return 1
    if fare <= 21.6792:
        return 2
    if fare <=  39.6875:
        return 3
    return 4

df_titanic['fare_bin'] = df_titanic['fare'].map(fare_cut)

En comparación con el precio del boleto, la distribución del campo de edad está más concentrada y el tamaño del intervalo es relativamente claro. Usamos segmentación equidistante y el código es el siguiente:

# cut 等距离分箱
bins = [0, 12, 18, 65, 100]
pd.cut(df_titanic['age'], bins).value_counts

② Cucharones Best-KS .

Pasos de implementación :

③ Cubos de chi-cuadrado . Los métodos de discretización de datos ascendentes (es decir, basados ​​en agrupaciones) se basan en la prueba de chi-cuadrado: los intervalos adyacentes con el valor de chi-cuadrado más pequeño se agrupan hasta que se cumple un determinado criterio de parada.

imagen

Idea básica : dos intervalos adyacentes pueden fusionarse si tienen distribuciones de clases muy similares; de lo contrario, deben mantenerse separados. Mientras que los valores bajos de chi-cuadrado indican que tienen distribuciones de clases similares.

Pasos de implementación :

    1. Predefinir un umbral de chi-cuadrado

    1. Inicialización; ordene las instancias según los atributos a discretizar, y cada instancia pertenece a un intervalo

    1. Fusionar intervalos: calcule el valor de chi-cuadrado de cada par de intervalos adyacentes y combine el par de intervalos con el valor de chi-cuadrado más pequeño

Implementación del código: https://github.com/Lantianzz/Scorecard-Bundle

④ Agrupación de entropía mínima . También existe el método de agrupación de entropía mínima, que necesita minimizar el valor de entropía total, es decir, permitir que la agrupación distinga las categorías de la variable dependiente en la mayor medida posible.

La entropía es una medida del grado de desorden de los datos en la teoría de la información. El propósito básico de proponer la entropía de la información es descubrir la relación entre la cantidad de información y la redundancia de un determinado sistema de símbolos, a fin de lograr la mayor eficiencia con el mínimo. Costo y consumo Almacenamiento, gestión y entrega de datos.

Cuanto menor sea la entropía del conjunto de datos, menor será la diferencia entre los datos. La división de entropía mínima es para que los datos en cada cuadro tengan la mejor similitud. Dado el número de contenedores, si se consideran todas las situaciones posibles de agrupación, los contenedores obtenidos mediante el método de mínima entropía deben ser los contenedores con la entropía más pequeña.

3.4 Combinación de funciones

imagen

En algunos escenarios, consideraremos combinaciones de características para construir características sólidas. El siguiente es un método de construcción de combinación de características comúnmente utilizado:

  1. Discreto + Discreto : Construya un producto cartesiano (es decir, una relación "y" por pares).

  2. Discreto + continuo : producto cartesiano después de agrupar características continuas o construir características estadísticas basadas en categorías agrupadas por características.

  3. Continuo + continuo : suma, resta, multiplicación y división, características polinómicas, diferencias de segundo orden, etc.

imagen

características polinómicas . Para características de valores continuos, construimos características polinómicas para varias características para lograr una combinación de características y una mejora de alto orden.

En el caso del Titanic, las siguientes son características numéricas:

df_titanic_numerical = df_titanic[['age','sibsp','parch','fare','family_size']]
df_titanic_numerical.head()

Podemos consultar el siguiente código para construir características polinómicas.

# 扩展数值特征
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree=2, include_bias=False, interaction_only=False)
df_titanic_numerical_poly = poly.fit_transform(df_titanic_numerical)
pd.DataFrame(df_titanic_numerical_poly, columns=poly.get_feature_names()).head()

imagen

Después de crear las características, verificamos la correlación de las nuevas variables de características derivadas. Cuanto más oscuro sea el color en el mapa de calor a continuación, mayor será la correlación:

sns.heatmap(pd.DataFrame(df_titanic_numerical_poly, columns=poly.get_feature_names()).corr())

imagen

4. Transformación de funciones

imagen

Para las características construidas, realizaremos algunas operaciones de "transformación de características" para adaptarnos a diferentes modelos y completar mejor el modelado.

4.1 Estandarización

imagen

La operación de estandarización también se denomina transformación de puntuación Z, que hace que la media aritmética de la columna de características numéricas sea 0 y la varianza (y desviación estándar) 1, como se muestra en la figura.

Nota: Si hay valores atípicos con valores extremadamente grandes o pequeños (descubiertos por EDA) en la columna de características numéricas, se deben usar estadísticas más sólidas (robustas): use la mediana en lugar de la media aritmética y use el cuantil (cuantil ) en lugar de varianza. Este método de normalización tiene un parámetro importante: (cuantil inferior, cuantil superior), que se determina mejor mediante visualización de datos con EDA. Inmune a valores atípicos.

from sklearn.preprocessing import StandardScale
#标准化模型训练
Stan_scaler = StandardScaler()
Stan_scaler.fit(x)
x_zscore = Stan_scaler.transform(x)
x_test_zscore = Stan_scaler.transform(x_test)
joblib.dump(Stan_scaler,'zscore.m')  #写入文件

4.2 Normalización

imagen

La operación de normalización ajustará la magnitud de los datos según la longitud del módulo vectorial, pero no cambiará el orden de los datos originales. como muestra la imagen.

4.3 Escalado de amplitud (escalado)

imagen

La escala de amplitud consiste en hacer que los valores de diferentes características estén en el mismo orden de magnitud e intervalo de datos. El método más común es escalar los valores máximo y mínimo, como se muestra en la figura.

from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
min_max_scaler.fit_transform(x)
x_minmax = min_max_scaler.transform(x)
x_test_minmax = min_max_scaler.transform(x_test)
joblib.dump(min_max_scaler,'min_max_scaler.m')  #写入文件

4.4 Normalización versus normalización

La normalización y la normalización son dos operaciones de transformación de características muy comunes. Comparemos la normalización y la normalización:

Sus respectivos escenarios aplicables se pueden resumir de la siguiente manera :

  1. En los algoritmos de clasificación y agrupamiento, la estandarización de la puntuación Z funciona mejor cuando se usa la distancia para medir la similitud (como SVM, KNN) o cuando se usa la tecnología PCA para la reducción de dimensionalidad.

Consulte el tutorial de ShowMeAI Algoritmos gráficos de aprendizaje automático: desde la introducción hasta el dominio de una serie de tutoriales [7]

  1. El primer método u otros métodos de normalización se pueden utilizar cuando no están involucrados la medida de la distancia, el cálculo de la covarianza y los datos que no se ajustan a la distribución normal. Por ejemplo, en el procesamiento de imágenes, después de convertir una imagen RGB en una imagen en escala de grises, su valor se limita al rango de [0,255].

  2. Los modelos basados ​​en árboles (como Random Forest, GBDT, XGBoost, LightGBM, etc.) no requieren normalización de funciones. Si se trata de un modelo basado en parámetros o un modelo basado en distancias (regresión logística, agrupamiento de K-medias, red neuronal, etc.), se requiere normalización porque es necesario calcular parámetros o distancias.

4.5 Transformación no lineal

En algunos escenarios, también ajustamos o corregimos la distribución de campos numéricos y utilizamos transformaciones estadísticas o matemáticas para reducir el impacto de la distribución sesgada de datos. Haga que los valores de los intervalos originalmente densos se dispersen tanto como sea posible y los valores de los intervalos originalmente dispersos se agreguen tanto como sea posible. La mayoría de las funciones de transformación pertenecen a la familia de funciones de transformación de potencia, la función principal es estabilizar la varianza, mantener la distribución cerca de la distribución normal y hacer que los datos sean independientes de la media de la distribución. Veamos algunas transformaciones estadísticas no lineales típicas .

① transformación logarítmica . La transformación de registros se utiliza a menudo para crear transformaciones de datos monótonas. La función principal es estabilizar la varianza, mantener siempre la distribución cerca de la distribución normal y hacer que los datos sean independientes de la media de la distribución.

imagen

  • La transformación logarítmica tiende a estirar el rango de valores de variables independientes que se encuentran en el rango de magnitud más bajo y tiende a comprimir o reducir el rango de valores de variables independientes en el rango de magnitud más alto, haciendo así que la distribución sesgada sea lo más cercana a una distribución lo más normal posible.

  • En vista de la varianza inestable de algunas características numéricas continuas, necesitamos utilizar log para ajustar la varianza de toda la distribución de datos, que pertenece a la conversión de datos estables de varianza.

La transformación logarítmica pertenece a la familia de funciones de transformación de potencias y la expresión matemática es

A continuación, realizamos la transformación log1p en el campo del precio del billete en el conjunto de datos del Titanic. El código de muestra es el siguiente:

sns.distplot(df_titanic.fare,kde=False)

imagen

df_titanic['fare_log'] = np.log((1+df_titanic['fare']))
sns.distplot(df_titanic.fare_log,kde=False)

imagen

② transformación box-cox . La transformación Box-cox es un método de transformación de potencia generalizado propuesto por Box y Cox en 1964. Es una transformación de datos comúnmente utilizada en el modelado estadístico y se utiliza cuando la variable de respuesta continua no satisface la distribución normal. Después de la transformación Box-Cox, el error no observable y la correlación de las variables predictivas se pueden reducir hasta cierto punto.

imagen

La característica principal de la transformación Box-cox es introducir un parámetro, estimar el parámetro a través de los datos mismos y luego determinar la forma de transformación de datos que se debe adoptar. La transformación Box-cox obviamente puede mejorar la normalidad, la simetría y la igualdad de varianza. de los datos Para muchos, se ha demostrado que todos los datos reales funcionan.

La expresión matemática de la función de transformación box-cox es la siguiente:

A continuación, realizamos la transformación Box-cox en el campo del precio del billete en el conjunto de datos del Titanic. El código de muestra es el siguiente:

# 从数据分布中移除非零值
fare_positive_value = df_titanic[(~df_titanic['fare'].isnull()) & (df_titanic['fare']>0)]['fare']
import scipy.stats as spstats
# 计算最佳λ值
l, opt_lambda = spstats.boxcox(fare_positive_value)
print('Optimal lambda value:', opt_lambda) # -0.5239075895755266
# 进行 Box-Cox 变换
fare_boxcox_lambda_opt = spstats.boxcox(df_titanic[df_titanic['fare']>0]['fare'],lmbda=opt_lambda)
sns.distplot(fare_boxcox_lambda_opt,kde=Fal

imagen

4.6 Procesamiento de variables discretas

Para las características de campos categóricos (como color, tipo y grado de calidad), muchos modelos no pueden manejarlos directamente. Después de codificarlos, podemos presentar mejor la información y respaldar el aprendizaje del modelo. Existen los siguientes métodos de codificación comunes para variables categóricas:

imagen

  • Ventajas : En comparación con la codificación OneHot, la codificación LabelEncoder ocupa menos espacio de memoria y admite la codificación de funciones de texto.

  • Desventajas : su método de codificación aporta relaciones adicionales de tamaño y orden a diferentes categorías, lo que tiene un impacto en algunos modelos computacionales (como la regresión logística) y se puede utilizar en modelos de árbol.

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit(["超一线", "一线", "二线", "三线"])
print('特征:{}'.format(list(le.classes_)))
# 输出 特征:['一线', '三线', '二线', '超一线']
print('转换标签值:{}'.format(le.transform(["超一线", "一线", "二线"])))
# 输出 转换标签值:array([3 0 2]...)
print('特征标签值反转:{}'.format(list(le.inverse_transform([2, 2, 1]))))
# 输出 特征标签值反转:['二线', '二线', '三线

② una codificación vectorial activa (una codificación activa) . La codificación one-hot generalmente se usa para tratar características que no tienen una relación de tamaño entre categorías. Por ejemplo: característica: tipo de sangre, hay cuatro categorías [A, B, AB, O], después de la codificación one-hot, el tipo de sangre se transformará en un vector disperso de 4 dimensiones (la dimensión del vector disperso generado final , y la categoría mismo número):

imagen

  • Ventajas : La codificación one-hot resuelve el problema de que los clasificadores no son fáciles de manejar con datos de atributos y también desempeña un papel en la expansión de funciones hasta cierto punto. Sus valores son solo 0 y 1, y los diferentes tipos se almacenan en el espacio vertical.

  • Desventajas : solo puede binarizar variables numéricas y no puede codificar directamente variables categóricas de tipo cadena. Cuando el número de categorías es grande, el espacio de funciones se vuelve muy grande. En este caso, generalmente se puede utilizar PCA para reducir la dimensionalidad. Y la combinación de codificación en caliente + PCA también es muy útil en la práctica.

Con la ayuda de la biblioteca de herramientas pandas (consulte el Tutorial de la serie de análisis de datos de ShowMeAI [9] y la Referencia rápida de herramientas de ciencia de datos | Guía del usuario de Pandas [10] para obtener más detalles), el ejemplo de referencia del código Python para la codificación de vectores one-hot es el siguiente:

sex_list = ['MALE', 'FEMALE', np.NaN, 'FEMALE', 'FEMALE', np.NaN, 'MALE']
df = pd.DataFrame({'SEX': sex_list})
display(df)
df.fillna('NA', inplace=True)
df = pd.get_dummies(df['SEX'],prefix='IS_SEX')
display(df)

Los resultados antes y después de la transformación final son los siguientes:

# 原始数据
 SEX
0   MALE
1   FEMALE
2   NaN
3   FEMALE
4   FEMALE
5   NaN
6   MALE

# 独热向量编码后
 IS_SEX_FEMALE     IS_SEX_MALE    IS_SEX_NA
0    0                 1                0
1    1                 0                0
2    0                 0                1
3    1                 0                0
4    1                 0                0
5    0                 0                1 

A continuación realizamos codificación vectorial one-hot en los campos 'sexo', 'clase', 'pclass', 'embarked', 'who', 'family_size', 'age_bin'.

pd.get_dummies(df_titanic, columns=['sex', 'class', 'pclass', 'embarked', 'who', 'family_size', 'age_bin'],drop_first=True)

imagen

Por supuesto, también podemos usar SKLearn (consulte el tutorial de ShowMeAI, la  guía de aplicación más completa de SKLearn  y  la revisión rápida de la herramienta de modelado de IA | Guía de uso de Scikit-learn  para obtener un aprendizaje detallado) para implementar la codificación vectorial one-hot:

import numpy as np
from sklearn.preprocessing import OneHotEncoder
# 非负整数表示的标签列表
labels = [0,1,0,2]
# 行向量转列向量
labels = np.array(labels).reshape(len(labels), -1)
# 独热向量编码
enc = OneHotEncoder()
enc.fit(labels)
targets = enc.transform(labels).toarray()
# 如果不加 toarray() 的话,输出的是稀疏的存储格式,即索引加值的形式,也可以通过参数指定 sparse = False 来达到同样的效果

El resultado es el siguiente:

array([[ 1.,  0.,  0.],
 [ 0.,  1.,  0.],
 [ 1.,  0.,  0.],
 [ 0.,  0.,  1.]])

③ Binarización de etiquetas (LabelBinarizer) . La función es la misma que OneHotEncoder, pero OneHotEncoder solo puede binarizar variables numéricas y no puede codificar directamente variables categóricas de tipo cadena, mientras que LabelBinarizer puede binarizar directamente variables de caracteres.

from sklearn.preprocessing import LabelBinarizer
lb=LabelBinarizer()
labelList=['yes', 'no', 'no', 'yes','no2']
# 将标签矩阵二值化
dummY=lb.fit_transform(labelList)
print("dummY:",dummY)
# 逆过程
yesORno=lb.inverse_transform(dummY)
print("yesOrno:",yesORno)

El resultado es el siguiente:

dummY: [[0 0 1]
 [1 0 0]
 [1 0 0]
 [0 0 1]
 [0 1 0]]
yesOrno: ['yes' 'no' 'no' 'yes' 'no2']

4.7 Reducción de dimensionalidad

imagen

En proyectos reales de aprendizaje automático, también podemos reducir la dimensionalidad [11], principalmente porque los datos tienen los siguientes problemas:

  • Multicolinealidad de datos: existe una correlación entre los atributos de las características. La multicolinealidad conducirá a un espacio de solución inestable, lo que dará como resultado una capacidad de generalización débil del modelo.

  • Las muestras espaciales de altas latitudes son escasas, lo que dificulta que el modelo encuentre características de datos.

  • Demasiadas variables pueden impedir que el modelo encuentre regularidades.

  • Considerar sólo la influencia de una única variable en el atributo objetivo puede ignorar la relación potencial entre las variables.

El objetivo de la reducción de la dimensionalidad de las características es reducir la cantidad de atributos de las características y garantizar que los atributos de las características sean independientes entre sí.

Los métodos de reducción de dimensionalidad comúnmente utilizados incluyen : PCA, SVD, LDA, T-sne y otros métodos de reducción de dimensionalidad no lineales.

Para explicar la reducción de dimensionalidad aquí, le daremos una explicación basada en el conjunto de datos del iris:

from sklearn import datasets

iris_data = datasets.load_iris()

X = iris_data.data
y = iris_data.target

def draw_result(X, y):
    plt.figure()
    # 提取 Iris-setosa
    setosa = X[y == 0]
    # 绘制点:参数 1 x 向量,y 向量
    plt.scatter(setosa[:, 0], setosa[:, 1], color="red", label="Iris-setosa")

    versicolor = X[y == 1]
    plt.scatter(versicolor[:, 0], versicolor[:, 1], color="orange", label="Iris-versicolor")

    virginica = X[y == 2]
    plt.scatter(virginica[:, 0], virginica[:, 1], color="blue", label="Iris-virginica")

    plt.legend()
    plt.show()

draw_result(X, y)

imagen

① PCA (Análisis de componentes principales) . Con respecto al algoritmo de reducción de dimensionalidad del análisis de componentes principales de PCA, puede consultar el artículo de ShowMeAI Aprendizaje automático gráfico | Explicación detallada del algoritmo de reducción de dimensionalidad [12] para un estudio detallado.

import numpy as np
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
newX = pca.fit_transform(X)
draw_result(newX, y)

imagen

② SVD (descomposición de valores singulares)

Los pasos principales del método SVD son los siguientes:

from sklearn.decomposition import TruncatedSVD
iris_2d = TruncatedSVD(2).fit_transform(X)
draw_result(iris_2d, y)

imagen

PCA versus SVD

③ LDA (Análisis discriminante lineal) . Es una reducción de dimensionalidad supervisada, que obtiene el subconjunto de características óptimo minimizando la dispersión intraclase y maximizando la dispersión entre clases.

imagen

Interpretación de la figura anterior: LD1 puede separar las dos clases con distribución normal mediante determinación lineal. La decisión lineal de LD2 mantiene una gran variación del conjunto de datos, pero LD2 no puede proporcionar información sobre las categorías, por lo que LD2 no es una buena decisión lineal.

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
lda = LDA(n_components=2)
iris_2d = lda.fit_transform(X, y)
draw_result(iris_2d, y)

imagen

LDA versus PCA

PCA intenta encontrar el eje del componente principal ortogonal con la mayor varianza. LDA encuentra el subespacio de características que puede optimizar la clasificación. LDA y PCA son técnicas de transformación lineal que se pueden utilizar para reducir la dimensionalidad del conjunto de datos. PCA es un algoritmo no supervisado. LDA es un algoritmo supervisado LDA es una técnica superior de extracción de características para clasificación

④T-SNE . T-SNE (incrustación de vecinos estocásticos distribuidos en t) es un método de reducción de dimensionalidad no lineal:

from sklearn.manifold import TSNE
tsne = TSNE(n_components=2)
iris_2d = tsne.fit_transform(X)
draw_result(iris_2d, y)

imagen

5. Selección de funciones

La selección de características es un proceso que se utiliza a menudo en el proceso de modelado y también es importante:

  • Las funciones son redundantes y algunas están demasiado correlacionadas, lo que consume recursos informáticos.

  • El ruido está presente y tiene un impacto negativo en los resultados del modelo.

  • Algunas características son propensas a sobreajustarse.

imagen

En general, existen dos consideraciones principales para la selección de funciones:

  • Grado de divergencia de características : si una característica no diverge, por ejemplo, la varianza es cercana a 0, lo que significa que las muestras básicamente no tienen diferencia en esta característica, y esta característica no es útil para distinguir muestras.

  • Correlación entre características y objetivos : cuanto mayor sea la correlación entre características y objetivos, más se deben conservar y esto será más fácil de entender para todos.

Los métodos de selección de características se pueden clasificar en los tres tipos siguientes:

  • Filtro : método de filtrado, puntuando cada característica según divergencia o correlación, estableciendo un umbral o el número de umbrales que se seleccionarán para seleccionar características.

  • Wrapper : método de envoltura, de acuerdo con la función objetivo (generalmente la puntuación del efecto de predicción), seleccione varias características o excluya varias características cada vez.

  • Integrado : Método integrado, primero utilice algunos algoritmos y modelos de aprendizaje automático para el entrenamiento, obtenga el coeficiente de peso de cada característica y seleccione las características de mayor a menor de acuerdo con el coeficiente. Similar al método de filtro, pero mediante capacitación para determinar los pros y los contras de las funciones. Usamos la biblioteca en SKLearn  feature_selection para la selección de funciones.

5.1 Filtro Filtro

① Filtrado de variaciones . Esta es la clase para filtrar características según la variación de las características mismas. Por ejemplo, si la varianza de una característica en sí es pequeña, significa que las muestras básicamente no tienen diferencia en esta característica, tal vez la mayoría de los valores de la característica sean los mismos, o incluso los valores de toda la característica. son iguales, entonces esta característica no tiene efecto en la distinción de la muestra.

Eliminaremos características de campo con una variación muy pequeña. El código de referencia se implementa de la siguiente manera:

from sklearn.feature_selection import VarianceThreshold
variancethreshold = VarianceThreshold() #实例化,默认方差为 0.方差<=0 的过滤掉
df_titanic_numerical = df_titanic[['age','sibsp','parch','fare','family_size']]
X_var = variancethreshold.fit_transform(df_titanic_numerical)    #获取删除不合格特征后的新特征矩阵
del_list = df_titanic_numerical.columns[variancethreshold.get_support()==0].to_list()  #获得删除

② Filtrado de chi-cuadrado . La prueba de chi-cuadrado, dedicada a algoritmos de clasificación, captura la correlación y busca características con p menor que el nivel de significancia. El filtrado chi-cuadrado es un filtrado de correlación específico para etiquetas discretas (es decir, problemas de clasificación).

imagen

df_titanic_categorical = df_titanic[['sex', 'class', 'embarked', 'who',  'age_bin','adult_male','alone','fare_bin']]
df_titanic_numerical = df_titanic[['age','sibsp','parch','fare','family_size','pclass']]
df_titanic_categorical_one_hot = pd.get_dummies(df_titanic_categorical, columns=['sex', 'class', 'embarked', 'who',  'age_bin','adult_male','alone','fare_bin'], drop_first=True)
df_titanic_combined = pd.concat([df_titanic_numerical,df_titanic_categorical_one_hot],axis=1)

y = df_titanic['survived']
X = df_titanic_combined.iloc[:,1:]

from sklearn.feature_selection import chi2
from sklearn.feature_selection import SelectKBest
chi_value, p_value = chi2(X,y)
#根据 p 值,得出 k 值
k = chi_value.shape[0] - (p_value > 0.05).sum()  #要保留的特征的数量 14
#根据卡方值,选择前几特征,筛选后特征
X_chi = SelectKBest(chi2, k=14).fit_transform(X, y)

③ Prueba F. La prueba captura la correlación lineal, requiere que los datos obedezcan la distribución normal y persigue la característica de que el valor P es menor que el nivel de significancia.

from sklearn.feature_selection import f_classif
f_value, p_value = f_classif(X,y)
#根据 p 值,得出 k 值
k = f_value.shape[0] - (p_value > 0.05).sum()
#筛选后特征
X_classif = SelectKBest(f_classif, k=14).fit_transform(X, y)

④ Método de información mutua . El método de información mutua es un método de filtrado que se utiliza para capturar cualquier relación (incluidas las relaciones lineales y no lineales) entre cada característica y etiqueta.

from sklearn.feature_selection import mutual_info_classif as MIC
#互信息法
mic_result = MIC(X,y)   #互信息量估计
k = mic_result.shape[0] - sum(mic_result <= 0)    #16
X_mic = SelectKBest(MIC, k=16).fit_transform(X, y)

5.2 Envoltorio envuelto

① Método de eliminación de funciones normalizadas . El método de eliminación y eliminación recursiva utiliza un modelo base para múltiples rondas de entrenamiento. Después de cada ronda de entrenamiento, se eliminan las características de varios coeficientes de peso y luego se realiza la siguiente ronda de entrenamiento de acuerdo con el nuevo conjunto de características. feature_selection El código para seleccionar funciones utilizando la clase RFE de la biblioteca es el siguiente:

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
#递归特征消除法,返回特征选择后的数据
#参数 estimator 为基模型
#参数 n_features_to_select 为选择的特征个数
X_ref = RFE(estimator=LogisticRegression(), n_features_to_select=10).fit_transform(X, y)

② Evaluación de la importancia de las características . Podemos obtener la importancia de las características en función de algunos modelos (como varios modelos de árbol) y luego realizar una selección.

from sklearn.ensemble import ExtraTreesClassifier
# 建模与获取特征重要度
model = ExtraTreesClassifier()
model.fit(X, y)
print(model.feature_importances_)

# 特征重要度排序
feature=list(zip(X.columns,model.feature_importances_))
feature=pd.DataFrame(feature,columns=['feature','importances'])
feature.sort_values(by='importances',ascending=False).head(20)

③ Organizar la evaluación de importancia . También tenemos una clase de métodos que pueden evaluar la importancia de las características y luego realizar una selección, llamada importancia de permutación.

Justificación : la importancia de la permutación se calcula después de entrenar un modelo de aprendizaje automático. Este enfoque plantea una hipótesis para el modelo: cuánto afectaría la precisión de un modelo de aprendizaje automático predictivo si se mezcla aleatoriamente una columna de datos de características del conjunto de validación mientras se preserva el objetivo y todas las demás columnas. Para una característica de gran importancia, la reorganización aleatoria puede causar más daño a la precisión de las predicciones del modelo de aprendizaje automático.

Ventajas : cálculo rápido; fácil de usar y comprender; propiedades de medida de importancia de las características; búsqueda de la estabilidad de las características.

El código de referencia se implementa de la siguiente manera:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import eli5
from eli5.sklearn import PermutationImportance
my_model = RandomForestClassifier(random_state=0).fit(train_X, train_y)
perm = PermutationImportance(my_model, random_state=1).fit(val_X, val_y)
eli5.show_weights(perm, feature_names = val_X.columns.tolist())

imagen

5.3 Integrado Integrado

① Método de selección de funciones basado en elementos de penalización . Al utilizar el modelo base con elementos de penalización, además de filtrar características, también se realiza la reducción de dimensionalidad.

El código para seleccionar características usando clases feature_selectionde biblioteca SelectFromModelcombinadas con un modelo de regresión logística con una penalización L1 es el siguiente:

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
#带 L1 和 L2 惩罚项的逻辑回归作为基模型的特征选择,这个设置带 L1 惩罚项的逻辑回归作为基模型的特征选择
lr = LogisticRegression(solver='liblinear',penalty="l1", C=0.1)
X_sfm = SelectFromModel(lr).fit_transform(X, y)
X_sfm.shape
(891, 7

El código para seleccionar características usando la clase SelectFromModel de la biblioteca feature_selection combinada con el modelo SVM es el siguiente:

from sklearn.feature_selection import SelectFromModel
from sklearn.svm import LinearSVC
lsvc = LinearSVC(C=0.01,penalty='l1',dual=False).fit(X, y)
model = SelectFromModel(lsvc,prefit=True)
X_sfm_svm = model.transform(X)
X_sfm_svm.shape
(891, 7

② Basado en el modelo de árbol . GBDT en el modelo de árbol también se puede usar como modelo base para la selección de características. Usando la clase SelectFromModel de la biblioteca feature_selection combinada con el modelo GBDT, el código para seleccionar características es el siguiente:

from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier
#GBDT 作为基模型的特征选择
gbdt = GradientBoostingClassifier()
X_sfm_gbdt = SelectFromModel(gbdt).fit_transform(X, y)

5.4 Resumen de selección de funciones

Con respecto a la selección de funciones, haga un resumen de la experiencia, de la siguiente manera:

  1. Para variables de características categóricas, puede comenzar con SelectKBest y usar selectores basados ​​en árbol o chi-cuadrado para seleccionar variables;

  2. Variables de características cuantitativas, puede utilizar directamente modelos lineales y selectores basados ​​en correlación para seleccionar variables;

  3. Para problemas de clasificación binaria, puede considerar usar SelectFromModel y SVC;

  4. Antes de seleccionar funciones, para comprender completamente los datos, generalmente es necesario realizar un análisis de datos exploratorio EDA.

6. Sugerencias prácticas para la ingeniería de funciones.

imagen

Finalmente, ShowMeAI combina experiencia práctica en aplicaciones industriales para resumir algunos puntos clave de la ingeniería de funciones:

6.1 Comprensión de los datos

La efectividad de la construcción de funciones está fuertemente relacionada con el negocio y la distribución de datos, por lo que se recomienda realizar un análisis de datos exploratorio de EDA antes de este paso para comprender completamente los datos.

Puede consultar el artículo de ShowMeAI Proyecto integral de aprendizaje automático de Python: pronóstico de ventas de comercio electrónico [13] y Proyecto integral de aprendizaje automático de Python: pronóstico de ventas de comercio electrónico <Avanzado> [14] para comprender el proceso y el método básicos de EDA.

6.2 Preprocesamiento de datos

Algunos preprocesamiento de datos y procesamiento de funciones que podemos realizar son los siguientes:

① Discretización de características continuas

  • La esencia es limitar la precisión de las características de punto flotante. Los datos anormales tienen una gran robustez y el modelo será más estable.

  • Los modelos de árboles no necesitan hacer

② Truncamiento numérico

  • Limite el valor del valor de la característica a un rango determinado (útil para eliminar excepciones)

  • Puedes usar  .clip(low,upper) el método de marco de datos de pandas.

6.3 Limpieza de datos

En combinación con escenarios comerciales y distribución de datos, se realizan valores faltantes razonables y procesamiento de valores atípicos.

6.4 Construcción y transformación de características

imagen

Se recomienda no utilizar PCA o LDA para reducir la dimensionalidad, es mejor construir características y filtrarlas.

① Combinación lineal (combinación lineal)

  • Adecuado para árboles de decisión y conjuntos basados ​​​​en árboles de decisión (como aumento de gradiente, bosque aleatorio), porque la función de división alineada con ejes común no es buena para capturar la correlación entre diferentes características;

  • No apto para SVM, regresión lineal, redes neuronales, etc.

② Combinación de características categóricas y características numéricas

  • Use N1 y N2 para representar características numéricas, use C1 y C2 para representar características categóricas y use la operación groupby de pandas para crear las siguientes características nuevas significativas: (entre ellas, C2 también puede ser un N1 discretizado)

median(N1)_by(C1)   中位数
mean(N1)_by(C1)   算术平均数
mode(N1)_by(C1)   众数
min(N1)_by(C1)   最小值
max(N1)_by(C1)   最大值
std(N1)_by(C1)   标准差
var(N1)_by(C1)   方差
freq(C2)_by(C1)   频数

③ Características estadísticas + combinación lineal

  • Las características estadísticas se pueden combinar con métodos básicos de ingeniería de características, como la combinación lineal (solo para árboles de decisión), y se pueden obtener características más significativas, como:

N1 - median(N1)_by(C1)
N1 - mean(N1)_by(C1)

④ Crear nuevas funciones basadas en el modelo de árbol

  • En la serie de algoritmos del árbol de decisión (como árbol de decisión, gbdt, bosque aleatorio; para obtener más detalles, consulte el algoritmo de  aprendizaje automático gráfico del tutorial de ShowMeAI: desde la introducción hasta el dominio de la serie de tutoriales  para un aprendizaje y comprensión detallados), cada muestra será asignado a las hojas del árbol de decisión.

  • Podemos agregar el índice (número natural) o el vector de codificación en caliente (vector disperso obtenido mediante codificación ficticia) de la muestra después de cada mapeo del árbol de decisión como una nueva característica del modelo.

En Scikit-Learn y XGBoost, se puede implementar en función de  apply() otros  decision_path() métodos.

6.5 Modelo

imagen

En diferentes tipos de modelos, también consideramos diferentes métodos de ingeniería de características:

① modelo de árbol

  • No es sensible a la magnitud del valor característico y no necesita ser adimensional ni transformado estadísticamente;

  • Las características del modelo numérico se aprenden según la distancia de la muestra y es posible que no se realice la codificación de características de categoría (pero las características de tipo carácter no se pueden usar directamente como entrada, por lo que se requiere al menos codificación de etiquetas).

  • Tanto LightGBM como XGBoost pueden aprender los valores faltantes como parte de los datos, por lo que no es necesario lidiar con los valores faltantes. En otros casos es necesario completar lo que falta.

② Modelo que depende de la distancia de muestra

  • Como la regresión lineal, SVM, aprendizaje profundo, etc. entran en esta categoría.

  • Para características numéricas, se requiere procesamiento adimensional.

  • Para algunas características de datos de la distribución de cola larga, se puede realizar una transformación estadística para optimizar mejor el modelo.

  • Para modelos lineales, la agrupación de funciones puede mejorar la expresividad del modelo.

Una descripción general del proceso de modelado de aprendizaje automático (código Python)

Con el advenimiento de la era de la inteligencia artificial, el aprendizaje automático se ha convertido en una herramienta clave para resolver problemas, como identificar si una transacción es fraudulenta, predecir lluvias, categorizar noticias y recomendar marketing de productos. A continuación, describimos en detalle cómo se aplica el aprendizaje automático a problemas prácticos y describimos el flujo general de las aplicaciones del aprendizaje automático.

imagen

1.1 Definir el problema

Aclarar el problema empresarial es un requisito previo para el aprendizaje automático, es decir, abstraer el problema como un problema de predicción del aprendizaje automático: qué tipo de datos deben aprenderse como entrada y qué tipo de modelo tomar decisiones como objetivo. como salida.

Un escenario simple de clasificación de noticias es conocer las noticias existentes y los datos de sus etiquetas de categoría, obtener un modelo de clasificación de texto y utilizar el modelo para predecir la categoría de nuevas noticias todos los días, a fin de clasificarlas en cada canal de noticias.

imagen

1.2 Selección de datos

Hay un dicho ampliamente difundido en el aprendizaje automático: "Los datos y las características determinan el límite superior de los resultados del aprendizaje automático, y el algoritmo del modelo está lo más cerca posible de este límite superior", lo que significa que la calidad de los datos y su representación de características determina el efecto final del modelo y, en las aplicaciones industriales reales, los algoritmos suelen ocupar una parte muy pequeña y la mayor parte del trabajo consiste en encontrar datos, refinarlos, analizarlos y diseñar características.

La selección de datos es la clave para preparar las materias primas para el aprendizaje automático. A lo que se debe prestar atención son: ① representatividad de los datos: la calidad de los datos deficiente o no representativa conducirá a un efecto deficiente de ajuste del modelo; ② rango de tiempo de los datos: para las variables características X y Si la etiqueta Y está relacionada con el tiempo, es necesario delimitar la ventana de tiempo de los datos; de lo contrario, puede provocar una fuga de datos, es decir, el fenómeno de la existencia y el uso de variables características con causalidad inversa. (Por ejemplo, predice si lloverá mañana, pero los datos de entrenamiento incluyen la temperatura y la humedad de mañana); ③ Alcance del negocio de datos: aclare el alcance de la tabla de datos relacionada con la tarea y evite perder datos representativos o introducir una gran cantidad de datos irrelevantes como ruido.

2 Ingeniería de funciones

La ingeniería de características consiste en transformar el análisis y el procesamiento de datos sin procesar en características disponibles para el modelo. Estas características pueden describir mejor las leyes subyacentes del modelo predictivo, mejorando así la precisión del modelo para datos invisibles. Técnicamente, la ingeniería de características se puede dividir en los siguientes pasos: ① Análisis de datos exploratorios: distribución de datos, faltantes, anomalías y correlación, etc.; ② Preprocesamiento de datos: procesamiento de valores faltantes/valores atípicos, discretización de datos, estandarización de datos, etc.; ③ Extracción de características: representación de características, derivación de características, selección de características, reducción de dimensionalidad de características, etc.;

2.1 Análisis de datos exploratorios

Después de obtener los datos, primero puede realizar un análisis de datos exploratorios (EDA) para comprender la estructura interna y las leyes de los datos en sí. Si no comprende los datos y no tiene conocimientos previos comerciales relevantes, puede alimentar datos directamente a los tradicionales. Los modelos a menudo no funcionan muy bien. A través del análisis de datos exploratorios, es posible comprender la distribución de los datos, los datos faltantes, las anomalías y las correlaciones. El uso de esta información básica para el procesamiento de datos y el procesamiento de características puede mejorar aún más la calidad de las características y seleccionar de manera flexible los métodos de modelo apropiados.

imagen

2.2 Preprocesamiento de datos

Manejo de valores atípicos

Los datos recopilados pueden introducir valores atípicos (ruido) debido a factores humanos o naturales, que interferirán con el aprendizaje del modelo. Por lo general, es necesario lidiar con valores anormales inducidos por humanos, determinar los valores anormales a través de medios comerciales o técnicos (como el criterio 3σ) y luego filtrar la información anormal mediante (coincidencia de expresiones regulares) y eliminar o reemplazar. los valores según la situación del negocio.

Manejo de valores faltantes

Los valores faltantes de datos se pueden completar, no procesar ni eliminar combinando negocios. Según la tasa de características faltantes y el método de procesamiento, se divide en las siguientes situaciones: ① La tasa de faltas es alta y las variables de características se pueden eliminar directamente en combinación con el negocio. La experiencia puede agregar una característica variable de tipo bool para registrar la ausencia del campo, los faltantes se registran como 1 y los no faltantes se registran como 0; ② La tasa de faltantes es baja y se pueden usar algunos métodos de llenado de valores faltantes. junto con el negocio, como el método fillna de pandas, entrene el modelo de regresión para predecir los valores faltantes y completarlos; ③ Sin procesamiento: algunos modelos, como el bosque aleatorio, xgboost y lightgbm, pueden manejar datos faltantes, y No es necesario procesar los datos faltantes.

discretización de datos

La discretización consiste en segmentar datos continuos en intervalos discretos. Los principios de la segmentación incluyen métodos como igual ancho e igual frecuencia. La discretización generalmente puede aumentar la capacidad anti-ruido, hacer que las características sean más interpretables para el negocio y reducir la sobrecarga de tiempo y espacio del algoritmo (los diferentes algoritmos varían).

estandarización de datos

La dimensión de cada variable característica de los datos es muy diferente y la influencia de la diferencia de dimensiones de diferentes componentes se puede eliminar mediante el uso de la estandarización de datos para acelerar la eficiencia de la convergencia del modelo. Los métodos comúnmente utilizados son: ① Estandarización min-max: el rango de valores se puede escalar a (0, 1) sin cambiar la distribución de datos. max es el valor máximo de la muestra y min es el valor mínimo de la muestra.

imagen

② Estandarización de puntuación z: el rango de valores se puede escalar hasta cerca de 0 y los datos procesados ​​se ajustan a la distribución normal estándar. es la media y σ es la desviación estándar.

imagen

2.3 Extracción de características

representación de características

Los datos deben convertirse a una forma numérica que pueda ser procesada por la computadora, y los datos de la imagen deben convertirse a la representación de una matriz tridimensional RGB.

imagen

Los datos de caracteres se pueden representar mediante matrices multidimensionales, como la codificación Onehot one-hot (representada por una única posición de 1), representación distribuida word2vetor, etc.;

imagen

Derivación de características

Las características básicas tienen una expresión limitada de información de muestra y la derivación de características puede aumentar la capacidad de expresión no lineal de las características y mejorar el efecto del modelo. Además, comprender las características de diseño del negocio también puede aumentar la interpretabilidad del modelo. (Por ejemplo, dividir el peso por la altura es una característica importante para expresar condiciones de salud. La derivación de características consiste en realizar algún procesamiento (agregación/conversión, etc.) sobre el significado de las características básicas existentes. Los métodos comunes son el diseño manual y la derivación automática de características. (Figura 4.15): ① Combinado con la comprensión del negocio para realizar un diseño de derivados artificiales: el método de agregación se refiere a calcular el valor promedio, el recuento, el valor máximo, etc. después de agregar el campo. Por ejemplo, se puede procesar el salario de 12 meses: salario promedio mensual, salario máximo, etc., el método de conversión se refiere a suma, resta, multiplicación y división entre campos. Por ejemplo, a lo largo de 12 meses de salario, se puede procesar: la relación y diferencia entre los ingresos y gastos salariales del mes en curso, etc.;

imagen

② Utilice herramientas derivadas de funciones automatizadas: como Featuretools, etc., puede utilizar agregación (agg_primitives), conversión (trans_primitives) o métodos personalizados para generar funciones violentamente;

selección de características

El objetivo de la selección de características es encontrar el subconjunto de características óptimo, reducir el riesgo de sobreajuste del modelo y mejorar la eficiencia operativa al descartar características importantes y descartar características redundantes. Los métodos de selección de características generalmente se dividen en tres categorías: ① Método de filtrado: calcula la falta de características, divergencia, correlación, volumen de información, estabilidad y otros tipos de indicadores para evaluar y seleccionar cada característica, comúnmente utilizados como tasa faltante, tasa de valor único. , Verificación de varianza, coeficiente de correlación de Pearson, prueba de chi2 cuadrado, valor IV, ganancia de información y PSI y otros métodos. ② Método de empaquetado: entrena iterativamente el modelo seleccionando parte de las características cada vez y selecciona la selección de características de acuerdo con la puntuación del efecto de predicción del modelo, como la eliminación recursiva de características RFE de sklearn. ③ Método de incrustación: utilice directamente algún entrenamiento de modelos para comprender la importancia de las características y realice la selección de características durante el entrenamiento del modelo. El coeficiente de peso de cada característica se obtiene a través del modelo y la característica se selecciona de mayor a menor de acuerdo con el coeficiente de peso. De uso común, como la regresión logística basada en el término regular L1, la función de selección de importancia de características XGBOOST.

imagen

reducción de dimensionalidad de características

Si el número de características después de la selección de características sigue siendo demasiado grande, en este caso, a menudo habrá problemas con muestras de datos escasas y cálculos de distancia difíciles (llamado la "maldición de la dimensionalidad"), que pueden resolverse mediante la reducción de la dimensionalidad de las características. Los métodos de reducción de dimensionalidad más utilizados son: análisis de componentes principales (PCA), etc.

3 entrenamiento modelo

El entrenamiento de modelos es el proceso de utilizar métodos de modelo establecidos para aprender la experiencia de los datos. Este proceso también debe combinarse con la evaluación del modelo para ajustar los hiperparámetros del algoritmo y, finalmente, seleccionar un modelo con mejor rendimiento.

3.1 División del conjunto de datos

Antes de entrenar el modelo, el método de verificación HoldOut comúnmente utilizado (además del método de dejar uno fuera, la validación cruzada k-fold y otros métodos) divide el conjunto de datos en un conjunto de entrenamiento y un conjunto de prueba, y el conjunto de entrenamiento puede ser más subdividido en conjunto de entrenamiento y conjunto de verificación para facilitar la evaluación del desempeño del modelo. ① Conjunto de entrenamiento (conjunto de entrenamiento): se utiliza para ejecutar algoritmos de aprendizaje y entrenar modelos. ② El conjunto de desarrollo (conjunto de desarrollo) se utiliza para ajustar hiperparámetros, seleccionar características, etc., para seleccionar un modelo adecuado. ③ El conjunto de prueba (conjunto de prueba) solo se utiliza para evaluar el rendimiento del modelo seleccionado, pero no cambiará el algoritmo de aprendizaje ni los parámetros en consecuencia. ###3.2 Selección del método del modelo Seleccione el método del modelo apropiado según la tarea actual y las condiciones de los datos. Los métodos comúnmente utilizados se muestran en la figura siguiente, la selección del método del modelo scikit-learn. Además, se pueden combinar varios modelos para la fusión de modelos.

imagen

3.3 Proceso de formación

El proceso de entrenamiento del modelo consiste en aprender la experiencia de los datos para obtener un mejor modelo y los parámetros correspondientes (por ejemplo, la red neuronal finalmente aprende un mejor valor de peso). Todo el proceso de entrenamiento también debe controlarse y optimizarse ajustando los hiperparámetros (como el número de capas de la red neuronal y la tasa de aprendizaje del descenso de gradiente). El ajuste de hiperparámetros es un proceso empírico basado en conjuntos de datos, modelos y detalles del proceso de entrenamiento. Debe basarse en la comprensión de los principios del algoritmo y la experiencia, con la ayuda de la evaluación del modelo en el conjunto de validación para el ajuste de parámetros. Además, existe una tecnología de ajuste automático de parámetros: búsqueda en cuadrícula, búsqueda aleatoria, optimización bayesiana, etc.

imagen

4 Evaluación del modelo

El propósito directo del aprendizaje automático es aprender (ajustar) un modelo "bueno", no solo para tener una buena capacidad de aprendizaje y predicción para datos de entrenamiento en el proceso de aprendizaje, sino también para tener una buena capacidad de predicción para nuevos datos (capacidad general ), por lo que es crucial evaluar objetivamente el rendimiento del modelo. Técnicamente, el rendimiento del modelo a menudo se evalúa en función del rendimiento del índice del conjunto de entrenamiento y del conjunto de prueba.

4.1 Indicadores de evaluación

Evaluar modelos de clasificación.

Los criterios de evaluación comúnmente utilizados incluyen la tasa de precisión P, la tasa de recuperación R y la puntuación F1 promedio armónica de los dos, etc., y el valor se calcula a partir del número correspondiente de estadísticas de la matriz de confusión:

imagen

La tasa de precisión se refiere a la relación entre el número de muestras positivas (TP) clasificadas correctamente por el clasificador y el número de muestras positivas (TP+FP) predichas por el clasificador; la tasa de recuperación se refiere al número de muestras positivas clasificadas correctamente por el clasificador El número (TP) representa la proporción de todas las muestras positivas (TP+FN). La puntuación F1 es el promedio armónico de la precisión P y la recuperación R:

imagen

Evaluar modelos de regresión

Los indicadores de evaluación más utilizados son el error cuadrático medio de MSE, etc. La retroalimentación es el ajuste entre el valor predicho y el valor real.

imagen

Evaluar el modelo de agrupamiento.

Se puede dividir en dos categorías, una es comparar los resultados de la agrupación con los resultados de un "modelo de referencia", llamado "índice externo": como el índice Rand, el índice FM, etc. La otra es inspeccionar directamente los resultados de la agrupación sin utilizar ningún modelo de referencia, lo que se denomina "índice interno": como compacidad, separación, etc.

4.2 Evaluación y optimización del modelo.

El conjunto de muestras de datos utilizado para entrenar el modelo de aprendizaje automático se denomina conjunto de entrenamiento, el error en los datos de entrenamiento se denomina error de entrenamiento y el error en los datos de prueba se denomina error de prueba) o error de generalización.

imagen

Para describir el grado de ajuste (aprendizaje) del modelo, se utilizan comúnmente subajuste, buen ajuste y sobreajuste. Podemos evaluar el grado de ajuste del modelo mediante errores de entrenamiento y errores de prueba. Desde la perspectiva del proceso de capacitación general, el error de capacitación y el error de prueba son altos cuando no se ajustan adecuadamente y disminuyen con el aumento del tiempo de capacitación y la complejidad del modelo. Después de alcanzar un punto crítico de ajuste óptimo, el error de entrenamiento disminuye y el error de prueba aumenta, y en este momento ingresa a la región de sobreajuste.

imagen

El desajuste significa que la estructura del modelo es demasiado simple en comparación con los datos, por lo que no se pueden aprender las leyes de los datos. El sobreajuste significa que el modelo solo coincide demasiado con el conjunto de datos de entrenamiento, por lo que no se ajusta ni predice bien los datos nuevos. Su esencia es causada por el ruido estadístico aprendido por el modelo más complejo a partir de los datos de entrenamiento. Para analizar el efecto de ajuste del modelo y optimizar el modelo, los métodos comúnmente utilizados son:

imagen

5 Decisión modelo

La aplicación de la toma de decisiones es el objetivo final del aprendizaje automático: analiza e interpreta la información de predicción del modelo y la aplica al campo de trabajo real. Cabe señalar que la ingeniería está orientada a resultados, y el efecto del modelo que se ejecuta en línea determina directamente el éxito o el fracaso del modelo, y no solo incluye su precisión, error, etc., sino también su velocidad de ejecución (complejidad del tiempo). Consumo de recursos (complejidad espacial), consideración integral de la estabilidad.

6 Combate del proyecto de aprendizaje automático (minería de datos)

6.1 Introducción al proyecto

Los datos experimentales del proyecto provienen de la famosa base de datos de aprendizaje automático UCI, que tiene una gran cantidad de datos de extracción de datos de inteligencia artificial. Este ejemplo utiliza la versión del conjunto de datos en sklearn: Breast Cancer Wisconsin DataSet (conjunto de datos de cáncer de mama de Wisconsin), estos datos provienen de informes de casos clínicos del Hospital de la Universidad de Wisconsin en los Estados Unidos Oncología, el problema de la clasificación supervisada predicción. La idea de modelado del proyecto es analizar los datos del conjunto de datos sobre cáncer de mama, realizar ingeniería de características, construir un modelo de regresión logística para conocer los datos y predecir si la categoría de la muestra es un tumor benigno.

6.2 Implementación del código

Importe la biblioteca de Python correspondiente, cargue el conjunto de datos sobre el cáncer, vea la introducción de los datos y conviértalo al formato DataFrame.

import numpy as np  
import pandas as pd
import matplotlib.pyplot as plt

from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.utils import plot_model
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import precision_score, recall_score, f1_score
dataset_cancer = datasets.load_breast_cancer()    # 加载癌细胞数据集

print(dataset_cancer['DESCR'])

df = pd.DataFrame(dataset_cancer.data, columns=dataset_cancer.feature_names)  

df['label'] = dataset_cancer.target

print(df.shape)

df.head()

imagen

Análisis de datos exploratorios EDA: utilice la biblioteca pandas_profiling para analizar el valor de los datos, la tasa faltante y la correlación, etc.

import pandas_profiling

pandas_profiling.ProfileReport(df, title='Breast Cancer DataSet EDA')

imagen

Los principales análisis y procesamiento de la ingeniería de características son:

● No hay ninguna situación atípica o faltante obvia en la función de análisis, no es necesario ocuparse de ello;

● Existen características derivadas como el error medio/estándar, no es necesario derivar características;

● Combinación con correlación y otros indicadores para la selección de características (método de filtrado);

● Normalizar funciones para acelerar el proceso de aprendizaje del modelo;

# 筛选相关性>0.99的特征清单列表及标签
drop_feas = ['label','worst_radius','mean_radius']

# 选择标签y及特征x
y = df.label
x = df.drop(drop_feas,axis=1)  # 删除相关性强特征及标签列

# holdout验证法: 按3:7划分测试集 训练集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)

# 特征z-score 标准化
sc = StandardScaler()

x_train = sc.fit_transform(x_train)  # 注:训练集测试集要分别标准化,以免测试集信息泄露到模型训练
x_test = sc.transform(x_test) 

Entrenamiento de modelos: use keras para construir un modelo de regresión logística, entrenar el modelo y observar la pérdida del conjunto de entrenamiento del modelo y del conjunto de verificación.

_dim = x_train.shape[1]   # 输入模型的特征数

# LR逻辑回归模型
model = Sequential()   

model.add(Dense(1, input_dim=_dim, activation='sigmoid',bias_initializer='uniform'))  # 添加网络层,激活函数sigmoid

model.summary()

plot_model(model,show_shapes=True)
model.compile(optimizer='adam', loss='binary_crossentropy')  #模型编译:选择交叉熵损失函数及adam梯度下降法优化算法

model.fit(x, y, validation_split=0.3, epochs=200)   # 模型迭代训练: validation_split比例0.3, 迭代epochs200次

# 模型训练集及验证集的损失

plt.figure()

plt.plot(model.history.history['loss'],'b',label='Training loss')

plt.plot(model.history.history['val_loss'],'r',label='Validation val_loss')

plt.title('Traing and Validation loss')

plt.legend()

imagen

La capacidad de generalización del modelo se evalúa mediante el rendimiento del conjunto de pruebas F1-score y otros indicadores. La puntuación f1 del conjunto de prueba final es del 88%, lo que tiene un buen rendimiento del modelo.

imagen

def model_metrics(model, x, y):
    """

    评估指标

    """
    yhat = model.predict(x).round()  # 模型预测yhat,预测阈值按默认0.5划分

    result = {
              'f1_score': f1_score(y, yhat),

              'precision':precision_score(y, yhat),

              'recall':recall_score(y, yhat)
             }

    return result

# 模型评估结果

print("TRAIN")

print(model_metrics(model, x_train, y_train))

print("TEST")

print(model_metrics(model, x_test, y_test))

 

Supongo que te gusta

Origin blog.csdn.net/qq_36130719/article/details/132615322
Recomendado
Clasificación