线性SVM决策过程的可视化
线性SVM决策过程的可视化
我们可以使用sklearn中的式子来为可视化我们的决策边界,和决策边界平行的两个超平面。
线性可分完整代码:
#导入需要的模块和数据
import numpy as np
from sklearn.datasets import make_blobs
from sklearn.svm import SVC
import matplotlib.pyplot as plt
X,y=make_blobs(n_samples=50,centers=2,cluster_std=0.6,random_state=0)
def plot_svc_decision_function(model,ax=None):
# 获取当前的子图,如果不存在,则创建新的子图
# 默认创建(0.0, 1.0)范围内的横纵坐标
if ax==None:
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
# 要画决策边界,必须要有网格
axisx = np.linspace(xlim[0], xlim[1], 30)
axisy = np.linspace(ylim[0], ylim[1], 30)
# 将两个一维数组变成二维数组
axisx, axisy = np.meshgrid(axisx, axisy)
# 将特征向量转换为特征矩阵的函数
# 核心是将两个特征向量广播,以便获取x.shape*y.shape这么多点的横坐标和纵坐标
xy = np.vstack([axisx.ravel(), axisy.ravel()]).T
# 获取x.shape*y.shape这么多个坐标点
# ravel()降维函数,把每一行都放在第一行,vstack能够将多个结构一致的一维数组按行堆叠起来
# xy就是形成的网络,遍及在画布上密集的点
# 建模通过fit计算对应决策边界
# 输入每个样本到决策样本边界的距离
P = model.decision_function(xy).reshape(axisx.shape)
# 画决策边界到平行决策边界的超平面
ax.contour(
axisx, axisy, P,
c='k',
levels=[-1, 0, 1],
alpha=0.5,
linestyle=['--', '-', '--']
)
ax.set_xlim(xlim)
ax.set_ylim(ylim)
clf=SVC(kernel="linear").fit(X,y)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap="rainbow")
plot_svc_decision_function(clf)
plt.xticks([])
plt.yticks([])
plt.show()
线性SVM决策过程的可视化
线性SVM决策过程的可视化完整代码: