我正在寻找使用 sklearn 对多标签数据集执行特征选择。我想获得跨标签的最终特征集,然后我将在另一个机器学习包中使用这些特征。我打算使用我在这里看到的方法,它分别为每个标签选择相关特征。
from sklearn.svm import LinearSVC
from sklearn.feature_selection import chi2, SelectKBest
from sklearn.multiclass import OneVsRestClassifier
clf = Pipeline([('chi2', SelectKBest(chi2, k=1000)),
('svm', LinearSVC())])
multi_clf = OneVsRestClassifier(clf)
Run Code Online (Sandbox Code Playgroud)
然后我计划使用以下方法提取每个标签包含的特征的索引:
selected_features = []
for i in multi_clf.estimators_:
selected_features += list(i.named_steps["chi2"].get_support(indices=True))
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是,如何选择要包含在最终模型中的选定特征?我可以使用每一个独特的特征(包括只与一个标签相关的特征),或者我可以做一些事情来选择与更多标签相关的特征。
我最初的想法是创建一个给定特征选择的标签数量的直方图,并根据视觉检查确定一个阈值。我担心的是这种方法是主观的。使用 sklearn 为多标签数据集执行特征选择是否有更原则性的方法?
machine-learning feature-selection python-2.7 scikit-learn multilabel-classification
我有一个csv文件中的数据结构如下:
Subject group Result1 Result2... ResultN
101 a .5 .1 .2
103 b .1 .2 .5
104 b .2 .3 .4
mean_a a .5 .1 .2
mean_b b .1 .6 .4
ste_a a .05 .02 .03
ste_b b .01 .05 .04
Run Code Online (Sandbox Code Playgroud)
我只想得到一个条形图,按结果分组,每组的平均行值,其中ste为误差条.不幸的是,我很难这样做.我可以将数据帧转换为两个独立的数据帧,一个用于均值,一个用于ste,如下所示:
a b
Result1 .5 .1
Result2 .1 .6
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何绘制stes的第二个数据帧作为错误条,我的方法似乎过于复杂,所以我想知道是否有人知道更简单的方法来做到这一点,如果没有,如何使用一个数据帧绘制其他数据帧的误差线.