支持向量机SVM可视化(不调用sklearn库)

网上关于SVM可视化内容基本上都是直接调用sklearn库来实现,没有自己实现的,本人十分鄙视这种在学习阶段只会调库而没有自己的想法的人。故研究了一下实现了SVM的可视化(不调用sklearn库),如下所示

支持向量机SVM可视化(不调用sklearn库)_第1张图片

支持向量机SVM可视化(不调用sklearn库)_第2张图片支持向量机SVM可视化(不调用sklearn库)_第3张图片

支持向量机(SVM) -可视化(不调用sklearn库)

思路+伪代码:

1、构建采样点网络

# 要画决策边界,必须要有网格
axis = np.linspace(min(X[:,0]),max(X[:,0]),30)
ayis = np.linspace(min(X[:, 1]),max(X[:, 1]),30)
# 将特征向量转换为特征矩阵的函数
# 核心是将两个特征向量广播,以便获取x.shape*y.shape这么多点的横坐标和纵坐标
# 获取x.shape*y.shape这么多个坐标点
X,Y = np.meshgrid(axis,ayis)
# xy就是形成的网络,遍及在画布上密集的点
XY = np.vstack([X.ravel(),Y.ravel()]).T# ravel()降维函数,把每一行都放在第一行,vstack能够将多个结构一致的一维数组按行堆叠起来

2、计算采样点到决策分界面的距离集合

采样点集合:XY

决策分界面:

点到平面距离(含负数):

支持向量机SVM可视化(不调用sklearn库)_第4张图片

 得到采样点到决策分界面的距离集合D

3、使用contourf函数绘制等高线

# 输入每个新样本到决策样本边界的距离                
d = distance(XY)# D:各个点到决策边界距离
D = d.reshape(X.shape)
# 画决策边界到平行决策边界的超平面
plt.contourf(X, Y, D, levels=[-1, 0, 1], alpha=0.5)
plt.show()

支持向量机(SVM) -可视化(不调用sklearn库)效果图

 核函数:liner(C=+∞) 

支持向量机SVM可视化(不调用sklearn库)_第5张图片

  核函数:poly (C=+∞) 

支持向量机SVM可视化(不调用sklearn库)_第6张图片

核函数:rbf (C=+∞)

支持向量机SVM可视化(不调用sklearn库)_第7张图片

核函数:liner(C=0.2)   

支持向量机SVM可视化(不调用sklearn库)_第8张图片

核函数:poly (C=0.00001)  

支持向量机SVM可视化(不调用sklearn库)_第9张图片

 核函数:rbf (C=1)

支持向量机SVM可视化(不调用sklearn库)_第10张图片

你可能感兴趣的:(机器学习,支持向量机,可视化,svm)