Redes Neurais em IA e Deep Learning - página 74

 

13.2 Métodos de filtro para la selección de características: umbral de varianza (L13: Selección de características)


13.2 Métodos de filtro para la selección de características: umbral de varianza (L13: Selección de características)

Sí, en el video anterior, discutimos las tres categorías diferentes de selección de funciones: métodos de filtro, métodos incrustados y métodos de envoltorio. Ahora, profundicemos en una de las categorías, los métodos de filtrado. En los próximos videos, también exploraremos los métodos incrustados y los métodos de envoltorio. Sin embargo, por ahora, centrémonos en los métodos de filtro como tema principal.

Los métodos de filtro son técnicas de selección de características que consideran principalmente las propiedades intrínsecas de las características mismas. No se basan en un modelo específico para la selección de funciones. Un ejemplo de un método de filtro es el umbral de varianza. Echemos un vistazo más de cerca a cómo funciona el umbral de varianza.

Cuando usamos un umbral de varianza para la selección de funciones, calculamos la varianza de cada función. La suposición es que las características con varianzas más altas pueden contener información más útil para entrenar un clasificador o un modelo de regresión. Pero, ¿por qué es esto cierto? Para entender esto, consideremos una característica llamada X1. En el lado izquierdo, tenemos una característica con una varianza alta y los valores de la característica están bien dispersos. En el lado derecho, tenemos una función con poca variación y los valores de la función están menos dispersos. Una varianza más alta nos permite reconstruir los límites de decisión basados en esa característica. Esto es crucial para hacer predicciones precisas. Incluso en el peor de los casos, donde las clases se superponen, las características bien distribuidas aún pueden ayudar a construir límites de decisión.

Para ilustrar más este concepto, consideremos un caso de clasificación binaria. Supongamos que tenemos dos clases, clase cuadrada y clase estrella. En el mejor de los casos, todos los puntos de datos de una clase están en un lado y todos los puntos de datos de la otra clase están en el otro lado. Esto facilita la construcción de un límite de decisión que separa perfectamente las clases. Sin embargo, en escenarios del mundo real, no siempre se puede lograr una separación perfecta. Incluso cuando las clases se superponen, una entidad con una varianza alta aún puede ayudar en la construcción de límites de decisión. Por ejemplo, un árbol de decisión puede clasificar puntos de datos con precisión en función de características bien distribuidas, como se demuestra en el ejemplo de codificación.

Ahora que entendemos la importancia de la varianza, analicemos cómo podemos usarla como medida para la selección de características. La varianza de una variable aleatoria discreta se puede calcular mediante una fórmula específica, pero en la práctica, a menudo trabajamos con conjuntos de datos en los que no conocemos la distribución de probabilidad. Por lo tanto, asumimos pesos uniformes y calculamos la varianza en función de los puntos de datos observados. Por ejemplo, cuando se trata de características categóricas, realizamos una codificación one-hot para crear variables binarias. En este caso, la varianza de una variable de Bernoulli se puede calcular como p * (1 - p), donde p es la probabilidad de observar un valor de 1. Este cálculo de varianza es particularmente útil para la selección de características en escenarios de características categóricas.

Para implementar la selección de funciones basada en la varianza, Scikit-learn proporciona la clase VarianceThreshold. Esta clase nos permite eliminar características con variaciones bajas. Al especificar un umbral de varianza, podemos eliminar las columnas de funciones en las que un determinado porcentaje de las etiquetas son iguales. Por ejemplo, si queremos eliminar funciones en las que más del 80 % de las etiquetas son similares, podemos establecer el umbral de varianza en 0,16 (calculado como 0,8 * (1 - 0,8)). Este umbral asegura que se descarten características con poco poder discriminatorio.

En resumen, los métodos de filtro como el umbral de varianza son valiosos para la selección de características porque consideran las propiedades intrínsecas de las características. Al analizar la varianza de las características, podemos identificar y eliminar aquellas que brindan información limitada para las tareas de clasificación o regresión.

13.2 Filter Methods for Feature Selection -- Variance Threshold (L13: Feature Selection)
13.2 Filter Methods for Feature Selection -- Variance Threshold (L13: Feature Selection)
  • 2021.12.10
  • www.youtube.com
Sorry, I had some issues with the microphone (a too aggressive filter to remove background noise). Should be better in the next vids!Description: This video ...
 

13.3.1 Regresión logística regularizada L1 como selección de funciones integrada (L13: Selección de funciones)


13.3.1 Regresión logística regularizada L1 como selección de funciones integrada (L13: Selección de funciones)

En el video anterior, discutimos diferentes métodos para la selección de funciones, centrándonos específicamente en los métodos de filtro que se basan en las propiedades de las funciones. Ahora, profundicemos en dos categorías diferentes de selección de funciones: métodos incrustados y métodos de envoltura. Ambas categorías implican el uso de un modelo, como un clasificador, para la selección de características. En este video, nos centraremos en los métodos integrados, donde la selección de características ocurre implícitamente como parte del proceso de optimización o entrenamiento del modelo.

Los métodos integrados integran la selección de características en el proceso de entrenamiento del modelo. Exploraremos este concepto en el contexto de la regresión logística regularizada L1, también conocida como regresión de Lasso. Antes de continuar, es importante tener en cuenta que este video asume una familiaridad básica con la regresión logística. Sin embargo, solo cubriremos los conceptos esenciales para evitar desviarnos demasiado.

Comencemos por considerar un modelo de regresión logística binaria con dos clases, utilizando el conjunto de datos Iris con dos características: longitud de pétalo y ancho de pétalo. La regresión logística produce un límite de decisión lineal para separar las dos clases. El límite de decisión se determina aplicando un umbral a la suma ponderada de las entradas, que experimentan una transformación no lineal.

Para comprender mejor la regresión logística, examinemos una representación gráfica del modelo. En este diagrama, tenemos los pesos (w) en el lado izquierdo, donde w1 y w2 representan los pesos de las dos características. Además, tenemos la unidad de sesgo (B) que actúa como un término de intersección. La suma ponderada se calcula como la suma del producto de cada peso y su característica correspondiente, más el término de sesgo. Esta suma ponderada luego se pasa a través de una función sigmoidal, también conocida como sigmoide logística, que genera un valor entre 0 y 1. Este valor representa la probabilidad de pertenencia a la clase, lo que indica la probabilidad de que un punto de datos pertenezca a la clase 1 dadas las características observadas. . Al aplicar un umbral (normalmente 0,5), podemos hacer predicciones binarias, clasificando el punto de datos como clase 0 o clase 1.

Ahora que tenemos una comprensión básica de la regresión logística, centrémonos en la regresión logística regularizada L1. El aspecto clave de la regularización L1 es la inclusión de un término normativo L1, que mide la magnitud de los pesos. Este término se agrega a la función de pérdida, penalizando efectivamente los modelos complejos con grandes pesos. En la regresión logística, nuestro objetivo es minimizar la función de pérdida y al mismo tiempo minimizar los pesos.

Para visualizar esto, imagine líneas de contorno que representen la función de pérdida. Los contornos exteriores corresponden a grandes valores de pérdida, mientras que los contornos más cercanos al centro representan valores de pérdida más pequeños. El mínimo global de la función de pérdida sin regularización ocurre en el centro, indicando los pesos óptimos para minimizar la pérdida. Sin embargo, el término de penalización L1 prefiere pesos más pequeños y fomenta la simplicidad. Al introducir este término de penalización, buscamos un equilibrio entre minimizar la pérdida y minimizar la penalización. Sorprendentemente, la regresión logística regularizada con L1 tiende a producir pesos escasos, y algunos pesos son exactamente cero. Este aspecto de selección de características es lo que hace que la regularización de L1 sea atractiva.

Para demostrar la regresión logística regularizada L1 en la práctica, utilizaremos el conjunto de datos del vino. Este conjunto de datos contiene 13 características diferentes relacionadas con varias características del vino, y la tarea es clasificar los vinos en diferentes tipos. Comenzamos dividiendo los datos en conjuntos de entrenamiento y prueba, una práctica común en el aprendizaje automático.

Tenga en cuenta que los ejemplos de código detallados y más explicaciones se pueden encontrar en el cuaderno que acompaña a este video, que se proporcionará a continuación.

Ahora pasemos a la parte de selección de características utilizando el enfoque de regularización L1, también conocido como Lasso. Usaremos el modelo de regresión logística de scikit-learn, que nos permite aplicar la penalización de regularización L1.

 from sklearn.linear_model import LogisticRegression

