# -*- coding: utf-8 -*- """ Created on Fri Apr 23 21:10:25 2021 例题:我们把(2,0),(0,2),(0,0)这三个点当作类别1; (3,0),(0,3),(3,3)这三个点当作类别2, 训练好SVM分类器之后,我们预测(-1,-1),(4,4)这两个点所属的类别。 @author: Administrator """ import numpy as np from sklearn.svm import SVC import matplotlib.pyplot as plt data = np.array([[2,0,1],[0,2,1],[0,0,1],[3,0,2],[0,3,2],[3,3,2]]) x = np.array(data[:, 0:2]) y = np.array(data[:,2]) model = SVC(kernel='linear') model.fit(x,y) # ============================================================================= # print(model.dual_coef_) #决策函数中支持向量的系数 # print(model.coef_) #赋予特征的权重(原始问题中的系数)。这仅适用于线性内核 # print(model.intercept_) # 决策函数中的常量 # print(model.support_) #支持向量索引 # print(model.n_support_) #每一类的支持向量数目 print(model.support_vectors_) #支持向量 # ============================================================================= Cp = [[-1,-1],[4,4]] pre = model.predict(Cp) #对Cp中的点进行类别预测 print(pre) plt.scatter(x[:, 0], x[:, 1], c=y, s=30, cmap=plt.cm.Paired) # plot the decision function ax = plt.gca() xlim = ax.get_xlim() ylim = ax.get_ylim() # create grid to evaluate model 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 = model.decision_function(xy).reshape(XX.shape) # plot decision boundary and margins ax.contour(XX, YY, Z, colors='k', levels=[0], alpha=1, linestyles=['-']) # plot support vectors ax.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1], s=100, linewidth=1, facecolors='none', edgecolors='k') plt.show()代码解释
时间: 2023-08-06 20:05:46 浏览: 152
这段代码是一个 SVM 分类的例子。具体来说,对于给定的数据集,它首先将特征和标签分别提取出来,然后用线性核的 SVM 进行训练。最后,它使用训练好的 SVM 对两个新数据点进行分类预测,并将分类结果打印出来。同时,它还绘制了数据集、决策边界和支持向量等可视化结果。下面是代码的具体解释:
1. 导入必要的库:
```python
import numpy as np
from sklearn.svm import SVC
import matplotlib.pyplot as plt
```
2. 定义数据集:
```python
data = np.array([[2,0,1],[0,2,1],[0,0,1],[3,0,2],[0,3,2],[3,3,2]])
x = np.array(data[:, 0:2]) #特征
y = np.array(data[:,2]) #标签
```
这里的数据集是一个二维的点集,其中前两列是特征,第三列是标签。
3. 创建 SVM 分类器并进行训练:
```python
model = SVC(kernel='linear')
model.fit(x,y)
```
这里使用了线性核的 SVM 分类器,并用数据集进行训练。
4. 预测新数据点的分类:
```python
Cp = [[-1,-1],[4,4]]
pre = model.predict(Cp)
print(pre)
```
这里预测了两个新数据点 (-1,-1) 和 (4,4) 的分类,并将分类结果打印出来。
5. 绘制数据集、决策边界和支持向量:
```python
plt.scatter(x[:, 0], x[:, 1], c=y, s=30, cmap=plt.cm.Paired)
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 = model.decision_function(xy).reshape(XX.shape)
ax.contour(XX, YY, Z, colors='k', levels=[0], alpha=1, linestyles=['-'])
ax.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1], s=100, linewidth=1, facecolors='none', edgecolors='k')
plt.show()
```
这里使用散点图展示了数据集,其中类别1用红色点表示,类别2用蓝色点表示;接着,在此基础上绘制了决策边界和支持向量。其中,决策边界是 SVM 分类器的决策函数的零界面,即所有预测为正类和负类的点所在的曲线。而支持向量则是距离决策边界最近的一些点,它们决定了决策边界的位置和形状。
阅读全文