Análisis de importancia de características para el aprendizaje automático

  1. método

La importancia de la característica se refiere al grado de influencia de la característica en la variable objetivo, es decir, el grado de importancia de la característica en el modelo. Hay muchas maneras de juzgar la importancia de las características. Aquí hay algunos métodos comúnmente utilizados:

1. La importancia de las características basadas en el modelo de árbol: modelos como Random Forest y Gradient Boosting Tree pueden calcular la cantidad de veces que se usa cada característica en el modelo de árbol o la importancia de que se use para dividir, para medir la importancia de características.

2. La importancia de las características basadas en modelos lineales: modelos como la regresión lineal (Linear Regression) pueden medir la importancia de las características calculando el coeficiente de cada característica.

3. Importancia de la característica basada en la selección de características: métodos como el análisis de varianza (ANOVA), la información mutua (información mutua) pueden seleccionar características importantes mediante el análisis de la relación entre las características y las variables objetivo.

4. Importancia de la función basada en la red neuronal: por ejemplo, la importancia de las funciones se mide calculando la sensibilidad de cada función en la red neuronal a la salida.

5. El método de valor SHAP (SHapley Additive exPlanations) es un método para explicar los resultados de predicción del modelo y se puede utilizar para evaluar la contribución de cada característica a los resultados de predicción. El método de valor SHAP se basa en el concepto de valor de Shapley, que es un método de evaluación de la importancia de las características basado en la teoría de juegos.

El método de valor SHAP puede generar un valor SHAP para cada característica, indicando el grado de influencia de la característica en el resultado de la predicción de una determinada muestra. Los valores SHAP se pueden calcular mediante varios modelos, incluidos modelos lineales, modelos de árbol, redes neuronales y más.

La ventaja del método de valor SHAP es que es capaz de considerar la interacción entre características y, al mismo tiempo, puede interpretarse para diferentes tipos de modelos. Sin embargo, el método de valor SHAP también tiene algunas limitaciones, como una alta complejidad computacional, y puede ser difícil interpretar datos de alta dimensión y modelos complejos.

Cabe señalar que los diferentes métodos de importancia de características son adecuados para diferentes modelos y tipos de datos, y la elección del método apropiado debe seleccionarse de acuerdo con la situación real. Al mismo tiempo, la importancia de la función solo se refiere a la importancia de la función en el modelo y no se puede utilizar para juzgar si la función es útil o si necesita ser procesada por la ingeniería de funciones.

2. Ventajas y desventajas

Estos son los pros y los contras de cada enfoque:

Método de selección de características:

ventaja:

Las funciones que tienen un mayor impacto en el rendimiento del modelo se pueden descartar rápidamente para reducir los costos computacionales;

Fácil de entender y fácil de explicar.

defecto:

No se pueden considerar las interacciones entre características;

En los casos en que se conservan menos características, es posible que se pierda parte de la información.

Enfoque basado en árboles:

ventaja:

Se pueden considerar interacciones entre características;

Los resultados son fáciles de interpretar y se puede otorgar una puntuación de importancia a cada función;

La contribución de cada característica en el modelo se puede entender a través de la visualización.

defecto:

Puede haber problemas cuando se trata de datos dispersos de alta dimensión;

En el caso de fuertes correlaciones entre características, pueden ocurrir errores;

Enfoque basado en modelos:

ventaja:

Se pueden considerar interacciones entre características;

Aplicable a varios tipos de datos.

defecto:

Por lo general, requiere más recursos informáticos;

Los resultados pueden verse afectados por las correlaciones entre las características;

Los resultados pueden verse afectados por la elección del modelo.

Método de valor SHAP:

ventaja:

Capacidad para considerar la contribución de cada característica a cada muestra;

Capacidad para manejar correlaciones entre características;

La influencia de cada función en el resultado del modelo se puede visualizar para facilitar la interpretación.

defecto:

Requiere más recursos informáticos;

Los resultados pueden verse afectados por la elección y los parámetros del modelo.

En resumen, cada método tiene sus ventajas y desventajas, y la elección del método apropiado debe determinarse de acuerdo con los problemas específicos y las características de los datos. Al mismo tiempo, también es necesario tener en cuenta que la importancia de las características es solo una parte de la interpretación del modelo y no puede reemplazar completamente la evaluación y el ajuste del modelo.

3. Ejemplos

El análisis de importancia de características se refiere a la evaluación de la influencia de cada característica en los resultados de predicción del modelo en el modelo de aprendizaje automático. Los siguientes son varios métodos de análisis de importancia de características de uso común y los ejemplos correspondientes:

  1. Análisis de importancia de características basado en el modelo de árbol:

En los modelos de árbol, la importancia de las características generalmente se mide midiendo la cantidad de veces que se seleccionó cada característica como una división de nodos. Por ejemplo, en un modelo de bosque aleatorio, puede usar el atributo feature_importances_ en la biblioteca scikit-learn para obtener la importancia de cada característica de la siguiente manera:

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression

