我正在尝试在一个MNIST数据集上训练一个svm分类器,以区分两个字符。我使用了指数核,C=10和gamma=10^-6。我还打印了支持向量:
clfretrainC=svm.SVC(C=Cfinal,kernel="rbf",gamma=gammafinal)clfretrainC.fit(ReTraintotx,ReTraintoty)Pefinal=1-clfretrainC.score(Testtotx,Testtoty)print "Test Error"print Pefinalprint "Number of Support Vectors"print clfretrainC.support_vectors_print clfretrainC.support_vectors_.shapesv=clfretrainC.support_vectors_
然而,我希望找到最接近分离超平面的支持向量,因为这些向量最难分类。有没有一个函数可以让我做到这一点?
如果没有,我该如何进行?
回答:
如果你查看sklearn.svm.SVC的文档,你会看到:
decision_function(X) 样本X到分离超平面的距离。
所以你可以这样做(对于最接近的n个向量)
clf.support_vectors_[np.abs(clf.decision_function(clf.support_vectors_)).argsort()[:n]]