如何在WEKA中构建卡方特征筛选的SVM分类器并生成交叉验证流程图
实现符合要求的SVM分类器步骤
你当前先筛选全局前10特征再做交叉验证的做法存在数据泄露问题,会导致评估结果偏乐观,要满足每折独立筛选特征的要求,直接用WEKA自带的元分类器即可,无需手动拆分数据集:
- 打开目标数据集,确认类别属性已正确标记
- 进入
Classify标签页,在分类器选择栏找到weka.classifiers.meta.FilteredClassifier并选中 - 点击分类器参数配置框,完成两项核心配置:
- 配置
classifier参数:选择weka.classifiers.functions.SMO(WEKA内置的SVM实现),可根据你的需求调整核函数、惩罚系数等SVM相关参数 - 配置
filter参数:选择weka.filters.supervised.attribute.AttributeSelection,进入该过滤器的配置页:evaluator选择weka.attributeSelection.ChiSquaredAttributeEvalsearch选择weka.attributeSelection.Ranker,将Ranker的numToSelect参数设为10,即仅保留卡方评分前10的特征
- 配置
- 回到分类标签页的测试选项区,选择
Cross-validation,设置折数为10 - 点击
Start运行即可,该流程会自动在每折的训练集上单独完成卡方特征筛选,再用同一规则处理对应折的测试集,完全符合你的要求,无数据泄露问题。
生成10折交叉验证工作流示意图
WEKA自带的Knowledge Flow模块可以直接构建并导出可视化工作流:
- 从WEKA GUI选择器进入
KnowledgeFlow界面 - 从左侧组件栏按需求拖拽组件到画布:
- 数据源组件:根据你的数据集格式选择对应加载器,arff格式选
ArffLoader,配置好数据集路径 - 交叉验证组件:在
Evaluation分类下选CrossValidationFoldMaker,设置折数为10 - 特征选择组件:在
Filters分类下选AttributeSelection,配置和上文一致:评估器用ChiSquaredAttributeEval,搜索方法用Ranker,保留前10个特征 - 分类器组件:在
Classifiers分类下选SMO - 评估组件:在
Evaluation分类下选ClassifierPerformanceEvaluator - 结果展示组件:可选
TextViewer用来查看最终评估指标
- 数据源组件:根据你的数据集格式选择对应加载器,arff格式选
- 按数据流顺序连接组件:数据源→CrossValidationFoldMaker,CrossValidationFoldMaker的trainingSet端口连AttributeSelection,CrossValidationFoldMaker的testSet端口也连AttributeSelection,AttributeSelection的output分别连SMO的trainingSet和testSet端口,SMO的output连ClassifierPerformanceEvaluator,最后连TextViewer
- 组件全部连接完成后,画布上的完整流程就是你需要的工作流示意图,可直接截图保存,也可以通过Knowledge Flow的
文件菜单导出为图片格式。
内容的提问来源于stack exchange,提问作者Naja
相关产品推荐
相关产品推荐