# Create a Logistic Regression model with L1 regularization
model = LogisticRegression(penalty= 'l1' , solver= 'liblinear' )

# Fit the model on the training data
model.fit(X_train, y_train)

Al establecer el parámetro de penalización en 'l1', especificamos que queremos usar la regularización L1. El parámetro del solucionador se establece en 'liblinear', que es adecuado para conjuntos de datos pequeños como el que estamos trabajando.

Después de ajustar el modelo a los datos de entrenamiento, podemos acceder a los coeficientes aprendidos, que representan los pesos asignados a cada característica. Imprimimos los coeficientes:

# Get the learned coefficients
coefficients = model.coef_

# Print the coefficients
for i, coef in enumerate(coefficients[ 0 ]):
    print(f 'Feature {i+1}: {coef:.4f}' )
El atributo coef_ del modelo contiene los coeficientes. Iteramos sobre los coeficientes y los imprimimos, asociando cada coeficiente con su característica correspondiente.

A continuación, podemos identificar las características que tienen coeficientes distintos de cero, ya que estas son las características seleccionadas. Encontremos las características seleccionadas e imprimámoslas:

# Find the indices of non-zero coefficients
selected_features = [i for i, coef in enumerate(coefficients[ 0 ]) if coef != 0 ]

# Print the selected features
print( 'Selected features:' )
for feature in selected_features:
    print(f 'Feature {feature+1}' )
Iteramos sobre los coeficientes nuevamente, esta vez almacenando los índices de los coeficientes distintos de cero en la lista selected_features. Finalmente, imprimimos las características seleccionadas.

Al aplicar la regularización L1, el modelo de regresión logística realiza implícitamente la selección de características al llevar algunos coeficientes a cero. Las características con coeficientes distintos de cero se consideran importantes para las predicciones del modelo.

Es importante señalar que la elección del parámetro de regularización C influye en el grado de regularización aplicado. Un valor de C más pequeño da como resultado una regularización más fuerte, lo que potencialmente conduce a más entidades con coeficientes cero.

Ahora comprende el método de selección de características integradas mediante la regularización L1 en Regresión logística. En el próximo video, exploraremos la selección de características con árboles de decisión y bosques aleatorios.

En el próximo video, exploraremos la selección de características utilizando árboles de decisión y bosques aleatorios. Estos métodos se conocen como métodos de conjunto y se pueden utilizar tanto para problemas de clasificación como de regresión.

Los árboles de decisión son modelos simples pero poderosos que hacen predicciones dividiendo el espacio de características en regiones y asignando una etiqueta a cada región. Los bosques aleatorios, por otro lado, son un conjunto de árboles de decisión donde cada árbol se entrena en un subconjunto aleatorio de datos y características.

Comencemos usando Random Forest Classifier de scikit-learn para la selección de funciones:

 from sklearn.ensemble import RandomForestClassifier

# Create a Random Forest Classifier
model = RandomForestClassifier()

# Fit the model on the training data
model.fit(X_train, y_train)

Después de ajustar el modelo a los datos de entrenamiento, podemos acceder a las importancias de las características, que representan la importancia relativa de cada característica en las predicciones del modelo. Imprimamos las importancias de las características:

# Get the feature importances
importances = model.feature_importances_

# Print the feature importances
for i, importance in enumerate(importances):
    print(f 'Feature {i+1}: {importance:.4f}' )
El atributo feature_importances_ del modelo contiene las importancias de las características. Iteramos sobre las importancias y las imprimimos, asociando cada importancia con su característica correspondiente.

A continuación, podemos clasificar las características según su importancia y seleccionar las k características principales. Encontremos las k principales características e imprimámoslas:

# Rank the features based on importances
feature_ranks = sorted(range(len(importances)), key=lambda i: importances[i], reverse=True)

# Select the top k features
k = 5   # Number of top features to select
top_features = feature_ranks[:k]

# Print the top features
print(f 'Top {k} features:' )
for feature in top_features:
    print(f 'Feature {feature+1}' )

Ordenamos los índices de las características en función de su importancia, en orden descendente. Luego, seleccionamos las k características principales dividiendo la lista de rangos de características. Finalmente, imprimimos las características principales.

Los bosques aleatorios consideran la contribución promedio de cada característica en todos los árboles de decisión del conjunto. Cuanto mayor sea la importancia, más influyente será la función a la hora de hacer predicciones.

De esta forma, los bosques aleatorios proporcionan una forma sencilla de realizar la selección de características en función de las puntuaciones de importancia.

Ahora comprende la selección de funciones mediante árboles de decisión y bosques aleatorios. En el siguiente video, cubriremos el método de eliminación de características recursivas.

13.3.1 L1-regularized Logistic Regression as Embedded Feature Selection (L13: Feature Selection)
13.3.1 L1-regularized Logistic Regression as Embedded Feature Selection (L13: Feature Selection)
  • 2021.12.13
  • www.youtube.com
Without going into the nitty-gritty details behind logistic regression, this lecture explains how/why we can consider an L1 penalty --- a modification of the...
 

13.3.2 Importancia de las características de árboles de decisión y bosques aleatorios (L13: Selección de características)


13.3.2 Importancia de las características de árboles de decisión y bosques aleatorios (L13: Selección de características)

¡Saludos, televidentes! En nuestro video anterior, comenzamos nuestra discusión sobre los métodos incorporados para la selección de funciones, centrándonos en un ejemplo de regresión logística regularizada. Hoy profundizaremos en otro ejemplo de métodos integrados, a saber, árboles de decisión, y examinaremos cómo seleccionan características en cada nodo. También exploraremos su relación con la importancia de las características de los bosques aleatorios, un concepto con el que quizás ya esté familiarizado. Entonces, ¡entremos de inmediato!

Pero antes de continuar, tengo un pequeño anuncio que hacer. Desafortunadamente, mi lápiz o bolígrafo iPad ya no funciona, así que cambié a usar una tableta digitalizadora. Sin embargo, debo admitir que ha sido un poco más complicado acostumbrarme de lo que esperaba. Podría tomar algunos videos más para sentirme realmente cómodo y competente con él. Además, estoy probando un nuevo software de anotación en pantalla, así que ten paciencia conmigo si hay algún contratiempo. Espero que el proceso de anotación se vuelva más fluido en los próximos videos. Ahora, volvamos a centrarnos en nuestro tema.

Para recapitular, la selección de funciones se puede categorizar ampliamente en tres métodos principales: métodos de filtro, métodos de contenedor y métodos incrustados. En nuestro video anterior, exploramos la regresión logística regularizada L1 o Lasso como un ejemplo de métodos integrados. Hoy, cambiamos nuestra atención a los árboles de decisión y los bosques aleatorios.

Primero, analicemos los árboles de decisión y cómo realizan la selección de funciones. Para ilustrar esto, consideremos un conjunto de datos que hemos examinado previamente. Consta de dos características, x1 y x2, y dos clases: cuadrados (clase 0) y triángulos (clase 1). Nuestro objetivo es clasificar los puntos de datos y podemos visualizar el límite de decisión como una línea divisoria que separa las dos clases. Múltiples límites de decisión pueden lograr esto, como demostraré en breve.

Ahora, echemos un vistazo más de cerca a cómo un árbol de decisiones divide el conjunto de datos. He entrenado un árbol de decisión usando scikit-learn y lo tracé para usted. Este árbol presenta dos divisiones. La primera división se produce en la característica x1 con un valor de corte de 5,5, dividiendo los datos en dos grupos. La segunda división se lleva a cabo en la función x2 con un valor de corte de 10,5, dividiendo aún más los datos. Al realizar estas divisiones, el árbol de decisión clasifica correctamente el conjunto de datos. Podemos evaluar la efectividad de estas divisiones examinando la entropía, que indica el nivel de mezcla o desorden en las clases. Nuestro objetivo es reducir la entropía tanto como sea posible, idealmente alcanzando un valor de cero, lo que significa una clasificación perfecta. En nuestro ejemplo, observamos que la entropía disminuye en cada división, llegando eventualmente a cero.

Lo interesante de notar es que los árboles de decisión realizan inherentemente la selección de características. En cada nodo, el árbol decide qué función usar para la división. Esta decisión se basa en la característica que maximiza la disminución de entropía o maximiza la ganancia de información. En consecuencia, el árbol de decisión selecciona automáticamente las características más informativas para construir el modelo de clasificación.

