如何处理高维输入空间的机器学习问题?

当我尝试在高维输入上应用某种机器学习算法(具体来说是分类,特别是SVM),但得到的结果不太令人满意时,我应该如何处理这种情况?

1、2或3维的数据可以与算法的结果一起可视化,这样你就可以了解发生了什么,并对如何处理问题有一些想法。一旦数据超过3维,除了直觉地调整参数外,我真的不确定如何处理这个问题?


回答:

你对数据做了什么?我的回答是:什么都不做。SVM被设计来处理高维数据。我现在正在研究一个使用SVM进行监督分类的研究问题。除了在互联网上寻找资源外,我还自己进行了关于分类前降维影响的实验。使用PCA/LDA预处理特征并没有显著提高SVM的分类准确性。

对我来说,从SVM的工作方式来看,这是完全合理的。设x为m维特征向量。设y = Ax,其中y在R^n中,x在R^m中,且n < m,即y是x投影到较低维度的空间中。如果类Y1和Y2在R^n中是线性可分的,那么相应的类X1和X2在R^m中也是线性可分的。因此,原始子空间“至少”应该和它们投影到较低维度上的子空间一样可分,即理论上PCA不应该有帮助。

这里有一个讨论关于在SVM之前使用PCA的争论:链接

可以做的是改变你的SVM参数。例如,使用libsvm 链接,参数C和gamma对分类成功至关重要。libsvm的常见问题解答,特别是这一条目 链接,包含更多有用的提示。其中包括:

  1. 在分类前缩放你的特征。
  2. 尽量获得平衡的类。如果不可能,那么对一个类进行更多的惩罚。查看更多关于SVM不平衡的参考资料。
  3. 检查SVM参数。尝试多种组合以找到最佳组合。
  4. 首先使用RBF核。它几乎总是效果最好(从计算角度来说)。
  5. 差点忘了……在测试前,交叉验证

编辑:让我补充这个“数据点”。我最近使用SVM和PCA预处理在四个独立的数据集上进行了大规模实验。PCA在任何选择的降维上都没有改善分类结果。原始数据经过简单的对角缩放(对于每个特征,减去均值并除以标准差)表现更好。我没有做出任何广泛的结论——只是分享这个实验。也许在不同的数据上,PCA可以有所帮助。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注