我正在寻找有关我当前机器学习问题的最佳前进方向的建议
问题的概要和我所做的如下:
- 我有 900 多次 EEG 数据试验,每次试验时长为 1 秒。每个人都知道基本事实,并对状态 0 和状态 1 进行分类(40-60% 分裂)
- 每个试验都经过预处理,我过滤和提取某些频带的功率,这些组成一组特征(特征矩阵:913x32)
- 然后我使用 sklearn 来训练模型。cross_validation 用于我使用 0.2 的测试大小的地方。分类器设置为带有 rbf 内核的 SVC,C = 1,gamma = 1(我尝试了许多不同的值)
您可以在此处找到代码的缩短版本:http: //pastebin.com/Xu13ciL4
我的问题:
- 当我使用分类器为我的测试集预测标签时,每个预测都是 0
- 训练准确度为 1,而测试集准确度约为 0.56
- 我的学习曲线图如下所示:
现在,这似乎是这里过度拟合的经典案例。然而,这里的过度拟合不太可能是由于样本的特征数量不成比例(32 个特征,900 个样本)造成的。我尝试了很多方法来缓解这个问题:
- 我尝试过使用降维(PCA),以防我有太多的样本数量的特征,但准确度得分和学习曲线图看起来与上面相同。除非我将组件的数量设置为 10 以下,否则训练精度会开始下降,但考虑到您开始丢失信息,这是否有点意料之中?
- 我尝试过规范化和标准化数据。标准化 (SD = 1) 不会改变训练或准确度分数。归一化 (0-1) 将我的训练精度降低到 0.6。
- 我已经为 SVC 尝试了各种 C 和 gamma 设置,但它们都不会改变任何一个分数
- 尝试使用 GaussianNB 等其他估计器,甚至使用 adaboost 等集成方法。没变化
- 尝试使用 linearSVC 明确设置正则化方法,但没有改善情况
- 我尝试使用 theano 通过神经网络运行相同的功能,我的训练精度约为 0.6,测试约为 0.5
我很高兴继续思考这个问题,但在这一点上,我正在寻找正确方向的推动力。我的问题可能出在哪里,我能做些什么来解决它?
我的一组功能完全有可能无法区分这两个类别,但在得出这个结论之前,我想尝试其他一些选项。此外,如果我的特征无法区分,那将解释测试集分数低的原因,但在这种情况下如何获得完美的训练集分数?那可能吗?