Sto usando Scikit-learn Random Forest Classifier e voglio tracciare l'importanza delle funzionalità come in questo esempio .
Tuttavia, il mio risultato è completamente diverso, nel senso che l'importanza della deviazione standard è quasi sempre maggiore dell'importanza della caratteristica stessa (vedi immagine allegata).
È possibile avere questo tipo di comportamento, o sto facendo degli errori durante la trama?
Il mio codice è il seguente:
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
e m x 1
. Dovrebbe essere chiaro ora.
tsfresh
che mi ha aiutato a identificare le funzionalità pertinenti e a tagliare le mie funzionalità da 600+ a circa 400. ! [Le mie prime 35 funzionalità ] ( i.stack.imgur.com/0MROZ.png ) Anche con questo l'algoritmo funziona bene per me. Ho una classificazione binaria, successo / fallimento. Non ottengo praticamente falsi successi, ma mi manca una percentuale considerevole di successo. Tutte le ipotesi sopra sembrano ragionevoli. Potrebbe essere necessario un set di addestramento e test più ampio. Ne ho meno
predictors
restituisce un oggetto anumpy array
cui si fa riferimento a unpandas Dataframe
oggetto dalle sue colonne, che è errato in quantonumpy arrays
non dispongono dell'attributocolumns
.