Я использую scikit-learn Random Forest Classifier и хочу показать важность функции, как в этом примере .
Однако мой результат совершенно другой, в том смысле, что стандартное отклонение важности объекта почти всегда больше, чем значение самого свойства (см. Прилагаемое изображение).
Возможно ли иметь такое поведение, или я делаю какие-то ошибки при подготовке этого?
Мой код следующий:
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
с формой m x n
и m x 1
. Это должно быть ясно сейчас.
tsfresh
который помог мне определить соответствующие функции и сократить мои функции с 600+ до 400. ! [Мои лучшие 35 функций ] ( i.stack.imgur.com/0MROZ.png ) Даже при этом алгоритм работает хорошо для меня. У меня есть бинарная классификация, успех / неудача. У меня практически нет ложных успехов, но я пропускаю значительный процент успеха. Все приведенные выше предположения кажутся разумными. Это может быть тот случай, когда должен быть больший набор для обучения и тестирования. У меня меньше
predictors
возвращает объект, наnumpy array
который вы ссылаетесь, поpandas Dataframe
столбцам, что неверно, так какnumpy arrays
не имеет атрибутаcolumns
.