Estoy usando el clasificador de bosque aleatorio scikit-learn y quiero trazar la importancia de la característica, como en este ejemplo .
Sin embargo, mi resultado es completamente diferente, en el sentido de que la desviación estándar de la importancia de la característica es casi siempre mayor que la importancia de la característica misma (ver imagen adjunta).
¿Es posible tener este tipo de comportamiento, o estoy cometiendo algunos errores al trazarlo?
Mi código es el siguiente:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(predictors.values, outcome.values.ravel())
importance = clf.feature_importances_
importance = pd.DataFrame(importance, index=predictors.columns,
columns=["Importance"])
importance["Std"] = np.std([tree.feature_importances_
for tree in clf.estimators_], axis=0)
x = range(importance.shape[0])
y = importance.ix[:, 0]
yerr = importance.ix[:, 1]
plt.bar(x, y, yerr=yerr, align="center")
plt.show()
pandas DataFrame
con forma m x n
y m x 1
. Debería estar claro ahora.
tsfresh
que me ayudó a identificar características relevantes y reducir mis características de 600+ a alrededor de 400. ! [Mis 35 características principales ] ( i.stack.imgur.com/0MROZ.png ) Incluso con esto, el algoritmo está funcionando bien para mi. Tengo una clasificación binaria, éxito / fracaso. Prácticamente no obtengo falsos éxitos, pero extraño un porcentaje considerable de éxitos. Todas las conjeturas anteriores parecen razonables. Podría ser el caso de que deba haber un conjunto de capacitación y pruebas más amplio. Tengo menos
predictors
devuelve un objeto al que hacenumpy array
referencia a unpandas Dataframe
objeto por sus columnas que es incorrecto yanumpy arrays
que no tiene el atributocolumns
.