paint-brush
Selección automática de características en Python: una guía esencialpor@davisdavid
36,372 lecturas
36,372 lecturas

Selección automática de características en Python: una guía esencial

por Davis David6m2021/07/20
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Featurewiz es un nuevo paquete de Python de código abierto para crear y seleccionar automáticamente características importantes en su conjunto de datos que crearán el mejor modelo con un mayor rendimiento. Utiliza el algoritmo SULOV y Recursive XGBoost para reducir las características y seleccionar las mejores características para el modelo. También utiliza estrategias avanzadas de ingeniería de funciones para crear nuevas funciones antes de seleccionar el mejor conjunto de funciones con una sola línea de código. Featurewiz puede detectar automáticamente si el problema es de regresión o de clasificación. Puede ejecutarse en la mayoría de Python 3.0 (bajo costo) o muy alto costo (muy alto costo)

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Selección automática de características en Python: una guía esencial
Davis David HackerNoon profile picture

La selección de características en python es el proceso en el que usted selecciona automática o manualmente las características en el conjunto de datos que más contribuyen a su variable de predicción o salida en la que está interesado.

Una de las principales razones es que el aprendizaje automático sigue la regla de "basura dentro basura fuera" y es por eso que debe estar muy preocupado por las funciones que se alimentan al modelo. Tenga en cuenta que no todas las características presentadas en su conjunto de datos son importantes para brindarle el mejor rendimiento del modelo.

Las 4 razones principales para aplicar la selección de funciones en Python:

  1. Mejora la precisión de un modelo si se elige el subconjunto correcto.
  2. Reduce el sobreajuste.
  3. Permite que el algoritmo de aprendizaje automático entrene más rápido.
  4. Reduce la complejidad de un modelo y lo hace más fácil de interpretar.


“Preparé un modelo seleccionando todas las características y obtuve una precisión de alrededor del 65 %, lo que no es bueno para un modelo predictivo y, después de hacer una selección de características e ingeniería de características sin hacer ningún cambio lógico en el código de mi modelo, mi precisión saltó a 81 % que es bastante impresionante”- Por Raheel Shaikh .

En este artículo, aprenderá cómo seleccionar funciones importantes automáticamente mediante el uso de un paquete de Python de código abierto llamado featurewiz.

¿Qué es Featurewiz?

Featurewiz es un nuevo paquete de Python de código abierto para crear y seleccionar automáticamente características importantes en su conjunto de datos que crearán el mejor modelo con un mayor rendimiento. También utiliza estrategias avanzadas de ingeniería de funciones para crear nuevas funciones antes de seleccionar el mejor conjunto de funciones con una sola línea de código.

Nota: Featurewiz puede detectar automáticamente si el problema es de regresión o clasificación.

¿Como funciona?

Featurewiz usa el algoritmo SULOV y Recursive XGBoost para reducir las características y seleccionar las mejores características para el modelo.

(a) SÚLOV
SULOV significa Búsqueda de lista de variables no correlacionadas. El algoritmo funciona en los siguientes pasos.

  1. Primer paso: encuentre todos los pares de variables altamente correlacionadas que excedan un umbral de correlación (digamos absoluto (0.8)).
  2. Segundo paso: encontrar su puntaje de información mutua para la variable objetivo. La puntuación de información mutua es un método de puntuación no paramétrico. Por lo tanto, es adecuado para todo tipo de variables y objetivos.
  3. Tercer paso: tome cada par de variables correlacionadas, luego elimine la que tenga el puntaje de información mutua más bajo.
  4. Paso final: recopile los que tengan los puntajes de información más altos y la menor correlación entre sí.

(b) XGBoost recursivo
Después de seleccionar las funciones con menos correlación y una puntuación de información mutua alta, se utiliza el XGBoost recursivo para encontrar las mejores funciones entre las funciones restantes. Así es como funciona.

  1. Primer paso: seleccione todas las características en el conjunto de datos y divida el conjunto de datos en conjuntos válidos y de entrenamiento.
  2. Segundo paso: encuentre las principales características X en el tren utilizando válido para paradas anticipadas (para evitar el sobreajuste).
  3. Tercer paso: tome el siguiente conjunto de características y encuentre la X superior.
  4. Paso final: repita esto 5 veces y finalmente combine todas las funciones seleccionadas y elimínelas.

Instalación

El paquete requiere xgboost, NumPy, pandas y matplotlib. Además, debería ejecutarse en la mayoría de Python 3.

Puede instalar Featurewiz usando PyPI.

 pip install featurewiz

Cómo usar Featurewiz para la selección de funciones en Python

Usaremos el conjunto de datos de Mobile Price para encontrar las mejores características que pueden ayudar a obtener una buena precisión al predecir el rango de precios.

  • 0 (bajo costo)
  • 1 (costo medio)
  • 2 (alto costo)
  • 4 (costo muy alto)

Puede descargar el conjunto de datos aquí .

Importar paquetes de python.

 # import packages import pandas as pd import numpy as np import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.ensemble import RandomForestClassifier from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score from featurewiz import featurewiz np.random.seed( 1234 )

Cargue el conjunto de datos Precio móvil.

 data = pd.read_csv( '../data/train.csv' ) data.shape

(2000, 21)

El conjunto de datos contiene 21 columnas (20 características y 1 objetivo) y, afortunadamente, este conjunto de datos no tiene valores faltantes.

Dividir los datos en características y objetivos independientes.

 X = data.drop([ 'price_range' ],axis= 1 ) y = data.price_range.values

