python - soporte - Regresión logística de sklearn: características importantes
regresion logistica en python ejemplos (3)
Puede ver los coeficientes en el atributo coef_
del modelo ajustado para ver qué características son las más importantes. (Para LogisticRegression, todo lo que hace la transform
es ver qué coeficientes son más altos en valor absoluto).
La mayoría de los modelos scikit-learn no proporcionan una forma de calcular valores p. Hablando en términos generales, estos modelos están diseñados para ser utilizados para predecir productos, no para ser inspeccionados a fin de comprender cómo se realiza la predicción. Si te interesan los valores de p, puedes echar un vistazo a los modelos de estadísticas , aunque es algo menos maduro que sklearn.
Estoy bastante seguro de que se me ha preguntado antes, pero no puedo encontrar una respuesta
Ejecutando la Regresión Logística usando sklearn en python, puedo transformar mi conjunto de datos a sus características más importantes usando el método Transform
classf = linear_model.LogisticRegression()
func = classf.fit(Xtrain, ytrain)
reduced_train = func.transform(Xtrain)
¿Cómo puedo saber qué características fueron seleccionadas como las más importantes? más en general, ¿cómo puedo calcular el valor p de cada característica en el conjunto de datos?
LogisticRegression.transform
toma un valor de threshold
que determina qué características conservar. Directamente desde el docstring:
Umbral: cadena, flotante o Ninguno, opcional (predeterminado = Ninguno) El valor de umbral que se utilizará para la selección de características. Las características cuya importancia es mayor o igual se mantienen mientras que las demás se descartan. Si "mediana" (resp. "Media"), el valor umbral es la mediana (o la media) de las características importances. También se puede usar un factor de escala (por ejemplo, "1.25 * media"). Si None y si está disponible, se usa el threshold
atributo del objeto. De lo contrario, "mean" se utiliza por defecto.
No hay ningún threshold
atributo de objeto en los estimadores de LR, por lo que solo se conservan por defecto las características con mayor valor absoluto que la media (después de sumar las clases).
Como se sugiere en los comentarios anteriores, usted puede (y debería) escalar sus datos antes de su ajuste, haciendo que los coeficientes sean comparables. A continuación hay un pequeño código para mostrar cómo funcionaría esto. Sigo este formato para comparar.
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
import pandas as pd
import matplotlib.pyplot as plt
x1 = np.random.randn(100)
x2 = np.random.randn(100)
x3 = np.random.randn(100)
#Make difference in feature dependance
y = (3 + x1 + 2*x2 + 5*x3 + 0.2*np.random.randn()) > 0
X = pd.DataFrame({''x1'':x1,''x2'':x2,''x3'':x3})
#Scale your data
scaler = StandardScaler()
scaler.fit(X)
X_scaled = pd.DataFrame(scaler.transform(X),columns = X.columns)
clf = LogisticRegression(random_state = 0)
clf.fit(X_scaled, y)
feature_importance = abs(clf.coef_[0])
feature_importance = 100.0 * (feature_importance / feature_importance.max())
sorted_idx = np.argsort(feature_importance)
pos = np.arange(sorted_idx.shape[0]) + .5
featfig = plt.figure()
featax = featfig.add_subplot(1, 1, 1)
featax.barh(pos, feature_importance[sorted_idx], align=''center'')
featax.set_yticks(pos)
featax.set_yticklabels(np.array(X.columns)[sorted_idx], fontsize=8)
featax.set_xlabel(''Relative Feature Importance'')
plt.tight_layout()
plt.show()