Ahora, cambiemos nuestro enfoque a bosques aleatorios, que son conjuntos de árboles de decisión. Los bosques aleatorios proporcionan un medio para estimar la importancia de las características. Para demostrar esto, volvamos al conjunto de datos del vino, que comprende 13 características diferentes relacionadas con varias características del vino, como el contenido de alcohol, el ácido málico, la ceniza y más. En el lado derecho, puede ver un gráfico de importancia de características generado por el bosque aleatorio. Las importancias de las funciones van de 0 a 1 y suman 1, lo que representa la importancia relativa de cada función. La trama está ordenada en orden descendente, con la característica más importante a la izquierda.

Para generar este gráfico, utilicé el atributo feature_importances_ de scikit-learn, que calcula la importancia de las características en función del modelo de bosque aleatorio. Como puede observar, la característica más importante de este conjunto de datos es la prolina, seguida de los flavonoides y la intensidad del color.

Los valores de importancia de las características se determinan midiendo la reducción total de la impureza (a menudo medida por la impureza o la entropía de Gini) lograda mediante divisiones en cada característica en todos los árboles de decisión del bosque aleatorio. Las características que consistentemente conducen a una mayor reducción de impurezas se consideran más importantes.

Es importante tener en cuenta que la importancia de la característica es una medida relativa dentro del contexto del modelo de bosque aleatorio. Los valores son específicos del bosque aleatorio que ha entrenado y es posible que no se generalicen a otros modelos o conjuntos de datos. Sin embargo, todavía puede proporcionar información valiosa sobre qué características son más influyentes para hacer predicciones.

Ahora que hemos cubierto los árboles de decisión y los bosques aleatorios, resumamos lo que hemos aprendido hasta ahora. Los árboles de decisión realizan la selección de características implícitamente seleccionando la característica más informativa en cada división, con el objetivo de disminuir la entropía y mejorar la clasificación. Por otro lado, los bosques aleatorios, como un conjunto de árboles de decisión, brindan una medida de la importancia de las características al evaluar la reducción total de impurezas lograda por cada característica en todos los árboles.

Comprender la importancia de las características puede ser beneficioso de varias maneras. Ayuda a identificar las características más relevantes para predecir la variable de destino, permite la reducción de la dimensionalidad al centrarse en las características más informativas y proporciona información sobre las relaciones subyacentes entre las características y la variable de destino.

Ahora, profundicemos en el proceso de evaluación de la importancia de las características en los bosques aleatorios. Exploraremos un método llamado importancia de permutación. Pero antes de hacer eso, revisemos brevemente el muestreo de arranque y el concepto de muestras fuera de la bolsa.

El muestreo de arranque implica el muestreo aleatorio del conjunto de datos original con reemplazo, lo que da como resultado puntos de datos duplicados. Como resultado, algunos ejemplos no se incluyen en la muestra de arranque, creando lo que llamamos muestras listas para usar. Estas muestras sirven como conjuntos de validación o evaluación ya que los árboles no las ven durante el entrenamiento.

Ahora, concentrémonos en el método B, que es la importancia de la permutación. Utiliza las muestras listas para usar que discutimos anteriormente. En primer lugar, podemos evaluar el rendimiento predictivo de los árboles de decisión en el bosque aleatorio durante el entrenamiento. Para cada árbol, se pueden hacer predicciones para las muestras listas para usar, que actúan como puntos de datos de validación o prueba exclusivos para ese árbol.

Para calcular la importancia de la permutación, comenzamos con una matriz de características que contiene los valores de características originales para los ejemplos listos para usar. Para cada árbol de decisión en el bosque aleatorio, permutamos los valores de la característica J en los ejemplos listos para usar. Esto significa que barajamos aleatoriamente los valores de las características mientras mantenemos las etiquetas de clase sin cambios.

A continuación, usamos la matriz de características permutadas para hacer predicciones sobre los ejemplos listos para usar usando el árbol de decisión actual. Recuerde, estas predicciones se basan en los valores de característica permutados, por lo que representan el rendimiento del modelo cuando la característica J es aleatoria.

Comparamos las predicciones permutadas con las predicciones originales para cada ejemplo original y contamos cuántas veces cambia la predicción de clase correcta debido a la permutación de la característica J. Este recuento refleja el impacto de la característica J en la precisión del modelo. Si la característica J es importante, la permutación de sus valores debería conducir a una disminución significativa en la precisión de la predicción.

Repetimos este proceso para cada característica del conjunto de datos, calculando el impacto de cada característica en la precisión del modelo. Cuanto más afecta la permutación de una característica a las predicciones, más importante se considera.

Para cuantificar la importancia de la función, calculamos la disminución de la precisión causada por la permutación de cada función. Esto se hace restando la precisión permutada de la precisión original y promediando esta diferencia sobre todos los árboles de decisión en el bosque aleatorio.

Finalmente, normalizamos los valores de importancia de las características para que sumen uno, proporcionando una medida relativa de importancia entre las características. Esta normalización asegura que los valores de importancia sean comparables e interpretables.

Sin embargo, es esencial tener en cuenta que el método de importancia de permutación tiene algunas limitaciones y consideraciones.

En primer lugar, la importancia de la permutación puede subestimar la importancia de las características correlacionadas. Al permutar una característica, puede generar cambios en las predicciones para otras características correlacionadas. Como resultado, es posible que la importancia de esas características correlacionadas no se refleje con precisión en el gráfico de importancia de características. Es importante tener en cuenta la correlación entre las características al interpretar su importancia.

En segundo lugar, la importancia de la permutación supone que la importancia de la característica se basa únicamente en la precisión predictiva del modelo. Si bien la precisión predictiva es un factor crucial, es posible que no capture todos los aspectos de importancia de las características. Podría haber otras dimensiones de importancia, como la interpretabilidad o la relevancia del conocimiento del dominio de una característica.

A pesar de estas limitaciones, la importancia de la permutación proporciona una valiosa medida cuantitativa de la importancia de las características. Permite a los investigadores y profesionales comprender qué características tienen la mayor influencia en las predicciones del modelo y puede guiar las decisiones relacionadas con la selección de características, la interpretación del modelo y la reducción de la dimensionalidad.

En el próximo video, exploraremos otra categoría de métodos de selección de características llamados métodos de envoltura. Los métodos de contenedor implican la evaluación de diferentes subconjuntos de funciones utilizando un modelo de aprendizaje automático específico. Profundizaremos en la eliminación de funciones recursivas y la selección de funciones hacia adelante/hacia atrás. Estos métodos pueden ser particularmente útiles cuando la cantidad de características es grande y la selección del subconjunto más relevante se vuelve crucial para el rendimiento del modelo.

En resumen, hemos cubierto métodos integrados, específicamente árboles de decisión y bosques aleatorios, como técnicas para la selección de características. Los árboles de decisión realizan la selección de características implícitamente seleccionando la característica más informativa en cada división, con el objetivo de disminuir la entropía y mejorar la clasificación. Los bosques aleatorios, como un conjunto de árboles de decisión, proporcionan una medida de la importancia de las características al evaluar la reducción total de impurezas lograda por cada característica en todos los árboles. También hemos discutido el método de importancia de la permutación, que cuantifica la importancia de las características permutando los valores de las características y midiendo su impacto en la precisión del modelo.

Comprender la importancia de las características permite a los científicos y profesionales de datos tomar decisiones informadas sobre la selección de características, interpretar modelos y obtener información sobre las relaciones subyacentes entre las características y la variable de destino. Es una herramienta valiosa en el conjunto de herramientas de aprendizaje automático que puede contribuir a mejorar el rendimiento y la comprensión del modelo.

En nuestros videos anteriores, hemos cubierto diferentes métodos para la selección de funciones, incluidos métodos de filtro, métodos de envoltura y métodos incrustados. En este video, nos centraremos en los métodos de contenedor, específicamente la eliminación recursiva de funciones (RFE) y la selección de funciones hacia adelante/hacia atrás.

Los métodos de envoltura son técnicas de selección de funciones que implican la evaluación de diferentes subconjuntos de funciones mediante un modelo de aprendizaje automático específico. A diferencia de los métodos de filtro, que se basan en medidas estadísticas, y los métodos integrados, que integran la selección de funciones en el proceso de entrenamiento del modelo, los métodos de envoltura utilizan el rendimiento de un modelo como criterio para seleccionar funciones.

