在Scikit-learn中,有没有办法获取已使用模型的特征(属性)列表(或整个训练数据的表格)?我使用了一些预处理方法,如特征选择,我希望知道哪些特征被选中,哪些特征被移除。例如,我使用了随机森林分类器和递归特征消除方法。
回答:
选定特征的掩码存储在RFE对象的’_support’属性中。
以下是一个示例:
from sklearn.datasets import make_friedman1from sklearn.feature_selection import RFEfrom sklearn.svm import SVR# 加载数据集X, y = make_friedman1(n_samples=50, n_features=10, random_state=0)estimator = SVR(kernel="linear")selector = RFE(estimator, 5, step=1)X_new = selector.fit_transform(X, y)print selector.support_ print selector.ranking_
将显示:
array([ True, True, True, True, True, False, False, False, False, False], dtype=bool)array([1, 1, 1, 1, 1, 6, 4, 3, 2, 5])
请注意,如果你想在RFE模型中使用随机森林分类器,你会遇到以下错误:
AttributeError: 'RandomForestClassifier' object has no attribute 'coef_'
我在这个讨论中找到了一个解决方法:使用Scikit-learn对随机森林进行递归特征消除
你需要像这样重写RandomForestClassifier类:
class RandomForestClassifierWithCoef(RandomForestClassifier): def fit(self, *args, **kwargs): super(RandomForestClassifierWithCoef, self).fit(*args, **kwargs) self.coef_ = self.feature_importances_
希望这对你有帮助 🙂