# 导库 import numpy as np import matplotlib.pyplot as plt from sklearn import svm from sklearn.datasets import make_blobs # 创建数据点并分类 a, b = make_blobs(n_samples=100, centers=2, random_state=6) # 以散点图的形式把数据画出来 plt.scatter(a[:, 0], a[:, 1], c=b, s=30, cmap=plt.cm.Paired) # 创建一个多项式内核的支持向量机模型 clf = svm.SVC(kernel='poly', C=1000) clf.fit(a, b) # 建立图像坐标 axis = plt.gca() xlim = axis.get_xlim() ylim = axis.get_ylim() # 生成两个等差数列 xx = np.linspace(xlim[0], xlim[1], 30) yy = np.linspace(ylim[0], ylim[1], 30) # print("xx:", xx) # print("yy:", yy) X, Y = np.meshgrid(xx, yy) # print("X:", X) # print("Y:", Y) xy = np.vstack([X.ravel(), Y.ravel()]).T Z = clf.decision_function(xy).reshape(X.shape) # 画出分界线 axis.contour(X, Y, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--']) axis.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100, linewidths=1, facecolors='none') plt.show()解释一下每行代码的意思
时间: 2023-09-17 10:07:21 浏览: 134
import numpy as np import matplotlib.pyplot as plt import math
好的,我来逐行解释一下这段代码的意思:
```
# 导库
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs
```
导入必要的库:numpy用于数组操作,matplotlib用于数据可视化,sklearn中的svm用于支持向量机,make_blobs用于生成随机数据。
```
# 创建数据点并分类
a, b = make_blobs(n_samples=100, centers=2, random_state=6)
```
使用make_blobs函数生成100个随机数据点,其中centers=2表示生成的数据点分为两类。
```
# 以散点图的形式把数据画出来
plt.scatter(a[:, 0], a[:, 1], c=b, s=30, cmap=plt.cm.Paired)
```
使用scatter函数将生成的数据点在二维平面中绘制成散点图,其中a[:,0]表示取a数组中的第一列,a[:,1]表示取a数组中的第二列,c=b表示按照b数组中的值进行颜色编码,s=30表示散点的大小,cmap=plt.cm.Paired表示使用Paired颜色映射。
```
# 创建一个多项式内核的支持向量机模型
clf = svm.SVC(kernel='poly', C=1000)
clf.fit(a, b)
```
创建一个支持向量机模型,kernel='poly'表示使用多项式内核,C=1000表示正则化参数,训练数据a和b。
```
# 建立图像坐标
axis = plt.gca()
xlim = axis.get_xlim()
ylim = axis.get_ylim()
```
获取当前图形的坐标轴对象,然后获取x轴和y轴的范围。
```
# 生成两个等差数列
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
```
使用linspace函数生成两个等差数列,分别表示在x轴和y轴上的30个点。
```
X, Y = np.meshgrid(xx, yy)
xy = np.vstack([X.ravel(), Y.ravel()]).T
Z = clf.decision_function(xy).reshape(X.shape)
```
使用meshgrid函数生成一个由xx和yy组成的网格,然后使用vstack和ravel函数将网格展平成一个二维数组xy,clf.decision_function(xy)表示计算xy点到分类边界的距离,reshape函数将距离数组Z的形状变成与xx和yy相同。
```
# 画出分界线
axis.contour(X, Y, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
```
使用contour函数在图形中画出分类边界线,其中X、Y和Z分别表示x轴、y轴和距离数组,levels=[-1, 0, 1]表示绘制三条等高线,colors='k'表示颜色为黑色,alpha=0.5表示透明度为0.5,linestyles=['--', '-', '--']表示绘制三条虚线。
```
axis.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100, linewidths=1, facecolors='none')
```
使用scatter函数在图形中标记支持向量的位置,其中clf.support_vectors_表示获取支持向量的位置,[:,0]和[:,1]分别表示取第一列和第二列,s=100表示支持向量的大小,linewidths=1表示边框线宽度为1,facecolors='none'表示支持向量没有填充颜色。
```
plt.show()
```
展示图形。
阅读全文