Comencemos hablando de la eliminación recursiva de funciones (RFE). RFE es un enfoque iterativo de selección de características que funciona mediante la eliminación recursiva de características y la creación de modelos sobre las características restantes. Comienza entrenando un modelo en el conjunto completo de funciones y clasifica las funciones según su importancia. Luego, elimina las funciones menos importantes y repite el proceso con las funciones restantes. Este proceso iterativo continúa hasta que se alcanza un número específico de funciones o se alcanza un umbral de rendimiento predefinido.

La idea detrás de RFE es que, al eliminar recursivamente las características menos importantes, se centra en las características más informativas que contribuyen más al rendimiento del modelo. RFE se puede usar con cualquier modelo de aprendizaje automático que proporcione una medida de la importancia de las características o el peso de las características. Los modelos populares utilizados con RFE incluyen regresión logística, máquinas de vectores de soporte y bosques aleatorios.

Ahora, pasemos a la selección de funciones hacia adelante/hacia atrás. Estos son dos métodos de envoltorio relacionados que buscan un subconjunto óptimo de características agregando o eliminando iterativamente características en función de su contribución al rendimiento del modelo.

La selección de funciones hacia adelante comienza con un conjunto de funciones vacío y agrega iterativamente una función a la vez. En cada iteración, evalúa el rendimiento del modelo mediante validación cruzada u otra métrica de evaluación y selecciona la característica que mejore el rendimiento al máximo. El proceso continúa hasta que se cumple un criterio de detención predefinido, como alcanzar una cantidad deseada de funciones o una meseta en la mejora del rendimiento.

La selección de funciones hacia atrás, por otro lado, comienza con el conjunto completo de funciones y elimina iterativamente una función a la vez. En cada iteración, evalúa el rendimiento del modelo y elimina la característica que tiene el menor impacto en el rendimiento. El proceso continúa hasta que se cumple un criterio de parada.

Tanto la selección de funciones hacia adelante como hacia atrás puede ser computacionalmente costosa, especialmente cuando se trata de una gran cantidad de funciones. Para mitigar esto, se pueden emplear varias estrategias, como el uso de heurísticas o aproximaciones para acelerar el proceso de búsqueda.

Vale la pena señalar que los métodos de contenedor, incluidos RFE, selección hacia adelante y selección hacia atrás, pueden ser sensibles a la elección de la métrica de evaluación y el modelo de aprendizaje automático utilizado. Diferentes métricas de evaluación pueden conducir a diferentes subconjuntos de funciones seleccionadas, y el rendimiento de las funciones seleccionadas puede variar entre diferentes modelos.

En la práctica, se recomienda realizar una validación cruzada o utilizar un conjunto de validación externo para obtener una estimación robusta del rendimiento del modelo con diferentes subconjuntos de características. Esto ayuda a evitar el sobreajuste y seleccionar las características que se generalizan bien a los datos no vistos.

Para resumir, los métodos de contenedor, como la eliminación recursiva de características (RFE), la selección de características hacia adelante y la selección de características hacia atrás, son técnicas iterativas para la selección de características que evalúan diferentes subconjuntos de características en función del rendimiento de un modelo. Estos métodos pueden ayudar a identificar las características más relevantes para una tarea específica de aprendizaje automático, mejorar la interpretabilidad del modelo y reducir la dimensionalidad del espacio de características.

En el próximo video, exploraremos otras técnicas avanzadas para la selección de características, incluidos los algoritmos genéticos y el análisis de componentes principales (PCA). Estos métodos ofrecen opciones adicionales para seleccionar características basadas en diferentes principios de optimización y técnicas estadísticas. ¡Estén atentos para eso!

La selección de características es un paso crítico en la tubería de aprendizaje automático, y la elección del método de selección de características correcto depende del conjunto de datos específico, la tarea de aprendizaje automático y las compensaciones deseadas entre el rendimiento del modelo, la interpretabilidad y la eficiencia computacional.

13.3.2 Decision Trees & Random Forest Feature Importance (L13: Feature Selection)
13.3.2 Decision Trees & Random Forest Feature Importance (L13: Feature Selection)
  • 2021.12.22
  • www.youtube.com
This video explains how decision trees training can be regarded as an embedded method for feature selection. Then, we will also look at random forest feature...
 

13.4.1 Eliminación de características recursivas (L13: Selección de características)


13.4.1 Eliminación de características recursivas (L13: Selección de características)

En esta sección, exploraremos el tema de los métodos Wrapper para la selección de características, basándonos en nuestras discusiones anteriores sobre métodos de filtro y métodos incrustados. Los métodos de envoltorio emplean modelos explícitamente para seleccionar características. Un ejemplo popular de un método contenedor es la eliminación recursiva de funciones (RFE), en la que nos centraremos en este video. Además, también profundizaremos en otros métodos de selección de características utilizando técnicas de envoltorio en los próximos videos.

Para proporcionar una descripción general, existen tres métodos principales para la selección de funciones: métodos de filtro, métodos incrustados y métodos de envoltorio. Hoy, nuestro enfoque está en los métodos de envoltura. La idea central detrás de RFE se puede resumir en tres pasos.

Primero, ajustamos un modelo al conjunto de datos, generalmente usando modelos lineales como la regresión lineal o la regresión logística. Este paso no es nada fuera de lo común.

A continuación, examinamos el modelo y observamos específicamente los coeficientes del modelo, que analizaremos con más detalle en breve. Con base en las magnitudes de estos coeficientes, eliminamos la característica con el coeficiente más pequeño. Al considerar la característica con el coeficiente más pequeño como la menos importante, podemos eliminarla de futuras consideraciones. Vale la pena señalar que la normalización o estandarización de las funciones es importante para este proceso, lo que garantiza que estén en una escala comparable. Veremos ejemplos concretos de esto más adelante.

El paso final es repetir los pasos uno y dos hasta llegar al número deseado de características. En esencia, ajustamos continuamente el modelo y eliminamos la característica menos importante hasta que tengamos el conjunto deseado de características. Este método simple pero efectivo proporciona un enfoque sencillo para la selección de funciones.

Un aspecto crítico de la eliminación de características recursivas radica en la eliminación de los coeficientes o pesos del modelo. Para ilustrar esto, consideremos modelos de regresión lineal y de regresión logística. La regresión lineal se usa para modelar objetivos continuos, mientras que la regresión logística es un clasificador para etiquetas discretas o categóricas. No profundizaremos en los detalles de estos modelos aquí, ya que se han cubierto en conferencias anteriores.

Tanto en la regresión lineal como en la logística, los modelos tienen coeficientes o pesos. En la regresión lineal, estos pesos representan las pendientes, mientras que en la regresión logística están asociados con la influencia de cada característica en el resultado de la clasificación. Al examinar las magnitudes de estos pesos, podemos determinar la importancia de cada característica. Eliminar la característica con el menor peso o coeficiente lo elimina efectivamente de la consideración. Alternativamente, establecer el peso en cero logra el mismo resultado, ya que el cálculo de la suma ponderada excluye la contribución de la característica.

Para comprender mejor cómo funciona la eliminación de características, analicemos un ejemplo utilizando la regresión logística. Tenemos un problema de clasificación binaria con dos características, x1 y x2, y queremos determinar la probabilidad de pertenencia a la clase. Al calcular una suma ponderada usando los valores de las características y los pesos del modelo, obtenemos la entrada neta. Aplicando una función sigmoidea logística a la entrada neta, derivamos la probabilidad de pertenencia a la clase. Comparar esta probabilidad con un umbral, normalmente 0,5, nos permite asignar etiquetas de clase.

La conclusión clave es que los pesos en estos modelos reflejan la importancia de cada característica. Los pesos más grandes indican una mayor importancia, ya que contribuyen de manera más significativa a la entrada neta y, posteriormente, afectan el resultado de la clasificación. Estandarizar o normalizar los pesos asegura que estén en la misma escala, lo que facilita una mejor interpretación de su importancia.

Continuando, exploremos un ejemplo del uso de la eliminación recursiva de funciones en scikit-learn con el conjunto de datos de vino. El código presentado aquí demuestra el proceso. Primero preparamos el conjunto de datos dividiéndolo en conjuntos de entrenamiento y prueba, y luego estandarizamos las características. Luego, instanciamos un objeto RFE de la clase RFE en scikit-learn. Pasamos un estimador de regresión logística al objeto RFE y especificamos el número deseado de características para seleccionar (por ejemplo, 5 en este caso).

