Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Scikit对每个折叠进行特征提取_Python_Machine Learning_Scikit Learn_Cross Validation_Feature Selection - Fatal编程技术网

Python 使用Scikit对每个折叠进行特征提取

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_

对于机器学习实验,我必须执行特征选择。由于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)

有人能帮我选择每个折叠吗?

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


参考:

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


参考资料:

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

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

做:


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

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

做:


我用管道代码编辑了它。现在我的准确率比我没有使用管道时高出大约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))