16

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

1、2 或 3 维数据可以与算法的结果一起可视化,因此您可以了解正在发生的事情,并了解如何解决问题。一旦数据超过 3 维,除了直观地玩弄参数之外,我真的不知道如何攻击它?

4

5 回答 5

26

你对数据做了什么?我的回答:没有。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. 差点忘了……在测试之前,交叉验证

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

于 2010-02-13T00:08:11.507 回答
7

一些建议:

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

  • 试着理解为什么学习会失败。你觉得它过拟合吗?你认为你有足够的数据吗?您的功能中是否可能没有足够的信息来解决您要解决的任务?有一些方法可以在不可视化数据的情况下回答每个问题。

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

于 2010-02-13T00:17:20.240 回答
4

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

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

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

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

参数选择论文列表

  1. 高维基因组微阵列数据的特征选择
  2. 特征子集选择的包装器
  3. 粒子群优化中的参数选择
  4. 我在开发这种随机方法的实验室工作,以计算机方式确定分子的药物样特征
于 2010-02-14T09:42:05.677 回答
3

我将按如下方式处理问题:

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

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

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

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

  • 您的模型太复杂(参数太多),需要进一步限制,
  • 或者你在一个太小的训练集上训练它,你需要更多的数据

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

于 2010-02-14T08:32:39.627 回答
1

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

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

如果您选择 Newton-Raphson's,可能是一个不错的起点。

于 2010-02-13T00:30:27.157 回答