支持向量机:最大边际分割超平面
2024-04-09 19:30:50  阅读数 348

支持向量机:最大边际分割超平面

import numpy as np

import matplotlib.pyplot as plt

from sklearn import svm

from sklearn.datasets import make_blobs

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.rcParams['axes.unicode_minus'] = False

# 我们创建40个用来分割的数据点

X, y = make_blobs(n_samples=40, centers=2, random_state=6)

# 拟合模型,并且为了展示作用,并不进行标准化

clf = svm.SVC(kernel='linear', C=1000)

clf.fit(X, y)

plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)

# 绘制decision function的结果

ax = plt.gca()

xlim = ax.get_xlim()

ylim = ax.get_ylim()

# 创造网格来评估模型

xx = np.linspace(xlim[0], xlim[1], 30)

yy = np.linspace(ylim[0], ylim[1], 30)

YY, XX = np.meshgrid(yy, xx)

xy = np.vstack([XX.ravel(), YY.ravel()]).T

Z = clf.decision_function(xy).reshape(XX.shape)

# 绘制决策边界和边际

ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,

          linestyles=['--', '-', '--'])

# 绘制支持向量

ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,

          linewidth=1, facecolors='none', edgecolors='k')

plt.title("支持向量机:最大边际分割超平面")

plt.show()