vectorial soporte sklearn regresion maquinas logistica lineal ejemplos ejemplo clasificacion algoritmos algoritmo python scikit-learn feature-selection

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()