xianxing支持向量机
时间: 2025-01-05 11:33:43 浏览: 7
### 线性支持向量机(SVM)原理
线性支持向量机是一种用于解决二分类问题的支持向量机变体,适用于数据在线性空间内可以被直线或超平面分离的情形。在这种情况下,算法的主要目的是寻找一个最优的超平面,这个超平面能够将两个类别尽可能清晰地区分开来。
#### 寻找最大间隔超平面
为了实现这一点,线性支持向量机会尝试找到这样一个超平面:它不仅成功地分割了两类数据点,而且使最近的数据点到此超平面的距离——即所谓的“间隔”——最大化[^1]。这种做法有助于提高模型对未来未知数据预测的能力,因为较大的间隔意味着更强的泛化性能。
#### 数学表达形式
具体来说,给定一组带有标签 \( y_i \in {-1,+1} \) 的训练样本 \( (x_1,y_1),...,(x_n,y_n) \),其中每个 \( x_i \) 是 d 维实数向量,则线性 SVM 可以表述为如下最优化问题:
\[
\min_{w,b}\frac{1}{2}||w||^2
\]
受制于条件:
\[y_i(w·x_i-b)\geqslant 1,\quad i=1,...,n.
\]
这里 \( w \) 表示权重向量,\( b \) 则代表偏置项。上述公式的目标是最小化 \( ||w|| \),也就是最小化决策边界的斜率大小;同时确保所有正负样本都被正确分类并保持一定的安全距离【1】。
```python
from sklearn import datasets
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
# 加载鸢尾花数据集作为例子
iris = datasets.load_iris()
X = iris.data[:, [2, 3]]
y = iris.target
# 将数据分为测试集和训练集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
scaler = StandardScaler().fit(X_train)
X_train_std = scaler.transform(X_train)
X_test_std = scaler.transform(X_test)
# 创建线性核函数的支持向量分类器对象
svm_linear = SVC(kernel='linear', C=1.0, random_state=1)
svm_linear.fit(X_train_std, y_train)
print('The accuracy of the linear SVM is:', svm_linear.score(X_test_std, y_test))
```
阅读全文