Estou usando o Classificador Aleatório de Floresta scikit-learn e quero plotar a importância do recurso, como neste exemplo .
No entanto, meu resultado é completamente diferente, no sentido de que o desvio padrão da importância da característica é quase sempre maior do que a própria importância da característica (ver imagem em anexo).
É possível ter esse tipo de comportamento ou estou cometendo alguns erros ao traçá-lo?
Meu código é o seguinte:
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
com forma m x n
e m x 1
. Deve ficar claro agora.
tsfresh
que me ajudou a identificar recursos relevantes e reduzir meus recursos de mais de 600 para cerca de 400. ! [Meus 35 principais recursos ] ( i.stack.imgur.com/0MROZ.png ) Mesmo com isso, o algoritmo está funcionando bem para mim. Eu tenho uma classificação binária, sucesso / fracasso. Não tenho praticamente nenhum sucesso falso, mas sinto falta de uma porcentagem considerável de sucesso. Todas as suposições acima parecem razoáveis. Pode ser que exista um conjunto maior de treinamento e teste. Eu tenho menos
predictors
retorna umnumpy array
que você está fazendo referência a umpandas Dataframe
objeto por ele é colunas que é incorreto comonumpy arrays
não tem o atributocolumns
.