X, y = make_regression(n_features=4, random_state=0)
rf = RandomForestRegressor(random_state=0)
rf.fit(X, y)
print(rf.feature_importances_)

# array([0.18146984, 0.36514659, 0.37589063, 0.07749294])

Esto significa que las características 2 y 3 tienen una mayor influencia en los resultados de predicción del modelo.

  1. Análisis de la importancia de las características basado en el modelo lineal

En los modelos lineales, la magnitud de los coeficientes se puede utilizar para evaluar la importancia de cada característica. Por ejemplo, en el modelo de regresión de cresta, el atributo coef_ en la biblioteca scikit-learn se puede usar para obtener el tamaño del coeficiente de cada característica de la siguiente manera:

from sklearn.linear_model import Ridge
from sklearn.datasets import make_regression

X, y = make_regression(n_features=4, random_state=0)
ridge = Ridge(alpha=1.0)
ridge.fit(X, y)
print(ridge.coef_)

# array([28.70881903, 74.85495747, 90.56271467, 11.61467289])

Esto significa que la tercera característica tiene una mayor influencia en los resultados de predicción del modelo.

  1. Análisis de importancia de características basado en la red neuronal:

En las redes neuronales, la importancia de cada característica se puede evaluar utilizando el algoritmo de retropropagación para calcular el gradiente de cada característica a la función de pérdida. Por ejemplo, en PyTorch, la magnitud del gradiente para cada función se puede calcular mediante:

import torch
import torch.nn as nn
from torch.autograd import Variable

X = torch.randn(10, 4)
y = torch.randn(10, 1)

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc = nn.Linear(4, 1)

    def forward(self, x):
        x = self.fc(x)
        return x

net = Net()
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.01)

inputs = Variable(X)
labels = Variable(y)

for i in range(100):
    optimizer.zero_grad()
    outputs = net(inputs)
    loss = criterion(outputs, labels)
    loss.backward()
    print(net.fc.weight.grad.abs().mean(dim=1))
    optimizer.step()

Muestra la magnitud del gradiente para cada característica de la siguiente manera:

tensor([0.2078, 0.4516, 0.3481, 0.3676])
tensor([0.1563, 0.4035, 0.3115, 0.3285])
tensor([0.1156, 0.3644, 0.2788, 0.2937])
...

Esto significa que la segunda característica tiene el mayor gradiente de la función de pérdida, por lo que tiene una mayor influencia en los resultados de predicción del modelo.

  1. Análisis de la importancia de las características basado en la incertidumbre del modelo:

En algunos modelos, la incertidumbre del modelo se puede utilizar para evaluar la importancia de cada característica, como Random Neural Networks (Redes neuronales aleatorias) y Monte Carlo Dropout. Por ejemplo, en un modelo de deserción de Monte Carlo, la desviación estándar de la capa de deserción se puede utilizar para evaluar la importancia de cada característica de la siguiente manera:

import torch
import torch.nn as nn
from torch.autograd import Variable

X = torch.randn(10, 4)
y = torch.randn(10, 1)

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(4, 10)
        self.dropout = nn.Dropout(p=0.5)
        self.fc2 = nn.Linear(10, 1)

    def forward(self, x):
        x = nn.functional.relu(self.fc1(x))
        x = self.dropout(x)
        x = self.fc2(x)
        return x

net = Net()
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.01)

inputs = Variable(X)
labels = Variable(y)

for i in range(100):
    optimizer.zero_grad()
    outputs = net(inputs)
    loss = criterion(outputs, labels)
    loss.backward()
    print(net.dropout.std(dim=0))
    optimizer.step()

Esto generará la desviación estándar de cada función de la siguiente manera:

tensor(0.4332)
tensor(0.4606)
tensor(0.4387)
tensor(0.4668)

Esto significa que la cuarta característica tiene la mayor desviación estándar y, por lo tanto, tiene una mayor influencia en las predicciones del modelo.

  1. Análisis de importancia de características basado en análisis de características univariado:

Este método analiza la importancia de cada función realizando un análisis univariante de cada función, por ejemplo, mediante una prueba t o ANOVA. Por ejemplo, podemos usar la biblioteca Scikit-learn de Python para calcular la relación entre cada función y el resultado:

from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
from sklearn.feature_selection import f_regression

X, y = make_regression(n_samples=100, n_features=5, n_informative=2, random_state=42)

model = LinearRegression()
model.fit(X, y)

f_values, p_values = f_regression(X, y)

for i in range(len(X[0])):
    print('Feature %d: f-value=%.2f, p-value=%.2f' % (i+1, f_values[i], p_values[i]))

Esto generará el valor f y el valor p para cada característica de la siguiente manera:

