7

我有一个要分类的数据集。通过使用 KNN 算法,我得到了 90% 的准确率,但通过使用 SVM,我只能得到超过 70% 的准确率。SVM 不比 KNN 好。我知道问这个问题可能很愚蠢,但是 SVM 的参数是什么,它将给出与 KNN 算法几乎近似的结果。我在 matlab R2008 上使用 libsvm 包

4

3 回答 3

9

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

SVM 假设存在一个分离数据点的超平面(相当严格的假设),而 kNN 试图以非参数方式逼近数据的底层分布(粗略逼近 parsen-window 估计器)。

您必须查看场景的具体情况,才能更好地决定最好使用哪种算法和配置。

于 2013-10-17T08:56:58.500 回答
6

这实际上取决于您使用的数据集。如果你有类似这张图片第一行的东西(http://scikit-learn.org/stable/_images/plot_classifier_comparison_1.png),kNN会很好地工作,而线性 SVM 会很糟糕。

如果您希望 SVM 性能更好,您可以使用基于内核的 SVM,就像图片中的那样(它使用 rbf 内核)。

如果您使用 scikit-learn for python,您可以在此处使用代码来了解如何使用内核 SVM http://scikit-learn.org/stable/modules/svm.html

于 2013-10-17T09:01:43.667 回答
6

kNN 基本上说“如果你接近坐标 x,那么分类将类似于在 x 处观察到的结果。” 在 SVM 中,一个近似的模拟将使用具有“小”带宽参数的高维内核,因为这将导致 SVM 过度拟合。也就是说,SVM 将更接近于“如果你接近坐标 x,那么分类将类似于在 x 处观察到的分类”。

我建议您从高斯核开始并检查不同参数的结果。根据我自己的经验(当然,它专注于某些类型的数据集,因此您的里程可能会有所不同),调整后的 SVM 优于调整后的 kNN。

给你的问题:

1)你如何在kNN中选择k?

2)您为SVM尝试了哪些参数?

3) 您是在样品内还是样品外测量准确度?

于 2013-10-17T13:15:54.297 回答