线性SVM决策过程的可视化

线性SVM决策过程的可视化
我们可以使用sklearn中的式子来为可视化我们的决策边界,和决策边界平行的两个超平面。
线性SVM决策过程的可视化
线性可分完整代码:
线性SVM决策过程的可视化

#导入需要的模块和数据
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决策过程的可视化
线性SVM决策过程的可视化完整代码: