如何解决高维输入空间的机器学习问题?
classification
machine-learning
svm
9
0

当我尝试在某些高维输入上应用某种ML算法(特别是分类,尤其是SVM)时,应该如何处理,而我得到的结果并不令人满意?

可以将1、2或3维数据以及算法的结果可视化,因此您可以掌握正在发生的事情,并了解如何解决该问题。一旦数据超过3维,除了直观地使用参数之外,我不确定如何攻击它吗?

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

我将按以下方式处理该问题:

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

如果训练数据的分类率不令人满意,则意味着

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

如果测试数据的分类率不令人满意,则表明您的模型过度拟合了数据:

  • 您的模型太复杂(参数太多),并且需要进一步限制,
  • 或者您在太小且需要更多数据的训练集中进行训练

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

收藏
评论

您可以尝试通过PCA或类似技术来降低问题的维度。当心PCA有两个要点。 (1)假定应用了该数据的数据是正态分布的,并且(2)生成的数据失去了其自然含义(导致出现黑匣子)。如果可以忍受,请尝试一下。

另一种选择是尝试几种参数选择算法。由于在这里已经提到了SVM,因此您可以尝试Chang和Li( 使用线性SVM进行特征排名 )的方法,其中他们使用线性SVM预先选择“有趣的特征”,然后在所选特征上使用基于RBF的SVM。如果您熟悉python数据挖掘库Orange,则可以在不到一个小时的时间内对此方法进行编码。请注意,这是一种贪婪的方法,由于其“贪婪”,在输入变量高度相关的情况下可能会失败。在这种情况下,如果您不能使用PCA解决此问题(请参见上文),则可能需要使用启发式方法,该方法尝试选择最佳的预测变量组合。这种方法的主要缺陷是过拟合的巨大潜力。确保您拥有一堆在整个模型构建过程中都没有看到的“原始”数据。确定模型准备就绪后,仅对该数据测试一次模型。如果失败,则不再使用此数据来验证另一个模型,您将不得不查找新的数据集。否则,您将无法确定自己不会再次过拟合。

参数选择论文列表: 高维基因组微阵列数据的特征选择

哦,还有关于SVM的另一件事。 SVM是一个黑匣子。您最好找出生成数据的机制,然后对机制而非数据进行建模。另一方面,如果这是可能的话,很可能您不会在这里问这个问题(我对过度拟合也不会那么痛苦)。

有关参数选择的论文列表

  1. 高维基因组微阵列数据的特征选择
  2. 包装器,用于特征子集选择
  3. 粒子群算法中的参数选择
  4. 我在开发这种随机方法的实验室工作,以计算机方式确定分子的药物性质
收藏
评论

您如何处理数据 ?我的回答: 什么都没有 。 SVM 设计用于处理高维数据。我现在正在研究一个涉及使用SVM进行监督分类的研究问题。除了在Internet上查找来源外,我还对分类之前降维的影响做了自己的实验。使用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 link ,参数C和gamma对分类成功至关重要。 libsvm常见问题解答,尤其是此输入链接 ,包含更多有用的提示。其中:

  1. 在分类之前缩放要素。
  2. 尝试获得平衡的课程。如果不可能的话,那么对一个班级要比对另一个班级更严厉。请参阅有关SVM不平衡的更多参考。
  3. 检查SVM参数。尝试多种组合以获得最佳组合。
  4. 首先使用RBF内核。它几乎总是最有效的(从计算上来说)。
  5. 差点忘了...测试之前,请交叉验证

编辑:让我只添加此“数据点”。最近,我使用SVM和PCA预处理对四个专用数据集进行了另一个大规模实验。对于任何降低的尺寸选择,PCA均未改善分类结果。具有简单对角线缩放比例的原始数据(对于每个特征,均值减去平均值并除以标准差)效果更好。我没有得出任何广泛结论,只是分享这个实验。也许在不同的数据上,PCA可以提供帮助。

收藏
评论

一些建议:

  • 将数据(仅用于可视化)投影到较低维度的空间(使用PCA或MDS或对您的数据有意义的任何东西)

  • 尝试了解为什么学习会失败。您认为它适合吗?您认为您有足够的数据吗?功能中可能没有足够的信息来解决您要解决的任务吗?有一些方法可以在不可视化数据的情况下回答这些问题。

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

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题