Representación de datos e ingeniería de características de la biblioteca sklearn

Este artículo consta principalmente de dos partes. La primera parte es la transformación de datos de características, que es especialmente útil para modelos con baja complejidad, como los modelos lineales. La segunda parte es la selección de características.


Para una aplicación específica, cómo encontrar la mejor representación de datos es un problema llamado ingeniería de características, que es una de las principales tareas de los científicos de datos y los profesionales del aprendizaje automático cuando intentan resolver problemas del mundo real.

Tipo de característica nombre inglés Alias nombre inglés
Características numéricas característica numérica Característica continua característica continua
Características de clasificación característica categórica Característica discreta característica discreta

Representar los datos de manera correcta tiene un mayor impacto en el desempeño del modelo supervisado que los parámetros precisos seleccionados.

1. Variables categóricas

1.1 Codificación One-Hot (variable ficticia)
Codificación nombre inglés Alias ​​1 Alias ​​2
codificación one-hot codificación en caliente N tomar una codificación (codificación una de N) Variable ficticia

La idea detrás de las variables ficticias es reemplazar una variable categórica con una o más características nuevas, y las nuevas características toman valores de 0 y 1.

1.2 ¿Cómo tratar las variables categóricas codificadas numéricamente?

La función get_dummies de pandas trata todos los números como continuos y no crea variables ficticias para ellos.

Para resolver este problema, puede usar OneHotEncoder de scikit-learn para especificar qué variables son continuas y qué variables son discretas. También puede convertir las columnas numéricas en el marco de datos en cadenas.

  • Método 1: use pd.get_dummies () para mostrar la columna que se codificará
demo_df = pd.DataFrame({
    
    'Integer Feature': [0, 1, 2, 1],'Categorical Feature': ['socks', 'fox', 'socks', 'box']})
demo_df['Integer Feature'] = demo_df['Integer Feature'].astype(str)
pd.get_dummies(demo_df, columns=['Integer Feature', 'Categorical Feature']) # 显示给出想要编码的列

Inserte la descripción de la imagen aquí

  • Método 2: use la clase OneHotEncoder para codificar
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse=False)
encoder.fit(demo_df)
encoder.transform(demo_df)

2. Binning (discretización): principalmente para modelos lineales

Utilice el agrupamiento de funciones (también llamado discretización, es decir, discretización) para dividirlo en varias funciones.

bins = np.linspace(-3, 3, 11)  # 生成[-3,3]的10个区间
which_bin = np.digitize(X, bins=bins)  # 返回相同形状的保存X位于区间的数组,区间从1计数 
  • para resumir
  1. La función de agrupamiento generalmente no produce mejores resultados para los modelos basados ​​en árboles, porque este modelo puede aprender a dividir datos en cualquier ubicación. En cierto sentido, los árboles de decisión pueden aprender cómo el agrupamiento es más útil para predecir estos datos.

  2. Para un conjunto de datos específico, si hay buenas razones para usar un modelo lineal (por ejemplo, el conjunto de datos es grande y la dimensionalidad es alta, pero la relación entre algunas características y la salida no es lineal), la agrupación es una buena manera de mejorar las capacidades de modelado.


Tres, características interactivas y características polinomiales

Para enriquecer la representación de la función, especialmente para los modelos lineales, puede agregar la función de interacción y la función polinomial de los datos originales.

  • Característica interactiva
X_combined = np.hstack([X, X_binned])  # 将原特征和分箱编码后的特征作为输入特征,横向拼接
X_product = np.hstack([X_binned, X * X_binned])
  • Características polinomiales: implementadas en PolynomialFeatures del módulo de preprocesamiento
from sklearn.preprocessing import PolynomialFeatures
# 默认的"include_bias=True"添加恒等于1的常数特征
# degree是针对所有特征
poly = PolynomialFeatures(degree=10, include_bias=False)
X = np.array([1,2]).reshape(-1,1)
poly.fit(X)
X_poly = poly.transform(X)

La semántica de las características se puede obtener llamando al método get_feature_names , y se puede dar el índice de cada característica.

poly.get_feature_names()

Inserte la descripción de la imagen aquí


Cuatro, transformación no lineal univariante

La mayoría de los modelos funcionan mejor cuando cada característica (incluido el valor objetivo en el problema de regresión) sigue aproximadamente una distribución gaussiana.

Aunque los modelos basados ​​en árboles solo se enfocan en el orden de las características, los modelos lineales y las redes neuronales dependen de la escala y distribución de cada característica.

Para problemas de regresión. Las funciones log y exp pueden ayudar a ajustar la proporción relativa de datos, mejorando así el efecto de aprendizaje de modelos lineales o redes neuronales.

