如何利用高维输入空间来解决机器学习问题?

时间:2010-02-12 23:42:58

标签: machine-learning classification svm

当我尝试在一些高维输入上应用一些ML算法(分类,更具体地说,特别是SVM)时,我应该如何处理,并且我得到的结果不太令人满意?

可以显示1,2或3维数据以及算法的结果,这样您就可以了解正在发生的事情,并了解如何解决问题。一旦数据超过3个维度,除了直观地使用参数,我不确定如何攻击它?

5 个答案:

答案 0 :(得分:25)

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

对我而言,这完全符合SVM的工作方式。设x是m维特征向量。令y = Ax,其中y在R ^ n中,并且x在R ^ m中,n <1。 m,即y被投射到较低维度的空间上。如果类Y1和Y2在R ^ n中是线性可分的,则对应的类X1和X2在R ^ m中是线性可分的。因此,理论上,原始子空间应该“至少”与它们在较低维度上的投影是可分离的,即PCA应该没有帮助。

以下是一个讨论在SVM之前使用PCA的讨论:link

可以做的是更改SVM参数。例如,对于libsvm link,参数C和gamma对于分类成功至关重要。 libsvm faq,特别是此条目link,包含更多有用的提示。其中:

  1. 在分类之前缩放您的功能。
  2. 尝试获得平衡的课程。如果不可能,那么惩罚一个班级比另一个班级更多。请参阅有关SVM不平衡的更多参考资料。
  3. 检查SVM参数。尝试多种组合以获得最佳组合。
  4. 首先使用RBF内核。它几乎总是效果最好(从计算上讲)。
  5. 几乎忘了......在测试之前,交叉验证
  6. 编辑:我只想添加这个“数据点”。我最近在四个独占数据集上使用SVM和PCA预处理进行了另一次大规模实验。对于任何降低维数的选择,PCA都没有改进分类结果。具有简单对角缩放的原始数据(对于每个特征,减去平均值并除以标准偏差)表现更好。我没有做出任何广泛的结论 - 只是分享这个实验。也许在不同的数据上,PCA可以提供帮助。

答案 1 :(得分:7)

一些建议:

  • 项目数据(仅用于可视化)到较低维度的空间(使用PCA或MDS或对您的数据有意义的任何内容)

  • 尝试理解学习失败的原因。你认为它适合吗?你认为你有足够的数据吗?您的功能中是否可能没有足够的信息来解决您要解决的任务?如果不对数据进行可视化,有很多方法可以回答这些问题。

此外,如果您告诉我们任务是什么以及您的SVM输出是什么,那么可能会有更具体的建议。

答案 2 :(得分:3)

我会按如下方式解决问题:

“我得到的结果不太令人满意”是什么意思?

如果培训数据的分类率不理想,则意味着

  • 您的训练数据中存在离群值(错误分类的数据)。在这种情况下,您可以尝试使用RANSAC等算法来处理它。
  • 您的模型(本例中为SVM)不适合此问题。这可以通过尝试其他模型(adaboost等)或向当前模型添加更多参数来诊断。
  • 数据的表示不适合您的分类任务。在这种情况下,使用特征选择或降维技术预处理数据将有助于

如果测试数据的分类率不理想,则表示您的模型过度数据:

  • 您的模型太复杂(参数太多),需要进一步约束,
  • 或者您在训练集上训练它太小而且您需要更多数据

当然它可能是上述元素的混合物。这些都是解决问题的“盲目”方法。为了更深入地了解问题,您可以通过将数据投影到较低维度来使用可视化方法,或者根据您的理解寻找更适合问题域的模型(例如,如果您知道数据是正态分布的,则可以使用GMM来模拟数据......)

答案 3 :(得分:3)

您可以尝试通过PCA或类似技术减少问题的维度。请注意,PCA有两个重点。 (1)它假定它所应用的数据是正态分布的,并且(2)结果数据失去其自然含义(导致黑盒)。如果你能忍受,试试吧。

另一种选择是尝试几种参数选择算法。由于这里已经提到了SVM,你可以尝试使用Chang和Li(Feature Ranking Using Linear SVM)的方法,在这种方法中,他们使用线性SVM预先选择“有趣的特征”,然后在所选特征上使用基于RBF的SVM。如果您熟悉Orange, a python data mining library,则可以在一小时内编写此方法。请注意,这是一种贪婪的方法,由于其“贪婪”可能会在输入变量高度相关的情况下失败。在这种情况下,如果您无法使用PCA解决此问题(请参阅上文),您可能需要使用启发式方法,尝试选择最佳可能的预测变量组合。这种方法的主要缺陷是过度拟合的高潜力。确保你有一堆在整个模型构建过程中看不到的“处女”数据。在确定模型准备就绪后,仅对该数据测试一次。如果失败,请不要再次使用此数据来验证其他模型,您必须找到新的数据集。否则你不会确定你再没有过度装备。

参数选择的选定论文清单: Feature selection for high-dimensional genomic microarray data

哦,关于SVM还有一件事。 SVM是一个黑盒子。您最好弄清楚生成数据和建模机制的机制是什么,而不是数据。另一方面,如果这是可能的,很可能你不会在这里问这个问题(我不会对过度拟合这么痛苦。)

参数选择的选定论文列表

  1. Feature selection for high-dimensional genomic microarray data
  2. Wrappers for feature subset selection
  3. Parameter selection in particle swarm optimization
  4. 我在开发此Stochastic method to determine, in silico, the drug like character of molecules
  5. 的实验室工作

答案 4 :(得分:1)

如果我没错,您正试图查看SVM的哪些参数可以为您提供最佳结果。你的问题是模型/曲线拟合。 我几年前就遇到过类似的问题。有大量的库和算法可以做同样的事情。我使用Newton-Raphson的算法和遗传算法的变体来拟合曲线。

通过真实世界的实验(或者如果您正在进行简单的分类,只需自己动手)生成/猜测/获得您希望的结果。将其与SVM的输出进行比较。我之前提到的算法重申了这个过程,直到模型的结果(在这种情况下为SVM)与预期值有些匹配(请注意,此过程需要一些时间来根据您的问题/数据大小...我需要大约2个月的时间一个140节点的beowulf集群。)

如果您选择使用Newton-Raphson,this可能是一个很好的起点。