Sim*_*mon 3 python signal-processing machine-learning svm scikit-learn
我正在寻找关于我当前机器学习问题的最佳前进方法的建议
问题的概要和我所做的如下:
你可以在这里找到一个缩短版的代码:http://pastebin.com/Xu13ciL4
我的问题:
现在,这似乎是过度拟合的经典案例.然而,这里的过度拟合不太可能是由于样本的特征数量不成比例(32个特征,900个样本).我已经尝试了很多方法来缓解这个问题:
我很高兴继续思考这个问题,但此时我正在寻找正确方向的推动力.我的问题可能在哪里,我可以做些什么来解决它?
完全有可能我的一组功能只是不区分这两个类别,但我想在跳到这个结论之前尝试其他一些选项.此外,如果我的功能没有区分,那么这将解释低测试组分数,但在这种情况下如何获得完美的训练集分数?那可能吗?
我首先尝试对参数空间进行网格搜索,但同时也在训练集上使用k折交叉验证(并将测试集保持在一边).然后选择一组参数,而不是从k折交叉验证中推广出最佳参数.我建议将GridSearchCV与StratifiedKFold一起使用(当将分类器作为估计器传递时,它已经是GridSearchCV 的默认策略).
假设具有rbf的SVM可以完美地适合任何训练集,因为VC维度是无限的.因此,如果调整参数无助于减少过度拟合,那么您可能希望针对更简单的假设尝试类似的参数调整策略,例如线性SVM或您认为可能适合您的域的其他分类器.
正如你所提到的那样,正规化绝对是个好主意.
对同一标签的预测使我认为标签不平衡可能是一个问题,在这种情况下,您可以使用不同的类权重.因此,在SVM的情况下,每个类都获得其自己的C惩罚权重.sklearn中的一些估算器接受拟合参数,允许您设置样本权重以设置单个训练样本的惩罚量.
现在,如果你认为这些特征可能是一个问题,我会通过查看f_classif提供的F值来使用特征选择,并且可以使用像SelectKBest这样的东西.另一种选择是通过交叉验证来消除递归特征.如果您使用sklearns Pipeline API,则功能选择也可以包含在网格搜索中.
| 归档时间: |
|
| 查看次数: |
1812 次 |
| 最近记录: |