线性可分支持向量机例题
时间: 2024-12-31 20:13:06 浏览: 16
### 线性可分支持向量机示例
对于线性可分的支持向量机(SVM),目标是在特征空间中找到一个最优的超平面来区分不同类别。该超平面不仅能够正确分类训练数据,而且具有最大化的几何间隔。
#### 几何间隔与支持向量
考虑二分类问题,在二维平面上有两个类别的点可以被一条直线完全区分开来。此时,SVM试图找出这样的一条分割线,使得它距离最近的数据点尽可能远[^2]。这些离决策面最近的数据点被称为支持向量。它们决定了最终模型的形式和位置。
#### 构建线性可分SVM模型
下面是一个简单的Python代码片段用于构建并可视化一个线性可分SVM:
```python
from sklearn.svm import SVC
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
# 生成模拟数据集
X, y = make_blobs(n_samples=50, centers=2,
cluster_std=0.6, random_state=4)
# 训练线性SVM分类器
clf = SVC(kernel="linear", C=float('inf'))
clf.fit(X, y)
# 绘制结果图形
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=plt.cm.Paired)
# 获取权重w和支持向量索引svs
w = clf.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(-5, 5)
yy = a * xx - (clf.intercept_[0]) / w[1]
margin = 1 / np.sqrt(np.sum(clf.coef_ ** 2))
yy_down = yy - np.sqrt(1 + a ** 2) * margin
yy_up = yy + np.sqrt(1 + a ** 2) * margin
# 绘制分离超平面及其边界的平行线
plt.plot(xx, yy, 'k-')
plt.plot(xx, yy_down, 'k--')
plt.plot(xx, yy_up, 'k--')
# 将支持向量绘制出来
plt.scatter(clf.support_vectors_[:, 0],
clf.support_vectors_[:, 1],
s=80, facecolors='none', edgecolors='k')
plt.show()
```
这段代码创建了一个由两个簇组成的合成数据集,并使用`sklearn`库中的`SVC`函数实现了线性内核的支持向量机。最后画出了最佳拟合的超平面以及对应的边界线和支持向量。
阅读全文