在学习分类时,我看到了两种不同的论点。一是将数据投影到低维空间,例如使用 PCA,使数据更容易分离。另一个是投影到更高维空间,例如使用内核 SVM,使分离更容易。
哪个是对的?还是取决于数据?用 PCA 向下投影,然后用内核 SVM 向上投影该空间(反之亦然)怎么样?
在学习分类时,我看到了两种不同的论点。一是将数据投影到低维空间,例如使用 PCA,使数据更容易分离。另一个是投影到更高维空间,例如使用内核 SVM,使分离更容易。
哪个是对的?还是取决于数据?用 PCA 向下投影,然后用内核 SVM 向上投影该空间(反之亦然)怎么样?
这个答案还从 pAt84 的答案中加分
降维。 我不认为减少维度实际上可以使您的数据更加可分离,但它还有其他一些好处。首先,随着空间维度的增长,您通常需要更多样本才能捕捉模式,这只是体积问题。当然,这一切都取决于您的数据的相关性(如果您添加重复的列,它不会改变)。因此,当您拥有包含太多组件的特征向量时,减少您的维度可能是必要的,例如,如果您使用文本并有一种 TF-IDF,它将为每个单词(或引理)创建一个维度。此外,它可以防止你受到维度的诅咒(例如,如果你需要在之后执行某种 KNN)。显然,它也大大加快了您在缩减空间中运行的算法 - 尽管缩减维度的成本可能高于在缩减维度中运行算法的收益。有一件事是肯定的:降维会减少信息。大多数情况下,它通过丢弃输入数据中的相关性来做到这一点。
内核技巧。 话虽如此,内核技巧是一个完全不同的想法。一些在原始空间中不可分离的数据可以变成更高的:想象两个半径为和的圆被采样,这些点是不可分离的,但如果你将距离添加到他们成为。所以想法是我们在原始空间中使用点积的方式是不够的,我们应该在与原点有距离的映射空间中使用点积,这就是内核的核心思想:查找函数它可以根据需要将我们的数据“分散”到希尔伯特空间中。但我更喜欢看到它的方式是,使用内核是使用数据的先验信息:如何比较它们。粗略地说,内核或多或少是一个相似度矩阵,而基于内核的方法是一种将天真的比较方式(原始空间中的常规点积)转换为最适合您的数据的方法(您的核心)。然后,实际上,它可以以数学方式对应于增加空间比较发生的维度。准确地说:就好像您将数据映射到更高维空间(RKHS)中,该空间可以具有无限维(例如,使用 RBF),并且您在该空间中使用了点积。基于内核的方法的主要技巧是您实际上从不将数据显式映射到 RKHS - 这就是它可以工作的原因!所有的工作都是通过在两个样本上应用你的内核来完成的。最终,您没有获得任何信息,这意味着它有助于提供一个数学框架来解释它是如何工作的,但直观地说,这个想法只是您提供了一种更好的方法来比较您的数据:没有真正明确地添加维度您的数据(计算上),您只是找到了一种更合适的方法来比较它们。
现在没有什么能阻止你同时做这两件事:你可以尝试通过执行 TF-IDF、PCA 和 RBF-SVM 来对文本进行分类(尽管大多数时候线性分类对于文本来说是可以的,但尽管如此,这将非常有意义)。
我在评论中没有足够的空间来发表我对文斯答案的看法,这当然非常好,但缺乏一些额外的洞察力。答案可以合并吗?
降维不会使数据在训练期间更加可分离:您正在泄露信息。然而,这种信息消耗可能对学习模型的泛化有用,即它在看不见的数据上的性能将会提高。
您并不总是需要更多的样本来捕捉高维空间中的模式,尽管通常情况下可能确实如此。它还取决于特征的相关性。如果你只是将一个特征向量加倍,即两个特征向量将相同,那么除了可能扰乱学习器的正则化方案之外,维度的增加显然不会产生重大影响。看数据的相关性是非常重要的,特征矩阵的秩可以是一个很好的内部。
Vince 提出了一个非常好的观点,他说降维可以在训练和测试期间加强你的算法。但是,请记住,减少本身也具有计算复杂性,因此执行 PCA 和添加 SVM 可能不会给您带来太多的加速(我认为可以吸收到一个权重向量中)。但是,如果您保持降维足够简单,那么这将真正对您有利。一个很好的例子是对象检测中的 HOG 特征(http://cs.brown.edu/~pff/papers/lsvm-pami.pdf)。在论文中,PCA 是对 HOG 特征向量进行的。仔细观察特征向量会发现,简单的降维,只是总结不同的特征组,就足够了,而且确实如此。这给了 2 到 3 倍的加速。
至于内核技巧:将数据“提升”到更高维空间的函数不一定必须映射到欧几里得空间,而是映射到再现内核希尔伯特空间 (RKHS)。这使您在设计此类功能时更加自由。核函数的格拉姆矩阵,即所有训练样例组合在高维空间中的点积,可以模糊地看作相似/不相似矩阵。但是,我不会真的把这个想法推得太远。对于 RBF 内核,这当然是正确的,但多项式内核很难以这种方式解释。
实际上,当使用内核时,您的特征向量中会添加额外的组件,即维度会增加。它在 RKHS 中隐含地这样做。对于许多内核,例如多项式内核,维数会大量增加。对于 RBF 内核,它在某些条件下甚至是无限的。
两者都做(PCA + 基于内核的学习)称为内核 pca,本质上融合了这两种方法。
但请记住:就像降维可能会加快您的算法一样,核函数几乎总是会减慢它们的速度,因为它在测试时会增加计算复杂性,例如线性分类器。这可以通过显式特征映射部分规避,即实际执行从原始空间到高维空间的映射函数并关注维度。参见,例如,这篇论文:http ://www.robots.ox.ac.uk/~vedaldi/assets/pubs/vedaldi11efficient.pdf这个技巧非常好,因为它让你对高维空间有直觉,而不是在具有太多组件的意义上使其太大。一旦你的特征向量被明确地映射到高维空间,你就可以应用一个线性分类器。
当然还有更多(例如低等级扩展),但我认为这两个答案应该给你一个很好的和有点详细的概述。如果您对我们提供给您的信息感到满意,文斯的答案应该被投票并选为最佳答案。
降维:这是一种减少数据集特征的方法,可能对模型开发没有太大贡献。换句话说,降维有助于从我们的数据集中消除“噪音”,从而避免我们的模型过度拟合。
然而,Kernel Trick 通过将其投影到更高维度来帮助我们使线性不可分的数据集变为线性可分的,否则可能会提高模型的精度。使用 Kernel Trick,您可以使非线性数据集线性化。