当我尝试在一些高维输入上应用一些ML算法(分类,更具体地说,特别是SVM)时,我应该如何处理,并且我得到的结果不太令人满意?
可以显示1,2或3维数据以及算法的结果,这样您就可以了解正在发生的事情,并了解如何解决问题。一旦数据超过3个维度,除了直观地使用参数,我不确定如何攻击它?
答案 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,包含更多有用的提示。其中:
编辑:我只想添加这个“数据点”。我最近在四个独占数据集上使用SVM和PCA预处理进行了另一次大规模实验。对于任何降低维数的选择,PCA都没有改进分类结果。具有简单对角缩放的原始数据(对于每个特征,减去平均值并除以标准偏差)表现更好。我没有做出任何广泛的结论 - 只是分享这个实验。也许在不同的数据上,PCA可以提供帮助。
答案 1 :(得分:7)
一些建议:
项目数据(仅用于可视化)到较低维度的空间(使用PCA或MDS或对您的数据有意义的任何内容)
尝试理解学习失败的原因。你认为它适合吗?你认为你有足够的数据吗?您的功能中是否可能没有足够的信息来解决您要解决的任务?如果不对数据进行可视化,有很多方法可以回答这些问题。
此外,如果您告诉我们任务是什么以及您的SVM输出是什么,那么可能会有更具体的建议。
答案 2 :(得分:3)
我会按如下方式解决问题:
“我得到的结果不太令人满意”是什么意思?
如果培训数据的分类率不理想,则意味着
如果测试数据的分类率不理想,则表示您的模型过度数据:
当然它可能是上述元素的混合物。这些都是解决问题的“盲目”方法。为了更深入地了解问题,您可以通过将数据投影到较低维度来使用可视化方法,或者根据您的理解寻找更适合问题域的模型(例如,如果您知道数据是正态分布的,则可以使用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是一个黑盒子。您最好弄清楚生成数据和建模机制的机制是什么,而不是数据。另一方面,如果这是可能的,很可能你不会在这里问这个问题(我不会对过度拟合这么痛苦。)
参数选择的选定论文列表
答案 4 :(得分:1)
如果我没错,您正试图查看SVM的哪些参数可以为您提供最佳结果。你的问题是模型/曲线拟合。 我几年前就遇到过类似的问题。有大量的库和算法可以做同样的事情。我使用Newton-Raphson的算法和遗传算法的变体来拟合曲线。
通过真实世界的实验(或者如果您正在进行简单的分类,只需自己动手)生成/猜测/获得您希望的结果。将其与SVM的输出进行比较。我之前提到的算法重申了这个过程,直到模型的结果(在这种情况下为SVM)与预期值有些匹配(请注意,此过程需要一些时间来根据您的问题/数据大小...我需要大约2个月的时间一个140节点的beowulf集群。)
如果您选择使用Newton-Raphson,this可能是一个很好的起点。