【发布时间】:2015-06-26 06:53:21
【问题描述】:
在 sklearn SVM-Anova 的文档中有一个示例。我想进一步为超参数做GridSearchCV,对于 SVM 的 i.d.、C 和 gamma,对于示例中使用的每个百分位数的特征,如下所示:
transform = feature_selection.SelectPercentile(feature_selection.f_classif)
clf = Pipeline([('anova', transform),
('normal',preprocessing.StandardScaler()),
('svc', svm.SVC())])
parameters = {
'svc__gamma': (1e-3, 1e-4),
'svc__C': (1, 10, 100, 1000)
}
percentiles = (1, 3, 6, 10, 15, 20, 30, 40, 60, 80, 100)
for percentile in percentiles:
clf.set_params(anova__percentile=percentile)
search = GridSearchCV(clf, parameters,cv=StratifiedKFold(y,7,shuffle=True, random_state=5), scoring='roc_auc', n_jobs=1)
search.fit(X,y)
效果很好,通过这样做,我可以同时调整 Anova 和 SVM 的参数,并使用这对参数来构建我的最终模型。
但是,我对它的工作原理感到困惑。它是否首先拆分数据并通过管道?如果是这样,如果我想进一步了解这些选定的特征,我如何确定 Anova 选择的特征?
假设,我使用一对参数(Anova 的百分位数和 SVM 的 C/gamma)获得了最佳 CV 分数,我如何才能确切地找出在该设置中保留了哪些特征?因为每个参数设置都在 CV 下进行了测试,每个参数都包含具有不同训练数据的折叠,因此需要 Anova 评估不同的特征集。
我可以出来的一种方法是将每个折叠中保留的特征集相交以获得最佳性能的一对参数,但我不知道如何修改代码来做到这一点。
欢迎对方法提出任何建议或疑问。
【问题讨论】:
标签: python scikit-learn pipeline cross-validation feature-selection