支持向量机与K最近邻居

Moh*_*ain 6 matlab machine-learning libsvm

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

Sha*_*hai 8

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

SVM假设存在分离数据点的超平面(非常有限的假设),而kNN试图以非参数方式近似数据的基础分布(parsen-window估计器的粗略近似).

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

  • "SVM假设存在一个超平面分离数据点(相当严格的假设)"实际上并不是限制性的,具有RBF内核的SVM可以使用任何标签组合来分散任何数据集. (2认同)
  • @ValentinHeinitz 你真的不希望在 10 行内得到准确的解释吗? (2认同)

Adr*_*nNK 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


Max*_*Max 5

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

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

给你的问题:

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

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

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