Moh*_*ain 6 matlab machine-learning libsvm
我有一个数据集来分类.通过使用KNN算法,我得到90%的准确度,但通过使用SVM我只能超过70%.SVM并不比KNN好.我知道这可能是愚蠢的问题,但是,SVM的参数是什么,它将给出几乎近似的结果作为KNN算法.我在matlab R2008上使用libsvm包
kNN和SVM代表不同的学习方法.每种方法都暗示了底层数据的不同模型.
SVM假设存在分离数据点的超平面(非常有限的假设),而kNN试图以非参数方式近似数据的基础分布(parsen-window估计器的粗略近似).
您必须查看场景的细节,以便更好地决定最佳使用哪种算法和配置.
这实际上取决于您使用的数据集.如果你有像这个图像的第一行(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
kNN基本上说"如果你接近坐标x,则分类将类似于x处观察到的结果." 在SVM中,近似模拟将使用具有"小"带宽参数的高维内核,因为这将导致SVM过度拟合.也就是说,SVM将更接近"如果你接近坐标x,那么分类将类似于在x处观察到的分类."
我建议您从高斯内核开始,并检查不同参数的结果.根据我自己的经验(当然,专注于某些类型的数据集,因此您的里程可能会有所不同),调整后的SVM优于调整的kNN.
给你的问题:
1)你如何在kNN中选择k?
2)您为SVM尝试了哪些参数?
3)您是在测量样品内或样品外的准确度吗?