python - 使用 Scikit 提取每个折叠的特征

标签 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_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)

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

最佳答案

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

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

做:

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))

关于python - 使用 Scikit 提取每个折叠的特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45082888/

相关文章:

python asyncio.Event.wait() 没有响应 event.set()

python - 包含重复索引的两个以上 DataFrame 的笛卡尔积

python - 多变量/特征 Tensorflow

python - 使用 Python/Matlab 在图像中人为地合并非刚性运动以生成数据

python - 为什么在进行文本聚类时在 K-Means 之前使用 LSA

python - 数据在 scikit-learn 转换器中不持久

python - 如何在 GAE 中配置后端

python - 将models.py拆分成几个文件

pandas - Knn 对距离上的特定特征赋予更多权重

python - 对于相同的 Keras 模型和数据,精度低于 AUC