我正在使用scikit-learn随机森林分类器,并且想要绘制功能重要性,例如在本示例中。
但是,从某种意义上说,我的结果是完全不同的,在某种意义上,特征重要性标准差几乎总是大于特征重要性本身的(见附图)。
可能会有这种行为,或者我在绘制图形时犯了一些错误?
我的代码如下:
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
。