Sklearn 支持向量机 SVM

Sklearn 支持向量机 SVM

支持向量机(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()

numpy np.meshgrid 网格点坐标矩阵 用法

numpy np.vstack() 和 np.hstack() 用法

发表回复

您的电子邮箱地址不会被公开。