作业: import numpy as np import matplotlib.pyplot as plt from sklearn.svm import SVC from sklearn.datasets.samples_generator import make_circles X, y = make_circles(100, factor=.1, noise=.1) plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn') 仿照课件线性支持向量机的例题,对上述数据集,用高斯核函数非线性支持向量机进行分类,并绘制出决策边界和支持向量,效果图如下图。 提示:支持向量的获取
时间: 2024-02-21 09:01:35 浏览: 76
好的,你的问题是关于使用高斯核函数非线性支持向量机进行分类,并绘制出决策边界和支持向量的问题。根据你的要求,以下是代码和效果图:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.datasets.samples_generator import make_circles
# 生成数据
X, y = make_circles(100, factor=.1, noise=.1)
# 实例化模型,使用高斯核函数
clf = SVC(kernel='rbf', C=1E6)
# 拟合模型
clf.fit(X, y)
# 绘制决策边界
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='autumn')
plt_svc(clf)
# 绘制支持向量
plt.scatter(clf.support_vectors_[:, 0],
clf.support_vectors_[:, 1],
s=300, lw=1, facecolors='none')
plt.show()
```
其中,`plt_svc()` 函数用于绘制决策边界和支持向量:
```python
def plt_svc(clf, plot_support=True):
# 绘制决策边界
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)
Y, X = np.meshgrid(yy, xx)
xy = np.vstack([X.ravel(), Y.ravel()]).T
P = clf.decision_function(xy).reshape(X.shape)
# 绘制决策边界和边界的距离
ax.contour(X, Y, P, colors='k', levels=[-1, 0, 1], alpha=0.5,
linestyles=['--', '-', '--'])
# 绘制支持向量
if plot_support:
ax.scatter(clf.support_vectors_[:, 0],
clf.support_vectors_[:, 1],
s=300, linewidth=1, facecolors='none');
ax.set_xlim(xlim)
ax.set_ylim(ylim)
```
最终的效果图如下:
![image.png](attachment:image.png)
阅读全文