支持向量机与K最近邻居

时间:2013-10-17 08:43:04

标签: matlab machine-learning libsvm

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

3 个答案:

答案 0 :(得分:8)

kNN和SVM代表了不同的学习方法。每种方法都暗示了底层数据的不同模型。

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

您必须查看场景的具体细节,以便更好地决定最佳使用哪种算法和配置。

答案 1 :(得分: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

答案 2 :(得分:5)

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

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

问题:

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

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

3)您是在测量样品内或样品外的准确度吗?