Una vez que hemos instanciado el objeto RFE, podemos ajustarlo a nuestros datos de entrenamiento usando el método de ajuste. Esto iniciará el proceso de eliminación de características recursivas. El objeto RFE entrenará el modelo de regresión logística en los datos de entrenamiento y luego eliminará la característica con el coeficiente más pequeño. Repetirá este proceso iterativamente hasta que se alcance el número deseado de características.

Después de ajustar el objeto RFE, podemos acceder a las características seleccionadas utilizando el atributo support_. Este atributo devuelve una máscara booleana que indica qué características se seleccionaron. También podemos obtener el ranking de las características en función de su importancia utilizando el atributo ranking_. Cuanto más bajo sea el rango, más importante será la característica.

En el siguiente paso, podemos transformar nuestros datos de entrenamiento y datos de prueba originales para incluir solo las características seleccionadas utilizando el método de transformación del objeto RFE. Esto creará nuevos conjuntos de funciones solo con las funciones seleccionadas.

Finalmente, podemos entrenar un modelo de regresión logística en los datos de entrenamiento transformados y evaluar su rendimiento en los datos de prueba transformados. Esto nos permitirá evaluar la efectividad del proceso de selección de características y determinar si mejoró la precisión predictiva del modelo.

Vale la pena señalar que la cantidad de funciones para seleccionar y el tamaño del paso son hiperparámetros que se pueden ajustar para encontrar la configuración óptima para un conjunto de datos y un modelo específicos. Se pueden emplear la búsqueda en cuadrícula u otras técnicas de optimización de hiperparámetros para encontrar la mejor combinación de estos parámetros.

En general, la eliminación recursiva de funciones es un método envolvente para la selección de funciones que se basa en entrenar un modelo y eliminar iterativamente las funciones menos importantes. Se puede aplicar tanto a problemas de regresión como de clasificación y se puede utilizar con diferentes tipos de modelos. La selección de características se basa en los coeficientes o pesos asignados a las características por el modelo. Al eliminar iterativamente las características menos importantes, RFE tiene como objetivo mejorar el rendimiento del modelo centrándose en las características más informativas.

13.4.1 Recursive Feature Elimination (L13: Feature Selection)
13.4.1 Recursive Feature Elimination (L13: Feature Selection)
  • 2021.12.27
  • www.youtube.com
In this video, we start our discussion of wrapper methods for feature selection. In particular, we cover Recursive Feature Elimination (RFE) and see how we c...
 

13.4.2 Importancia de la permutación de características (L13: Selección de características)


13.4.2 Importancia de la permutación de características (L13: Selección de características)

Bienvenidos a este video donde profundizaremos en el tema de la importancia de la permutación. La importancia de la permutación es parte de los métodos de envoltura para la selección de funciones, que analizamos brevemente en el video anterior. Los métodos de envoltura implican el uso de un modelo para realizar la selección de características o estimar la importancia de las características. En una lección anterior, exploramos la eliminación recursiva de características como un ejemplo de un método contenedor. Ahora, cambiaremos nuestro enfoque a la importancia de la permutación. En próximos videos, también exploraremos otro método llamado selección secuencial de características.

Antes de profundizar en los detalles esenciales de cómo funciona la importancia de la permutación, permítame brindarle una descripción general concisa del método. En esencia, la importancia de la permutación implica barajar cada columna de características en un conjunto de datos. Luego, usando un modelo ya entrenado, evaluamos el rendimiento del modelo en el conjunto de datos mezclado y lo comparamos con el rendimiento original. Por lo general, observamos una caída en el rendimiento cuando se baraja una columna de características. Esta caída en el rendimiento sirve como indicador de la importancia de la función. Por supuesto, resumir el método en solo dos pasos puede parecer un poco complicado, por lo que en las próximas diapositivas lo guiaré a través del proceso de una manera más detallada y más lenta.

Al aplicar la importancia de la permutación a cada columna del conjunto de datos, podemos generar un gráfico de barras que ilustre la importancia de cada característica. Además, podemos incluir opcionalmente la desviación estándar de los valores de importancia en el gráfico. En el próximo video, proporcionaré un ejemplo de código sobre cómo crear una trama de este tipo.

Ahora, antes de profundizar en la explicación detallada de la importancia de la permutación y el algoritmo detrás de ella, repasemos algunos hechos notables. La importancia de la permutación a menudo produce resultados similares a la importancia de la característica del bosque aleatorio basada en la impureza. Sin embargo, la ventaja de la importancia de la permutación es que es independiente del modelo, lo que significa que se puede usar con cualquier tipo de algoritmo o modelo de aprendizaje automático. Es importante tener en cuenta que, si bien la importancia de la permutación no es estrictamente un método de selección de características, proporciona información sobre las características en las que más se basa un modelo. En consecuencia, podemos utilizar medidas de importancia de características como base para seleccionar características.

Si recuerda nuestra discusión anterior sobre la importancia de la característica del bosque aleatorio, puede pensar en la importancia de la permutación como una generalización de uno de los métodos, específicamente el Método B, en ese video. Sin embargo, en lugar de usar muestras listas para usar, la importancia de la permutación emplea el conjunto reservado. Si necesita un repaso de los ejemplos listos para usar, no dude en volver a ver el video anterior.

Ahora, profundicemos en el algoritmo paso a paso de la importancia de la permutación. Primero, comenzamos con un modelo que se ha ajustado al conjunto de entrenamiento. Este modelo puede ser cualquier modelo o algoritmo de aprendizaje automático. Como ejemplo, consideremos un clasificador de bosque aleatorio. Entrenamos el bosque aleatorio en el conjunto de entrenamiento, que es un paso estándar.

A continuación, estimamos el rendimiento predictivo del modelo en un conjunto de datos independiente, como el conjunto de validación o el conjunto de prueba. Registramos este desempeño como el desempeño de referencia. Por ejemplo, supongamos que logramos una precisión del 99 % en el conjunto de validación utilizando nuestro modelo de bosque aleatorio ajustado. Consideramos esto como el rendimiento de referencia.

Para cada columna de características en el conjunto de datos, mezclamos aleatoriamente esa columna específica mientras mantenemos las otras columnas y etiquetas de clase sin cambios. Este proceso de barajado se ilustra con un conjunto de datos de ejemplo. Supongamos que tenemos un conjunto de datos con tres columnas de características y cuatro ejemplos de entrenamiento. Nos enfocamos en barajar la columna uno, representada por un color diferente en el ejemplo. Después de barajar, cambia el orden de los valores en esa columna. Permutamos aleatoriamente los valores manteniendo los valores originales en las columnas dos y tres.

Otra ventaja de la importancia de la permutación es que puede manejar bien las características correlacionadas. Dado que evalúa la importancia de cada característica individualmente mezclando sus valores, captura la contribución única de cada característica al rendimiento del modelo, independientemente de las correlaciones con otras características. Esto es particularmente útil en escenarios donde hay conjuntos de datos de alta dimensión con características interrelacionadas.

La importancia de la permutación también proporciona una medida de la importancia de la característica que es más confiable que la importancia de la característica inherente proporcionada por algunos modelos. Por ejemplo, en árboles de decisión o bosques aleatorios, la importancia de una característica se basa en la reducción de impurezas que logra al dividir los datos. Sin embargo, esta medida puede estar sesgada hacia entidades con muchas divisiones posibles o aquellas que aparecen más arriba en la estructura de árbol. La importancia de la permutación proporciona una estimación más directa e imparcial de la importancia de la característica al evaluar directamente el impacto de barajar cada característica.

En el lado negativo, la importancia de la permutación puede ser computacionalmente costosa, especialmente si el proceso de entrenamiento del modelo lleva mucho tiempo o si hay una gran cantidad de funciones. Dado que el proceso de permutación requiere volver a evaluar el rendimiento del modelo varias veces, puede agregar una sobrecarga significativa. Sin embargo, existen técnicas de optimización y estrategias de paralelización que pueden ayudar a mitigar este problema, como el uso de computación paralela o la reducción del número de permutaciones.

Vale la pena señalar que la importancia de la permutación no es una bala de plata para la selección de funciones o la interpretación del modelo. Si bien proporciona información valiosa sobre la importancia de las características individuales, debe usarse junto con otras técnicas y conocimientos de dominio. La importancia de la característica por sí sola no garantiza el poder predictivo o la relevancia de una característica. Es fundamental considerar el contexto, el problema específico y las limitaciones del modelo.

