支持向量机:也叫支持向量网络,可以继续有监督,半监督,无监督学习
有监督学习:线性二分类与回归, 非线性二分类与回归,普通连续型变量的回归,概率型连续变量的回归
无监督学习:支持向量机的聚类(SVC),异常值检测
半监督学习:转导支持向量机
支持向量机用途最广泛领域属于线性与非线性分类用途
支持向量机可以进行手写数字识别,人脸识别,文本分类,图像分类,是最接近深度学习的机器学习算法
支持向量机的原理:在数据中找到超平面作为决策边界,并且使得模型的误差尽量小
超平面:当前空间的子空间,比当前空间小一维,三维空间的超平面是二维平面
支持向量机的目标是:找到边际最大的决策边界
支持向量机的决策过程可视化
from sklearn.datasets import make_blobs #制造数据
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import numpy as np
x,y = make_blobs(n_samples=50,centers=2,random_state=0,cluster_std=0.6)
plt.scatter(x[:,0],x[:,1],c= y,s= 50,cmap = "rainbow")
a = plt.gca() #创建同样的画布
plt.xticks([])
plt.yticks([])
plt.show()
绘制图像网格找到决策边界与边际,为后续使用等高线绘制边界与边际做铺垫
xlim = a.get_xlim() #查看画布数据横纵坐标范围
ylim = a.get_ylim()
xlim
ylim
aisx = np.linspace(xlim[0],xlim[1],30) #在最小值与最大值之间创建30个有规律的数据(在x轴上间隔相同的30个点)
aisy = np.linspace(ylim[0],ylim[1],30)
aisx
aisx,aisy = np.meshgrid(aisx,aisy) #使用网格函数将数据转换为二维网格数据
aisx
aisx.shape
aisx.ravel().shape #使用ravel将数据进行拉平,一种降维方法
aisy.ravel().shape
xy = np.vstack([aisx.ravel(),aisy.ravel()]).T #将数据进行堆叠并形成网格
xy.shape
plt.scatter(xy[:,0],xy[:,1],s = 1,cmap = "rainbow") #网格绘制
建模训练
clf = SVC(kernel = "linear").fit(x,y) #训练实质是在计算决策边界
z = clf.decision_function(xy).reshape(aisx.shape) #返回每个样本对应到决策边界的距离
z
plt.scatter(x[:,0],x[:,1],c= y,s= 50,cmap = "rainbow")
a = plt.gca() #创建同样的画布
a.contour(aisx,aisy,z #使用等高线函数,绘制决策边界与决策边际线段
,colors = "k"
,levels = [-1,0,1]
,alpha = 0.5
,linestyles = ["--","-","--"])
a.set_xlim(xlim)
a.set_ylim(ylim)
上述图像中,实线是决策边界,虚线是决策边际(超平面)
x[10] #在图中查看x[10]的位置的点
plt.scatter(x[:,0],x[:,1],c = y,s = 50,cmap = "rainbow")
plt.scatter(x[10,0],x[10,1],c = "black",s = 50,cmap = "rainbow")
对模型进行探索
clf.predict(x) #预测
clf.score(x,y) #返回准确率
支持向量:决策边际经过其中心的点
clf.support_vectors_ #返回支持向量,这个模型中有三个支持向量
clf.n_support_ #每个类中返回的支持向量的个数