【问题标题】:Feature extraction per fold with Scikit使用 Scikit 提取每折叠的特征
【发布时间】:2017-12-18 08:52:17
【问题描述】:

对于机器学习实验,我必须执行特征选择。由于 10 倍交叉验证,我在训练集和测试集上没有划分。有人告诉我,我必须按折叠进行特征选择。但我不知道该怎么做。这是我的代码的一部分。

vec = DictVectorizer()
X = vec.fit_transform(instances) # No train/ test set, because we'll use 10-fold cross validation
scaler = StandardScaler(with_mean=False) 
X_scaled = scaler.fit_transform(X) # To make sure everything is on the same scale

enc = LabelEncoder()
y = enc.fit_transform(labels)

#feature selection
from sklearn.feature_selection import SelectKBest, mutual_info_classif
feat_sel = SelectKBest(mutual_info_classif, k=200) 
X_fs = feat_sel.fit_transform(X_scaled, y)

#train a classifier
from sklearn import model_selection
from sklearn.metrics import classification_report
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
y_pred = model_selection.cross_val_predict(clf, X_fs, y, cv=10)

有人可以帮我选择每折吗?

【问题讨论】:

    标签: python machine-learning scikit-learn cross-validation feature-selection


    【解决方案1】:

    回答您发布的第二个问题。

    您可以使用交叉验证并查看结果:

    做:

    from sklearn.feature_selection import SelectKBest, mutual_info_classif, RFECV
    from sklearn import model_selection
    from sklearn.metrics import classification_report
    from sklearn.naive_bayes import MultinomialNB
    from sklearn.pipeline import Pipeline        
    from sklearn.model_selection import cross_val_score
    import numpy as np
    
    feat_sel = SelectKBest(mutual_info_classif, k=200) 
    
    clf = MultinomialNB()
    pipe = Pipeline([('mutual_info',feat_sel), ('naive_bayes',clf)])
    
    scores = cross_val_score(pipe, X_scaled, y, cv =10, scoring = 'accuracy')
    print(np.mean(scores))
    

    【讨论】:

    • 我可以说我不再需要pipe.fit()了吗?
    • @Bambi 是的,是的,当然不再需要了。当你调用它时,cross_val_scores 会做任何事情
    【解决方案2】:

    您可以使用Pipeline,将特征选择器和分类器加入到管道中并交叉验证管道。

    参考:http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html

    【讨论】:

    • 我使用管道代码对其进行了编辑。现在我的准确率比我不使用管道时高出大约 10%。这可能吗?
    • Sera 对您的回答的评论提供了解决方案。
    猜你喜欢
    • 2013-11-22
    • 2016-05-27
    • 2012-09-25
    • 2019-12-11
    • 2016-09-02
    • 2015-05-10
    • 2016-03-18
    • 2016-09-11
    • 2021-07-11
    相关资源
    最近更新 更多