我有一个使用KNN算法的classify.By数据集,我得到了90%的准确率,但通过使用支持向量机,我只能获得超过70%的准确率。支持向量机不比KNN好吗?我知道这可能是愚蠢的问题,但是,支持向量机的参数是什么,它将给出近乎KNN算法的近似结果。我在matlab R2008上使用libsvm包。
发布于 2013-10-17 16:56:59
kNN和支持向量机代表了不同的学习方法。每种方法都隐含着底层数据的不同模型。
支持向量机假设存在一个超平面来分离数据点(这是一个相当严格的假设),而kNN则试图以非参数方式近似数据的潜在分布(参数窗口估计器的粗略近似)。
您必须查看场景的细节,以便更好地决定最佳使用哪种算法和配置。
发布于 2013-10-17 17:01:44
这真的取决于您正在使用的数据集。如果你有这个图像的第一行( http://scikit-learn.org/stable/_images/plot_classifier_comparison_1.png ),kNN会工作得很好,而线性支持向量机工作得很差。
如果你想让SVM表现得更好,你可以使用基于内核的SVM,如图所示(它使用rbf内核)。
如果你正在使用python的scikit-learn,你可以在这里使用一些代码,看看如何使用内核支持向量机http://scikit-learn.org/stable/modules/svm.html
发布于 2013-10-17 21:15:54
kNN基本上说的是“如果你接近坐标x,那么分类将类似于在x处观察到的结果。”在SVM中,接近的类比将使用具有“小”带宽参数的高维内核,因为这将导致SVM过拟合更多。也就是说,支持向量机更接近于“如果你接近坐标x,那么分类将类似于在x处观察到的分类。”
我建议您从高斯内核开始,并检查不同参数的结果。根据我自己的经验(当然,这是专注于某些类型的数据集,所以您的里程可能会有所不同),tuned kNN优于tuned SVM。
问你几个问题:
1)如何在kNN中选择k?
2)您尝试过支持向量机的哪些参数?
3)您测量的是样本内精度还是样本外精度?
https://stackoverflow.com/questions/19421954
复制相似问题