支持向量机算法实现并画出最大间隔超平面
时间: 2023-07-25 13:45:48 浏览: 80
首先需要明确一下,支持向量机(Support Vector Machine,SVM)是一种二分类模型,它的目标是找到一个最大间隔超平面,将数据集分成两类。在实际应用中,我们可以通过将多个二分类器组合来处理多分类问题。
下面是使用Python中的scikit-learn库来实现SVM算法并画出最大间隔超平面的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
# 生成随机数据
np.random.seed(0)
X = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
y = [0] * 20 + [1] * 20
# 创建SVM模型并拟合数据
clf = svm.SVC(kernel='linear')
clf.fit(X, y)
# 画出数据点和最大间隔超平面
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
# 创建网格数据
xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 30),
np.linspace(ylim[0], ylim[1], 30))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# 画出最大间隔超平面和间隔边界
ax.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,
linestyles=['--', '-', '--'])
ax.set_xlim(xlim)
ax.set_ylim(ylim)
plt.show()
```
运行上述代码,可以得到如下的图像:
![image-20211014144741011](svm.png)
其中,红色和蓝色的点分别表示两类数据点,黑色的实线表示最大间隔超平面,黑色的虚线表示间隔边界。可以看到,最大间隔超平面恰好将两类数据点分开,并且离两类数据点最近的点与最大间隔超平面的距离相等,这就是SVM算法的核心思想。
阅读全文