我正在寻求关于如何解决当前机器学习问题的建议。
问题的概述及我的做法如下:
- 我有900多个EEG数据试验,每个试验持续1秒。每个试验的地面真相都已知,并将其分类为状态0和状态1(40-60%的分割)
- 每个试验都经过预处理,其中我过滤并提取特定频段的功率,这些构成一组特征(特征矩阵:913x32)
- 然后我使用sklearn来训练模型。使用交叉验证,测试大小为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。
- 我尝试了各种C和gamma设置用于SVC,但它们都不改变得分
- 尝试使用其他评估器,如GaussianNB,甚至集成方法如adaboost。没有变化
- 尝试使用linearSVC显式设置正则化方法,但情况并没有改善
- 我尝试了使用Theano运行相同的特征的神经网络,我的训练准确度约为0.6,测试准确度约为0.5
我的特征集有可能无法区分这两个类别,但在得出这个结论之前,我想尝试一些其他选项。此外,如果我的特征无法区分,那么测试集得分低就可以解释了,但在这种情况下如何获得完美的训练集分数呢?这是可能的吗?