Feature 1: f-value=56.47, p-value=0.00
Feature 2: f-value=114.10, p-value=0.00
Feature 3: f-value=0.80, p-value=0.38
Feature 4: f-value=0.01, p-value=0.94
Feature 5: f-value=1.54, p-value=0.22

Esto indica que las características 1 y 2 tienen la relación más fuerte con el resultado y, por lo tanto, tienen una mayor influencia en las predicciones del modelo.

En general, el análisis de importancia de características es una tarea muy importante en el aprendizaje automático, que puede ayudarnos a comprender cómo los modelos toman decisiones y brindan orientación para la ingeniería de características. Los diferentes métodos son adecuados para diferentes tipos de modelos y datos, y deben seleccionarse caso por caso.

6. Método basado en el valor de forma

SHAP (SHapley Additive exPlanations) es un método para explicar los resultados de predicción del modelo. Explica el proceso de predicción del modelo calculando el impacto de cada función en los resultados de predicción. El método basado en el valor SHAP se puede utilizar para juzgar la importancia de las características, los pasos específicos son los siguientes:

  1. Calcule el valor SHAP para cada muestra

Usando el método SHAP, para cada muestra, se calcula la influencia de cada característica en el resultado de predicción de la muestra para obtener el valor SHAP de la muestra. Este proceso se puede implementar utilizando bibliotecas SHAP listas para usar, como la biblioteca shap de XGBoost, la biblioteca lightgbm.plotting de LightGBM, etc.

  1. Valor SHAP medio de características estadísticas

Para cada función, los valores SHAP de todas las muestras se suman y se dividen por la cantidad de muestras para obtener el valor SHAP promedio para esa función. Cuanto mayor sea el valor promedio de SHAP, mayor será el impacto de la característica en los resultados de la predicción del modelo, es decir, más importante será la característica.

  1. Visualice los valores SHAP de las características

Puede usar las herramientas de visualización de SHAP, como el gráfico de resumen, el gráfico de dependencia, etc., para mostrar visualmente el valor promedio de SHAP de cada función y la influencia de la función en el resultado de la predicción. A través de estas herramientas de visualización, es posible obtener una comprensión más profunda de la importancia de cada característica.

Cabe señalar que el método de valor SHAP es aplicable a cualquier modelo de aprendizaje automático, incluidos modelos lineales, modelos de árbol, redes neuronales, etc. Además, en comparación con otros métodos de evaluación de la importancia de las características, el método de valor SHAP puede proporcionar resultados de evaluación de la importancia de las características más precisos e intuitivos.

El siguiente es un código de muestra para la evaluación de la importancia de las funciones utilizando la biblioteca XGBoost y la biblioteca SHAP:

import xgboost
import shap

# 加载数据集
X, y = shap.datasets.boston()

# 训练XGBoost模型
model = xgboost.train({"learning_rate": 0.01}, xgboost.DMatrix(X, label=y), 100)

# 计算每个样本的SHAP值
explainer = shap.Explainer(model)
shap_values = explainer(X)

# 统计特征的平均SHAP值
mean_shap_values = shap_values.mean(axis=0)

# 可视化特征的SHAP值
shap.summary_plot(mean_shap_values, X)

En este ejemplo, entrenamos un modelo de regresión con la biblioteca XGBoost y calculamos los valores SHAP para cada función con la biblioteca SHAP. Finalmente, usamos la gráfica de resumen de la herramienta de visualización SHAP para mostrar el valor promedio de SHAP de cada característica y visualizar la influencia de la característica en los resultados de la predicción.

Además de usar summary_plot para visualizar el valor SHAP de la característica, la biblioteca SHAP también proporciona muchas otras herramientas de visualización, como gráfica de dependencia, gráfica de fuerza, etc., para obtener una comprensión más profunda del impacto de cada característica en el modelo. resultados de la predicción.

El siguiente es un código de ejemplo que usa un gráfico de dependencia para mostrar el impacto del valor SHAP de una función en el resultado de la predicción:

# 可视化某个特征的SHAP值对预测结果的影响
shap.dependence_plot("RM", shap_values, X)

Aquí seleccionamos una característica "RM" en el conjunto de datos y mostramos la influencia de su valor SHAP en los resultados de predicción a través del gráfico de dependencia. Se puede ver que el valor SHAP de esta característica tiene una cierta relación lineal con el resultado de la predicción, y cuanto mayor es el valor SHAP, mayor es el resultado de la predicción.

Además, la biblioteca SHAP también proporciona muchas otras herramientas de visualización, como gráficos de interacción, gráficos en cascada, etc., que pueden explorar más a fondo la influencia de cada característica en los resultados de predicción del modelo.

Supongo que te gusta

Origin blog.csdn.net/kyq156518/article/details/129642505
Recomendado
Clasificación