En resumen, la importancia de la permutación es un método poderoso e independiente del modelo para evaluar la importancia de las características en un modelo de aprendizaje automático. Al mezclar los valores de las características y comparar el rendimiento del modelo antes y después de la combinación, proporciona una medida confiable de la importancia de las características. Es fácil de entender, maneja bien las características correlacionadas y no es susceptible de sobreajuste. Sin embargo, puede ser computacionalmente costoso y debe usarse junto con otras técnicas para la selección integral de características y la interpretación del modelo.

13.4.2 Feature Permutation Importance (L13: Feature Selection)
13.4.2 Feature Permutation Importance (L13: Feature Selection)
  • 2021.12.29
  • www.youtube.com
This video introduces permutation importance, which is a model-agnostic, versatile way for computing the importance of features based on a machine learning c...
 

13.4.3 Ejemplos de códigos de importancia de permutación de características (L13: Selección de características)


13.4.3 Ejemplos de códigos de importancia de permutación de características (L13: Selección de características)

Muy bien, ahora que hemos cubierto la introducción básica a la importancia de la permutación, echemos un vistazo a algunos ejemplos de código para ver cómo podemos usar la importancia de la permutación en la práctica. Sí, y como siempre, también tengo los ejemplos de código en Jupyter Notebooks vinculados debajo del video. Y también, a diferencia de siempre, volveremos a trabajar con un conjunto de datos de viento, solo para simplificar las cosas.

Entonces, el conjunto de datos de viento, nuevamente, es un conjunto de datos que consta de 13 columnas. Y aquí hay una descripción general de cómo se ven las primeras cinco filas. Así que hay tres clases, Clase Uno, Dos y Tres. Y hay 13 columnas, pero no todas las columnas se muestran aquí debido a limitaciones de espacio. Pero sí, no discutiremos este conjunto de datos de viento con demasiado detalle porque lo hemos visto muchas veces antes.

Sí, y luego también, como siempre, dividiremos el conjunto de datos en un conjunto de entrenamiento y otro de prueba. Aquí, lo que estamos haciendo es tomar el conjunto de datos, excepto la primera columna, que es la columna de la etiqueta. Por lo tanto, dividiremos el conjunto de datos en un conjunto de entrenamiento y uno de prueba donde el 30 % de los datos se usará para probar y el 70 % se usará para el entrenamiento correspondiente. Observe aquí que no estamos creando ningún conjunto de validación. Así que es solo mi opinión personal. Pero no creo que necesitemos necesariamente un conjunto de validación si calculamos el rendimiento de la permutación porque sí, por lo general debemos mantener nuestro conjunto de prueba independiente. Pero si recuerda cómo funciona el rendimiento de la permutación, según el video anterior, aquí solo estamos observando la caída del rendimiento cuando permutamos una columna de características. Por lo tanto, en realidad no estamos volviendo a calcular la precisión de la prueba, solo estamos usando el conjunto de prueba para ver cuánto caerá el rendimiento si barajamos una columna.

Sí, todavía estamos en la etapa de configuración aquí. Aquí, en esta diapositiva, estamos preparando nuestro modelo. Y de hecho, aquí es un clasificador de bosque aleatorio. Entonces, en el video anterior, aprendimos que la importancia de la permutación es un método independiente del modelo. Eso significa que podemos calcular eso para cualquier tipo de modelo. Sin embargo, estamos usando aquí un bosque aleatorio para que luego podamos comparar la importancia de la permutación con el rendimiento basado en impurezas del bosque aleatorio, lo que podría ser una comparación interesante. Así que aquí estamos configurando un clasificador de bosque aleatorio con 100 árboles. Y lo estamos adaptando al conjunto de entrenamiento. Y aquí está solo el cálculo de precisión. Y podemos ver que la precisión del entrenamiento es del 100 % y la precisión de la prueba también es del 100 %, lo que indica que en realidad es un modelo bastante bueno, o también puede indicar que el conjunto de datos es bastante fácil de clasificar.

Una cosa que quería señalar aquí también es que cuando calculamos la importancia de la permutación, es importante tener un modelo que funcione muy bien si queremos interpretar la importancia de la característica como una importancia general de la característica. Porque si no tenemos un modelo que funcione bien, podríamos averiguar en qué características se basa más el modelo, pero en realidad no nos dice, digamos, qué tan importante es la característica en el contexto de la variable de destino. si el modelo no es muy preciso. Entonces, antes de ver la importancia de la permutación, solo como referencia, nuevamente aquí está la importancia basada en la impureza. Entonces, esta es la importancia basada en la impureza del bosque aleatorio que ya hemos discutido en un video anterior. Nuevamente, esto es solo para referencia, donde accedemos a este atributo de importancia de característica después de ajustar el modelo.

Luego, estamos aplicando arg_sort, de modo que obtenemos el orden de clasificación de los valores de importancia de mayor a menor. Así, de mayor a menor. Y luego, lo que estamos haciendo es crear un gráfico de barras para visualizar la importancia basada en impurezas. El gráfico de barras mostrará los nombres de las características en el eje x y los valores de importancia correspondientes en el eje y. Al clasificar los valores de importancia en orden descendente, las características más importantes se trazarán primero.

A continuación, el código pasa a calcular la importancia de la permutación. La importancia de la permutación se calcula mezclando aleatoriamente los valores de cada característica en el conjunto de prueba y midiendo la caída en el rendimiento del modelo. Cuanto mayor sea la caída en el rendimiento, más importante se considera que es la función. El código usa un bucle for para iterar sobre cada característica en el conjunto de datos.

Dentro del ciclo, los valores de características en el conjunto de prueba se barajan usando np.random.permutation(). Luego, el conjunto de prueba barajado se pasa a través del clasificador de bosque aleatorio entrenado para obtener las etiquetas predichas. La precisión del modelo en el conjunto de prueba barajado se calcula utilizando la función precision_score(). La diferencia entre la precisión de la prueba original y la precisión de la prueba aleatoria representa la caída en el rendimiento causada por la permutación de la función.

La caída en el rendimiento de cada característica se almacena en una lista llamada important_vals. Después de iterar sobre todas las funciones, la lista important_vals contiene la caída en los valores de rendimiento para cada función.

Finalmente, se crea un gráfico de barras para visualizar la importancia de la permutación. Los nombres de las características se trazan en el eje x y la caída correspondiente en los valores de rendimiento se trazan en el eje y. Una vez más, los valores de importancia se clasifican en orden descendente para resaltar las características más importantes.

Este código proporciona una comparación entre la importancia basada en la impureza y la importancia de la permutación. Al comparar los dos gráficos, puede observar si existen diferencias en la clasificación de la importancia de las características entre los dos métodos.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Create a random forest classifier
clf = RandomForestClassifier(n_estimators= 100 , random_state= 42 )
clf.fit(X, y)

# Compute impurity-based feature importances
importances = clf.feature_importances_

# Plot impurity-based feature importances
plt.figure(figsize=( 8 , 6 ))
plt.bar(range(X.shape[ 1 ]), importances, align= 'center' )
plt.xticks(range(X.shape[ 1 ]), iris.feature_names, rotation= 90 )
plt.xlabel( 'Features' )
plt.ylabel( 'Importance' )
plt.title( 'Impurity-based Feature Importances' )
plt.show()

# Compute permutation importances
importance_vals = []
for feature in range(X.shape[ 1 ]):
    X_permuted = X.copy()
    np.random.shuffle(X_permuted[:, feature])
    y_pred = clf.predict(X_permuted)
    accuracy = accuracy_score(y, y_pred)
    drop_in_performance = accuracy_score(y, y_pred) - accuracy
    importance_vals.append(drop_in_performance)

# Plot permutation importances
plt.figure(figsize=( 8 , 6 ))
plt.bar(range(X.shape[ 1 ]), importance_vals, align= 'center' )
plt.xticks(range(X.shape[ 1 ]), iris.feature_names, rotation= 90 )
plt.xlabel( 'Features' )
plt.ylabel( 'Drop in Performance' )
plt.title( 'Permutation Importances' )
plt.show()
Este código creará dos diagramas de barras uno al lado del otro. El primer gráfico mostrará la importancia de las características basadas en impurezas, y el segundo gráfico mostrará la importancia de las permutaciones. Al examinar estos gráficos, puede obtener información sobre la importancia relativa de las diferentes características en el conjunto de datos de Iris de acuerdo con estos dos métodos.

Asegúrese de importar las bibliotecas necesarias, como matplotlib, numpy, sklearn.ensemble.RandomForestClassifier, sklearn.datasets.load_iris y sklearn.metrics.accuracy_score.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.inspection import permutation_importance
from sklearn.model_selection import train_test_split

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2 , random_state= 42 )

