J'utilise scikit-learn Random Forest Classifier et je veux tracer l'importance des fonctionnalités, comme dans cet exemple .
Cependant, mon résultat est complètement différent, dans le sens où l'écart-type de l'importance des fonctionnalités est presque toujours plus important que l'importance des fonctionnalités elle-même (voir l'image jointe).
Est-il possible d'avoir un tel comportement ou est-ce que je fais des erreurs en le traçant?
Mon code est le suivant:
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
de forme m x n
et de m x 1
. Cela devrait être clair maintenant.
tsfresh
qui m'a aidé à identifier les fonctionnalités pertinentes et à réduire mes fonctionnalités de 600+ à environ 400. ! [Mes 35 meilleures fonctionnalités ] ( i.stack.imgur.com/0MROZ.png ) Même avec cela, l'algorithme fonctionne bien pour moi. J'ai une classification binaire, succès / échec. Je n'obtiens pratiquement aucun faux succès, mais je rate un pourcentage considérable de succès. Toutes les suppositions ci-dessus semblent raisonnables. Cela pourrait être le cas, il devrait y avoir un plus grand ensemble de formation et de test. J'ai moins
predictors
renvoie un élémentnumpy array
auquel vous faites référence à unpandas Dataframe
objet par ses colonnes, ce qui est incorrect carnumpy arrays
il n'a pas d'attributcolumns
.