Python 使用Scikit对每个折叠进行特征提取
对于机器学习实验,我必须执行特征选择。由于10倍交叉验证,我在培训和测试集上没有划分。有人告诉我,我必须在每次折叠时进行特征选择。但我不知道该怎么做。这是我代码的一部分Python 使用Scikit对每个折叠进行特征提取,python,machine-learning,scikit-learn,cross-validation,feature-selection,Python,Machine Learning,Scikit Learn,Cross Validation,Feature Selection,对于机器学习实验,我必须执行特征选择。由于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_
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)
有人能帮我选择每个折叠吗?您可以使用
管道
,将特征选择器和分类器连接到管道中,并交叉验证管道
参考:您可以使用
管道
,将特征选择器和分类器连接到管道中,并交叉验证管道
参考资料:回答您发布的第二个问题。 您可以使用交叉验证并查看结果: 做:
回答您发布的第二个问题。 您可以使用交叉验证并查看结果: 做:
我用管道代码编辑了它。现在我的准确率比我没有使用管道时高出大约10%。这可能吗?Sera对你答案的评论提供了解决方案。我用管道代码编辑了它。现在我的准确率比我没有使用管道时高出大约10%。这可能吗?Sera对你答案的评论提供了解决方案。我说我不需要再做
pipe.fit()
了,对吗?@Bambi是的,当然不需要了。cross_val_scores做所有事情当你打电话给itAm时,我可以说我不需要再做pipe.fit()
?@Bambi是的当然不需要了。当你叫它时,cross_val_分数会做任何事情
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))