支持向量机 vs K最近邻算法

7

我有一个要分类的数据集。使用KNN算法,我得到了90%的精度,但是使用SVM仅能获得70%以上的精度。难道SVM不比KNN好吗?我知道这可能是一个愚蠢的问题,但是,哪些SVM参数会给出几乎与KNN算法相近的结果?我正在matlab R2008上使用libsvm包。


2
这个问题似乎不适合在此讨论,因为它涉及到机器学习,更适合在http://stats.stackexchange.com/上进行讨论。 - Shai
机器学习不是编程的一部分吗?这是一个开放的平台,任何人都可以自由地提出与编码相关并需要人们集思广益的问题。因此,如果您觉得没有用处,可以远离这个讨论并让其他人参与。 - Mohit Jain
我并不认为这里不适合它,我只是认为你会在更专业的论坛上找到更有见地的听众和更好的答案,比如http://stats.stackexchange.com。 - Shai
虽然我不是专家,但你很少会发现两种完全不同的方法,其中一种总是比另一种更好,无论底层数据结构如何。 - Dennis Jaheruddin
你在使用SVM时有调整超参数吗?如果没有,那就是为什么它的性能很差的原因。 - Marc Claesen
3个回答

9

kNN和SVM代表不同的学习方法。每种方法都意味着对基础数据使用不同的模型。

SVM假设存在一个超平面来分离数据点(这是一个相当严格的假设),而kNN则试图以非参数方式近似数据的基础分布(一种粗糙的Parzen窗口估计的近似方法)。

要做出更好的决策,选择最合适的算法和配置,您需要查看具体情况。


2
"SVM假设存在一个超平面来分离数据点(这是相当严格的假设)" 实际上这并不严格,使用RBF核的SVM可以散布任何带有任何标签组合的数据集。 - Pedrom
@Pedrom 确实,核支持向量机是非常强大的工具。 - Shai
1
@ValentinHeinitz 你不会真的期望在10行代码里得到一个准确的解释吧? - Shai

6

6
kNN基本上是说,“如果你靠近坐标x,那么分类结果将类似于在x处观察到的结果。”在SVM中,一个接近的类比是使用具有“小”带宽参数的高维核函数,因为这会导致SVM过度拟合。也就是说,SVM会更接近“如果你靠近坐标x,那么分类结果将类似于在x处观察到的结果。”
我建议您从高斯核开始,检查不同参数的结果。根据我的经验(当然,这是专注于某些类型的数据集,所以您的效果可能会有所不同),调整后的SVM优于调整后的kNN。
问题:
1)您如何选择kNN中的k?
2)您已经尝试过哪些SVM参数?
3)您是在样本内还是样本外测量准确性?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接