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.
“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.
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.
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.
(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.
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
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.
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
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.
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.