【发布时间】:2014-07-30 04:24:08
【问题描述】:
我正在尝试使用 scikit-learn 和随机森林分类器执行递归特征消除,并使用 OOB ROC 作为对递归过程中创建的每个子集进行评分的方法。
但是,当我尝试使用 RFECV 方法时,我收到错误消息 AttributeError: 'RandomForestClassifier' object has no attribute 'coef_'
随机森林本身没有系数,但它们确实有按基尼分数进行的排名。所以,我想知道如何解决这个问题。
请注意,我想使用一种方法来明确告诉我在最佳分组中选择了我的pandas DataFrame 中的哪些特征,因为我正在使用递归特征选择来尽量减少我将输入的数据量最后的分类器。
下面是一些示例代码:
from sklearn import datasets
import pandas as pd
from pandas import Series
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import RFECV
iris = datasets.load_iris()
x=pd.DataFrame(iris.data, columns=['var1','var2','var3', 'var4'])
y=pd.Series(iris.target, name='target')
rf = RandomForestClassifier(n_estimators=500, min_samples_leaf=5, n_jobs=-1)
rfecv = RFECV(estimator=rf, step=1, cv=10, scoring='ROC', verbose=2)
selector=rfecv.fit(x, y)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/feature_selection/rfe.py", line 336, in fit
ranking_ = rfe.fit(X_train, y_train).ranking_
File "/Users/bbalin/anaconda/lib/python2.7/site-packages/sklearn/feature_selection/rfe.py", line 148, in fit
if estimator.coef_.ndim > 1:
AttributeError: 'RandomForestClassifier' object has no attribute 'coef_'
【问题讨论】:
-
另一种方法是在调用
predict或predict_proba之后使用feature_importances_属性,这将按照传递的顺序返回一个百分比数组。见online example -
看到了;不过,我想知道是否有什么东西可以让我进行 10 倍验证并确定最优的特征子集。
-
我不得不做一些类似的事情,但我通过对特征重要性进行排序然后一次修剪 1,3 或 5 个特征来手动完成。我没有用你的方法我不得不说所以我不知道是否可以做到。
-
你能分享你的手动方法吗?
-
我明天早上会发布我的代码,我的代码在我的工作电脑上,所以大约在英国夏令时早上 8 点左右
标签: python pandas scikit-learn random-forest feature-selection