【问题标题】:AttributeError: 'RFECV' object has no attribute 'ranking_'AttributeError:“RFECV”对象没有属性“ranking_”
【发布时间】:2018-12-27 00:04:56
【问题描述】:

我尝试通过以下方式获得功能排名:

1. Standardscaler
2. RandomForestClassifier
3. Recursive feature selection


from sklearn.feature_selection import RFECV
from sklearn.metrics import accuracy_score
from sklearn.model_selection import cross_val_predict, KFold
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import Pipeline
from sklearn.datasets import load_iris

data = load_iris()

X = data.data
Y = data.target

clf = RandomForestClassifier()

estimators = [('standardize' , StandardScaler()),
             ('rfecv', RFECV(estimator=clf, scoring='accuracy'))]

pipeline = Pipeline(estimators)

ranking_features = pipeline.named_steps['rfecv'].ranking_
print (ranking_features)

AttributeError: 'RFECV' 对象没有属性 'ranking_'

欢迎任何这样做的最佳做法。

【问题讨论】:

    标签: scikit-learn


    【解决方案1】:

    在调用ranking_ 属性之前,我们首先使用rfecev 来拟合数据。尝试运行此代码:

    from sklearn.feature_selection import RFECV
    from sklearn.metrics import accuracy_score
    from sklearn.model_selection import cross_val_predict, KFold
    from sklearn.preprocessing import StandardScaler
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.pipeline import Pipeline
    from sklearn.datasets import load_iris
    
    data = load_iris()
    
    X = data.data
    Y = data.target
    
    clf = RandomForestClassifier()
    
    estimators = [('standardize' , StandardScaler()),
                 ('rfecv', RFECV(estimator=clf, scoring='accuracy'))]
    
    # create pipeline
    pipeline = Pipeline(estimators)
    
    # fit rfecv to data
    rfecv_data = pipeline.named_steps['rfecv'].fit(X, Y)
    
    # get the feature ranking
    ranking_features = rfecv_data.ranking_
    print (ranking_features)
    
    'Output':
    [2 3 1 1]
    

    【讨论】:

    • 这取决于管道的设置方式和模型的构建方式。在这种情况下,它对整个数据集进行标准化。理想情况下,您需要对训练集进行标准化,以免将信息从训练集泄漏到测试集。我们可以使用train_test_split 轻松拆分数据集。
    • 我可以做到这一点,但这需要完全不同的方法,因为这是一个不同的问题。如果我按原样修改此答案,它将与 StackOverflow 的 Question/Anser 格式不对应。您在这里提出的问题以及此代码要解决的问题只是使用递归特征消除方法找到数据集的重要特征。可能提出一个新问题,并链接我,我很乐意提供帮助。干杯。
    • @brute 完成。干杯。
    猜你喜欢
    • 2012-12-01
    • 2021-04-19
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多