# Create a random forest classifier
clf = RandomForestClassifier(n_estimators= 100 , random_state= 42 )
clf.fit(X_train, y_train)

# Perform permutation importances
result = permutation_importance(clf, X_test, y_test, n_repeats= 10 , random_state= 42 , n_jobs=- 1 )

# Get the feature importances and their indices
importances = result.importances_mean
indices = np.argsort(importances)

# Plot permutation importances
plt.figure(figsize=( 8 , 6 ))
plt.barh(range(X.shape[ 1 ]), importances[indices], align= 'center' )
plt.yticks(range(X.shape[ 1 ]), iris.feature_names[indices])
plt.xlabel( 'Importance' )
plt.ylabel( 'Features' )
plt.title( 'Permutation Importances' )
plt.show()
En este código, usamos la función permutation_importance del módulo sklearn.inspection para calcular la importancia de las permutaciones. El conjunto de datos se divide en conjuntos de entrenamiento y prueba mediante train_test_split. Luego ajustamos un clasificador de bosque aleatorio en los datos de entrenamiento y calculamos la importancia de la permutación utilizando los datos de prueba.

Las importancias de permutación resultantes se almacenan en la variable de importancias. Usamos np.argsort para obtener los índices que ordenarían las importancias en orden ascendente. Esto ayuda a trazar las importancias en el orden correcto.

Finalmente, creamos un diagrama de barra horizontal usando plt.barh para mostrar la importancia de las permutaciones. El eje y representa las características, mientras que el eje x representa los valores de importancia. Las funciones plt.xlabel, plt.ylabel y plt.title se utilizan para agregar etiquetas y un título al gráfico.

Asegúrese de importar las bibliotecas necesarias, como matplotlib, numpy, sklearn.ensemble.RandomForestClassifier, sklearn.datasets.load_iris, sklearn.inspection.permutation_importance y sklearn.model_selection.train_test_split.

import matplotlib.pyplot as plt
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.inspection import permutation_importance
from sklearn.model_selection import train_test_split

# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2 , random_state= 42 )

# Create a random forest classifier
clf = RandomForestClassifier(n_estimators= 100 , random_state= 42 )
clf.fit(X_train, y_train)

# Perform permutation importances
result = permutation_importance(clf, X_test, y_test, n_repeats= 10 , random_state= 42 , n_jobs=- 1 )

# Get the feature importances and their indices
importances = result.importances_mean
indices = np.argsort(importances)

# Plot permutation importances
plt.figure(figsize=( 8 , 6 ))
plt.barh(range(X.shape[ 1 ]), importances[indices], align= 'center' )
plt.yticks(range(X.shape[ 1 ]), iris.feature_names[indices])
plt.xlabel( 'Importance' )
plt.ylabel( 'Features' )
plt.title( 'Permutation Importances' )
plt.show()
En este código, usamos la función permutation_importance del módulo sklearn.inspection para calcular la importancia de las permutaciones. El conjunto de datos se divide en conjuntos de entrenamiento y prueba mediante train_test_split. Luego ajustamos un clasificador de bosque aleatorio en los datos de entrenamiento y calculamos la importancia de la permutación utilizando los datos de prueba.

Las importancias de permutación resultantes se almacenan en la variable de importancias. Usamos np.argsort para obtener los índices que ordenarían las importancias en orden ascendente. Esto ayuda a trazar las importancias en el orden correcto.

Finalmente, creamos un diagrama de barra horizontal usando plt.barh para mostrar la importancia de las permutaciones. El eje y representa las características, mientras que el eje x representa los valores de importancia. Las funciones plt.xlabel, plt.ylabel y plt.title se utilizan para agregar etiquetas y un título al gráfico.

Asegúrese de importar las bibliotecas necesarias, como matplotlib, numpy, sklearn.ensemble.RandomForestClassifier, sklearn.datasets.load_iris, sklearn.inspection.permutation_importance y sklearn.model_selection.train_test_split.

13.4.3 Feature Permutation Importance Code Examples (L13: Feature Selection)
13.4.3 Feature Permutation Importance Code Examples (L13: Feature Selection)
  • 2021.12.30
  • www.youtube.com
This video shows code examples for computing permutation importance in mlxtend and scikit-learn. Permutation importance is a model-agnostic, versatile way fo...
 

13.4.4 Selección secuencial de funciones (L13: Selección de funciones)


13.4.4 Selección secuencial de funciones (L13: Selección de funciones)

En los videos anteriores, introduje el concepto de importancia de las características utilizando la importancia de la permutación como mi técnica favorita. En este video, quiero hablar sobre otra técnica importante llamada selección secuencial de características, que también forma parte de los métodos de envoltorio de los que hablamos anteriormente.

Antes de sumergirnos en la selección secuencial de funciones, recapitulemos brevemente los diferentes tipos de métodos de selección de funciones que hemos discutido hasta ahora. Comenzamos con métodos de filtro, luego pasamos a métodos incrustados como la eliminación recursiva de funciones y ahora nos estamos enfocando en métodos de envoltorio.

Los métodos de envoltura tienen como objetivo encontrar un subconjunto de características óptimo probando todas las combinaciones de características posibles. Este enfoque se conoce como selección exhaustiva de características. Para comprender cómo funciona, consideremos el ejemplo del conjunto de datos Iris, que tiene cuatro características: longitud del sépalo, anchura del sépalo, longitud del pétalo y anchura del pétalo. Para encontrar la mejor combinación de funciones para nuestro modelo, necesitaríamos probar todos los subconjuntos posibles, desde funciones individuales hasta el conjunto completo de funciones.

Para el conjunto de datos de Iris, esto daría como resultado 15 combinaciones posibles, incluidos subconjuntos de una, dos, tres y cuatro características. Sin embargo, la selección exhaustiva de características puede ser computacionalmente costosa y propensa al sobreajuste. Para mitigar estos problemas, podemos usar un conjunto de validación o una validación cruzada de K-fold para evaluar el rendimiento de diferentes subconjuntos de funciones.

A pesar de su simplicidad, la selección exhaustiva de funciones tiene una limitación cuando se aplica a conjuntos de datos con una gran cantidad de funciones. La cantidad de posibles subconjuntos de características crece exponencialmente con la cantidad de características, lo que lo hace poco práctico para grandes conjuntos de datos. Esta limitación motiva el uso de la selección secuencial de funciones, que es una técnica de aproximación que explora un subconjunto de combinaciones de funciones en lugar de evaluar todas las combinaciones posibles.

La selección secuencial de funciones es un proceso iterativo que comienza con el conjunto de funciones original y selecciona o elimina funciones gradualmente en función de su rendimiento. Un enfoque popular es la selección secuencial hacia atrás, donde comenzamos con el conjunto completo de funciones y eliminamos iterativamente una función a la vez. En cada iteración, evaluamos el rendimiento de las funciones restantes y seleccionamos el subconjunto con el rendimiento más alto. Este proceso continúa hasta que tengamos un subconjunto con una sola característica restante.

El algoritmo de selección secuencial hacia atrás se puede resumir de la siguiente manera:

  1. Comience con el conjunto de funciones original.
  2. Genere todos los subconjuntos de funciones posibles de tamaño n-1 eliminando una función a la vez.
  3. Evaluar el rendimiento de cada subconjunto candidato.
  4. Seleccione el subconjunto con el rendimiento más alto y elimine permanentemente la característica que está ausente de este subconjunto.
  5. Repita los pasos 2 a 4 hasta alcanzar el tamaño de función deseado (p. ej., solo queda una función).

Repitiendo los pasos 2 a 4, reducimos gradualmente el conjunto de funciones hasta llegar al subconjunto óptimo. El subconjunto final se selecciona en función de la puntuación de evaluación más alta y, en caso de empate, se prefiere el subconjunto más pequeño para la eficiencia computacional. El número de iteraciones en la selección secuencial hacia atrás es igual al número de características menos uno.

La selección secuencial directa es otra variación de la selección secuencial de funciones. En lugar de eliminar funciones, la selección de avance secuencial comienza con un conjunto de funciones vacío y agrega gradualmente una función a la vez. El proceso implica entrenar a un clasificador en cada característica individual y evaluar su desempeño. La función con el rendimiento más alto se selecciona y se agrega al subconjunto. Este proceso continúa hasta que se alcanza el número máximo de entidades.