Las funciones sin y cos son muy útiles cuando se trata de datos con patrones periódicos.
Inserte la descripción de la imagen aquí
Este tipo de distribución de valores (muchos valores pequeños y algunos valores muy grandes) en la figura anterior es muy común en la práctica. Generalmente, el conjunto de datos se transforma de la siguiente manera:

X_train_log = np.log(X_train + 1)
X_test_log = np.log(X_test + 1)

Después de la transformación, la asimetría de la distribución de datos se vuelve más pequeña y ya no hay valores atípicos muy grandes.


resumen de la parte 1

  • La agrupación, los polinomios y los términos de interacción tienen un gran impacto en el rendimiento del modelo en un conjunto de datos determinado, especialmente para modelos con menor complejidad, como los modelos lineales y los modelos Bayes ingenuos.

  • Los modelos basados ​​en árboles generalmente pueden descubrir términos de interacción importantes por sí mismos y, en la mayoría de los casos, no es necesario transformar explícitamente los datos.

  • Otros modelos, como SVM, vecinos más cercanos y redes neuronales, a veces pueden beneficiarse del uso de agrupaciones, términos de interacción o polinomios, pero sus efectos generalmente no son tan obvios como los modelos lineales.


5. Selección automática de funciones (se utiliza principalmente sklearn.feature_selection)

Al agregar nuevas características o procesar conjuntos de datos generales de alta dimensión, es mejor reducir la cantidad de características para incluir solo las características más útiles y eliminar las características restantes. Esto dará como resultado un modelo más simple con mejores capacidades de generalización.

Estrategia básica nombre inglés
Estadística univariante estadística univariante
Selección basada en modelos selección basada en modelos
Selección iterativa selección iterativa

Una función para visualizar la máscara (resultado de la selección de características): plt.matshow (mask.reshape (1, -1), cmap = 'gray_r')


5.1 Estadísticas univariadas

En las estadísticas univariadas, calculamos si la relación entre cada característica y el valor objetivo es estadísticamente significativa y luego seleccionamos la característica con la mayor confianza.

Para problemas de clasificación, esto también se conoce como análisis de varianza (ANOVA). Una propiedad clave de estas pruebas es que son univariadas, lo que significa que solo consideran cada característica individualmente.

Método de cálculo del umbral:

método Instrucciones de uso
SeleccionarKBest Seleccione un número fijo de k características
Seleccionar percentil Seleccione un porcentaje fijo de funciones
  • Importación e instanciación de la selección de características
from sklearn.feature_selection import SelectPercentile
select = SelectPercentile(percentile=50)
select.fit(X_train, y_train)

5.2 Selección de características basadas en modelos

La selección de características basada en modelos utiliza un modelo de aprendizaje automático supervisado para determinar la importancia de cada característica y solo conserva las características más importantes.

El modelo supervisado usado para la selección de características no necesita ser el mismo que el modelo usado para el modelado supervisado final.

El modelo de selección de características debe proporcionar una determinada métrica de importancia para cada característica con el fin de utilizar esta métrica para clasificar las características.

  • Importación e instanciación de la selección de características
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier
select = SelectFromModel(RandomForestClassifier(n_estimators=100, random_state=42), threshold="median")  # 用包含 100 棵树的随机森林分类器来计算特征重要性,参数 threshold 指定阈值

5.3 Selección de características iterativas

En la selección de características iterativas, se construirá una serie de modelos, cada modelo usando un número diferente de características. Hay dos métodos básicos:

  • No hay características al principio y luego agregue características una por una hasta que se cumpla una determinada condición de terminación;

  • Comience con todas las funciones y luego elimine las funciones una por una hasta que se cumpla una determinada condición de terminación.

Método: eliminación de características recursivas (eliminación de características recursivas, RFE)

Instrucciones de uso: comienza con todas las características para construir el modelo y descarta las características menos importantes según el modelo, luego usa todas las características excepto las características descartadas para construir un nuevo modelo, y así sucesivamente, hasta que solo quede el número preestablecido de características. .

  • Importación e instanciación de la selección de características
from sklearn.feature_selection import RFE
select = RFE(RandomForestClassifier(n_estimators=100, random_state=42), n_features_to_select=40)

resumen de la parte 2

  1. No está seguro de cuándo elegir qué funciones usar como entrada para un algoritmo de aprendizaje automático, la selección automática de funciones puede ser particularmente útil.

  2. La selección de características puede ayudar a reducir la cantidad de características requeridas, acelerar la predicción o permitir modelos más interpretables. En la mayoría de las situaciones reales, es poco probable que el uso de la selección de características mejore significativamente el rendimiento, pero sigue siendo una herramienta muy valiosa en la caja de herramientas de ingeniería de características.

Supongo que te gusta

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