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

当我尝试在高维输入上应用某种机器学习算法(具体来说是分类,特别是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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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