支持向量机(Support Vector Machine,SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。
SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器。
SVM可以通过核方法(kernel method)进行非线性分类,是常见的核学习(kernel learning)方法之一。
import numpy as np import matplotlib.pyplot as plt from sklearn import svm, datasets # % matplotlib inline # 鸢尾花数据 iris = datasets.load_iris() X = iris.data[:, 0:2] # 为便于绘图仅选择2个特征,可尝试另外两个特征效果更好X = iris.data[:, 2:4] y = iris.target # 测试样本(绘制分类区域) xlist1 = np.linspace(X[:, 0].min(), X[:, 0].max(), 200) xlist2 = np.linspace(X[:, 1].min(), X[:, 1].max(), 200) XGrid1, XGrid2 = np.meshgrid(xlist1, xlist2) # 非线性SVM:RBF核,正则化系数为1,超参数为0.5,SMO迭代精度1e-5, 内存占用1000MB svc = svm.SVC(kernel='rbf', C=1, gamma=0.5, tol=1e-5, cache_size=1000).fit(X, y) print(svc.score(X,y)) # 预测并绘制结果 Z = svc.predict(np.vstack([XGrid1.ravel(), XGrid2.ravel()]).T) Z = Z.reshape(XGrid1.shape) plt.contourf(XGrid1, XGrid2, Z, cmap=plt.cm.hsv) plt.contour(XGrid1, XGrid2, Z, colors=('k',)) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', linewidth=1.5, cmap=plt.cm.hsv) plt.show()