Luego estandarice las características usando StandardScaler de scikit-learn.

 X_scaled = StandardScaler().fit_transform(X)

Divida los datos en conjuntos de entrenamiento y validación. El 20% de los datos se utilizará para la validación.

 X_train, X_valid, y_train, y_valid = train_test_split(X_scaled,y,test_size = 0.2 ,stratify=y, random_state= 1 )

Cree y entrene el clasificador RandoForest en el conjunto de trenes.

 classifier = RandomForestClassifier() classifier.fit(X_train,y_train)

Haga una predicción sobre el conjunto de validación y luego verifique el rendimiento del modelo.

 # make prediction preds = classifier.predict(X_valid) # check performance accuracy_score(preds,y_valid)

0.88

La precisión del modelo es del 88 % cuando usamos las 20 funciones disponibles en el conjunto de datos.

Ahora puede usar Featurewiz para seleccionar automáticamente el mejor conjunto de características que le brindarán el mejor rendimiento del modelo.

 # automatic feature selection by using featurewiz package target = 'price_range' features, train = featurewiz(data, target, corr_limit= 0.7 , verbose= 2 , sep= "," , header= 0 ,test_data= "" , feature_engg= "" , category_encoders= "" )

En la instancia de Featurewiz, hemos agregado el conjunto de datos y el nombre de la variable de destino. También puede cambiar el límite de correlación utilizando corr_limit (el valor predeterminado es 7).

Durante el proceso de selección, mostrará la siguiente serie de salida.

 Skipping feature engineering since no feature_engg input... Skipping category encoding since no category encoders specified in input... Loading train data... Shape of your Data Set loaded: ( 2000 , 21 ) Loading test data... Filename is an empty string or file not able to be loaded ############## CLASSIFYINGVARIABLES #################### Classifying variables in data set... 20 Predictors classified... No variables removed since no ID or low-information variables found in data set No GPU active on this device Running XGBoost using CPU parameters Removing 0 columns from further processing since ID or low information variables columns removed: [] After removing redundant variables from further processing, features left = 20 #### Single_Label Multi_Classification Feature Selection Started #### Searching for highly correlated variables from 20 variables using SULOV method ##### SULOV : Searching for Uncorrelated List Of Variables (takes time...) ############ No highly correlated variables in data set to remove. All selected... Adding 0 categorical variables to reduced numeric variables of 20 ############## FEATURESELECTION #################### Current number of predictors = 20 Finding Important Features using Boosted Trees algorithm... using 20 variables... using 16 variables... using 12 variables... using 8 variables... using 4 variables... Selected 16 important features from your dataset Time taken ( in seconds) = 19 Returning list of 16 important features and dataframe.

Como puede ver, Featurewiz selecciona 16 funciones importantes del conjunto de datos. La instancia de Featurewiz devuelve dos objetos

  • Funciones: una lista de funciones seleccionadas
  • Un marco de datos: este marco de datos contiene solo las características seleccionadas y la variable de destino.

Ahora puede volver a entrenar RandomForestClassifier con las características seleccionadas y ver si el rendimiento del modelo mejorará.

Veamos la lista de características seleccionadas.

 print(features)

['RAM',
'Potencia de la batería',
'px_altura',
'px_ancho',
'pantalla táctil',
'mobile_wt',
'int_memoria',
'tres_g',
'sc_h',
'cuatro_g',
'sc_w',
'n_núcleos',
'fc',
'ordenador personal',
'tiempo de conversación',
'Wifi']

Divida el marco de datos en características seleccionadas y el objetivo.

 #split data into feature and target X_new = train.drop([ 'price_range' ],axis= 1 ) y = train.price_range.values

Luego, estandarice las características seleccionadas usando StandardScaler de scikit-learn.

 # preprocessing the features X_scaled = StandardScaler().fit_transform(X_new)

Divida los datos en conjuntos de entrenamiento y validación. El 20% de los datos se utilizará para la validación.

 #split data into train and validate X_train, X_valid, y_train, y_valid = train_test_split(X_scaled,y,test_size = 0.2 ,stratify=y, random_state= 1 )

Cree y entrene el clasificador RandoForest en el conjunto de trenes nuevamente.

 # create and train classifier classifier = RandomForestClassifier() classifier.fit(X_train,y_train)

Haga una predicción sobre el conjunto de validación y luego verifique el rendimiento del modelo.

 # make prediction preds = classifier.predict(X_valid) # check performance accuracy_score(preds,y_valid)
0.905

La precisión del modelo ha aumentado del 88 % al 90,5 % cuando usamos las características mejor seleccionadas (16 de 20 características) del conjunto de datos.

Reflexiones finales sobre la selección de funciones en Python

En este artículo, ha aprendido cómo puede seleccionar automáticamente funciones importantes utilizando el paquete Featurewiz. También puede utilizar Featurewiz en cualquier conjunto de datos multiclase o multietiqueta. De modo que puede tener tantas etiquetas de destino como desee.

Hay más opciones disponibles en el paquete Featurewiz. Te recomiendo que los leas aquí.

Si aprendiste algo nuevo o disfrutaste leyendo este artículo, compártelo para que otros puedan verlo. Hasta entonces, ¡nos vemos en el próximo post!

También puedes encontrarme en Twitter @Davis_McDavid .

Y puedes leer más artículos como este aquí .

¿Quiere mantenerse al día con lo último en python? Suscríbase a nuestro boletín en el pie de página a continuación.