En resumen, la selección secuencial de características es una técnica útil para encontrar un subconjunto óptimo de características. Ofrece un equilibrio entre la eficiencia computacional y la búsqueda de una buena combinación de características. La selección secuencial hacia atrás y la selección secuencial hacia adelante son dos variaciones comunes de la selección secuencial de características, cada una con sus propias ventajas y casos de uso. En el próximo video, exploraremos cómo implementar la selección secuencial de funciones mediante programación y abordaremos las limitaciones de la selección exhaustiva de funciones.

13.4.4 Sequential Feature Selection (L13: Feature Selection)
13.4.4 Sequential Feature Selection (L13: Feature Selection)
  • 2022.01.05
  • www.youtube.com
This video explains how sequential feature selection works. Sequential feature selection is a wrapper method for feature selection that uses the performance ...
 

13.4.5 Selección secuencial de funciones -- Ejemplos de códigos (L13: Selección de funciones)


13.4.5 Selección secuencial de funciones -- Ejemplos de códigos (L13: Selección de funciones)

Bien, es hora de concluir nuestra discusión sobre la selección de funciones. En este video, demostraré cómo usar la selección secuencial de características en Python. Comenzaré mostrándole un ejemplo usando la biblioteca MLxtend, que es la implementación original que desarrollé hace varios años. Más adelante, también demostraré cómo lograr los mismos resultados con scikit-learn, que ofrece una implementación más optimizada.

Antes de sumergirnos en el código, lo animo a consultar la documentación, que contiene ejemplos adicionales que no cubriré en este video para evitar que sea demasiado largo y abrumador. Siempre es útil consultar la documentación para obtener información más detallada.

Primero, comencemos cargando el complemento de "marca de agua" que desarrollé para rastrear las versiones de mis computadoras portátiles y bibliotecas de software a lo largo de los años. Es una buena práctica asegurarse de que los números de versión coincidan con nuestras expectativas, especialmente si algunas opciones ya no funcionan debido a discrepancias en la versión. También usaremos la biblioteca matplotlib más adelante, así que importémosla para asegurarnos de que los gráficos se muestren correctamente en el cuaderno.

Ahora, pasemos a preparar el conjunto de datos para la selección de características. Como en videos anteriores, usaremos el conjunto de datos del vino. Cargamos el conjunto de datos del repositorio de conjuntos de datos de aprendizaje automático de UCI usando Pandas. Después de cargar el conjunto de datos, imprimimos información básica para asegurarnos de que todo se haya cargado correctamente. También es importante verificar que las etiquetas de clase se representen como números enteros.

A continuación, dividimos el conjunto de datos en conjuntos de entrenamiento y de prueba, como lo hemos hecho en videos anteriores. Además, estandarizamos el conjunto de datos porque usaremos un clasificador de vecino más cercano K, que es sensible a la escala de características. Dividimos el conjunto de datos en un conjunto de entrenamiento del 80 % y un conjunto de prueba del 20 %, y estandarizamos ambos conjuntos.

Para establecer una línea de base antes de la selección de características, ajustamos un clasificador de vecino más cercano K en el conjunto de datos estandarizado y calculamos las precisiones de entrenamiento y prueba. En este ejemplo, elegimos arbitrariamente cinco vecinos para el clasificador, pero este parámetro podría estar sujeto a la búsqueda de cuadrícula para un rendimiento óptimo. Aunque no realizaremos una búsqueda en cuadrícula aquí para simplificar el código y el video, combinar la búsqueda en cuadrícula con la selección secuencial de características es un enfoque común. Puede encontrar ejemplos de esto en la documentación.

Los resultados de referencia muestran que logramos una precisión del 98,6 % en el conjunto de entrenamiento y una precisión del 94 % en el conjunto de prueba. El rendimiento es bastante bueno utilizando las 13 características del conjunto de datos de vinos. Sin embargo, puede haber algo de sobreajuste debido a la maldición de la dimensionalidad asociada con los clasificadores de K vecinos más cercanos. Para mitigar esto, podemos seleccionar un subconjunto más pequeño de funciones para mejorar potencialmente el rendimiento.

Ahora, demostremos cómo usar la selección secuencial de funciones para seleccionar un subconjunto de cinco funciones. Importamos la clase SequentialFeatureSelector de la biblioteca MLxtend y acortamos el nombre de importación a sfs para mayor comodidad. Esta clase toma el modelo, el tamaño del subconjunto de características deseado y la dirección de selección (hacia delante, hacia atrás, flotante) como entrada. Establecemos la dirección de reenvío para la selección de reenvío secuencial. El parámetro detallado nos permite controlar la cantidad de salida que se muestra durante el entrenamiento, lo que puede ser útil para monitorear el progreso. Especificamos la métrica de puntuación como precisión y usamos una validación cruzada de 5 veces para evaluar los subconjuntos de características. El procesamiento paralelo se puede habilitar configurando el parámetro n_jobs en un número entero positivo o -1 para utilizar todos los núcleos de CPU disponibles. En este caso, lo configuramos en 8 para una ejecución más rápida.

El resultado muestra el progreso del proceso de selección de funciones, comenzando con una función y aumentando gradualmente la cantidad de funciones hasta alcanzar el tamaño de subconjunto deseado de cinco. También se muestra el rendimiento de cada subconjunto de funciones, lo que indica una mejora a medida que se agregan más funciones.

Después de completar, podemos acceder a los índices de características seleccionados y los nombres de características correspondientes utilizando los atributos k_feature_idx_ y k_feature_names_, respectivamente, del objeto sfs. Además, podemos acceder al historial de rendimiento de los subconjuntos de funciones mediante el atributo k_score_. Imprimamos los índices de las características seleccionadas, los nombres y sus puntajes correspondientes:

print( 'Selected feature indices:' , sfs.k_feature_idx_)
print( 'Selected feature names:' , sfs.k_feature_names_)
print( 'Selected feature scores:' , sfs.k_score_)

La salida mostrará los índices, nombres y puntajes de las cinco características seleccionadas.

A continuación, podemos volver a entrenar el clasificador vecino más cercano K en el subconjunto de características seleccionado. Para hacer esto, necesitamos crear un nuevo conjunto de entrenamiento y prueba que solo contenga las características seleccionadas. Podemos usar el método de transformación del objeto sfs para transformar los conjuntos de datos originales en el nuevo espacio de características:

X_train_selected = sfs.transform(X_train)
X_test_selected = sfs.transform(X_test)
Después de transformar los conjuntos de datos, podemos ajustar un nuevo clasificador de vecino más cercano K en el subconjunto de características seleccionado y calcular las precisiones de entrenamiento y prueba. Imprimimos los resultados:

knn_selected = KNeighborsClassifier(n_neighbors= 5 )
knn_selected.fit(X_train_selected, y_train)

train_acc_selected = knn_selected.score(X_train_selected, y_train)
test_acc_selected = knn_selected.score(X_test_selected, y_test)

print( 'Training accuracy on selected features:' , train_acc_selected)
print( 'Test accuracy on selected features:' , test_acc_selected)
El resultado mostrará las precisiones de entrenamiento y prueba logradas usando solo las cinco funciones seleccionadas.

Al comparar los resultados con las precisiones de referencia, podemos evaluar el impacto de la selección de características en el rendimiento del clasificador. En algunos casos, la selección de características puede conducir a una mejor generalización y un mejor rendimiento del modelo al reducir el sobreajuste y eliminar características irrelevantes o redundantes.

Eso es todo para la demostración usando la biblioteca MLxtend. Ahora, pasemos al uso de scikit-learn para la selección secuencial de características.

En scikit-learn, la clase SequentialFeatureSelector está disponible en el módulo feature_selection. Lo importamos de la siguiente manera:

from sklearn.feature_selection import SequentialFeatureSelector
El uso de la versión de scikit-learn es similar al de la versión de MLxtend, pero con algunas diferencias menores en los nombres de los parámetros y el acceso a los atributos. La versión de scikit-learn también proporciona más flexibilidad en cuanto al uso de diferentes algoritmos de selección de funciones y métricas de puntuación.

Espero que esta demostración lo ayude a comprender cómo usar la selección secuencial de funciones en Python. Recuerde consultar la documentación para ver ejemplos e información adicionales.

13.4.5 Sequential Feature Selection -- Code Examples (L13: Feature Selection)
13.4.5 Sequential Feature Selection -- Code Examples (L13: Feature Selection)
  • 2022.01.06
  • www.youtube.com
This final video in the "Feature Selection" series shows you how to use Sequential Feature Selection in Python using both mlxtend and scikit-learn.Jupyter no...
Razón de la queja: