在实验8支持向量机中,绘制在简化版的SMO算法下生成的分类超平面,以及绘制在完整版的SMO算法下生成的分类超平面;数据集仍然用实验8中的“testSet.txt”python代码怎么写?
时间: 2024-03-17 17:47:14 浏览: 23
首先,我们需要导入必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
from svm import *
```
然后,读取数据集:
```python
data = np.loadtxt('testSet.txt')
X = data[:, :-1]
y = data[:, -1]
```
接着,使用简化版的SMO算法生成分类超平面并绘制:
```python
b, alphas = smoSimple(X, y, 0.6, 0.001, 40)
w = calcWs(alphas, X, y)
plt.scatter(X[:, 0], X[:, 1], c=y)
x1 = np.min(X[:, 0])
x2 = np.max(X[:, 0])
y1 = (-b - w[0]*x1) / w[1]
y2 = (-b - w[0]*x2) / w[1]
plt.plot([x1, x2], [y1, y2])
plt.show()
```
最后,使用完整版的SMO算法生成分类超平面并绘制:
```python
svm = SVM()
svm.fit(X, y)
plt.scatter(X[:, 0], X[:, 1], c=y)
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.2),
np.arange(y_min, y_max, 0.2))
Z = svm.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contour(xx, yy, Z, cmap=plt.cm.Paired)
plt.show()
```
注意,第二段代码需要调用实验8中的 `svm.py` 文件中的 `SVM` 类。
阅读全文