支持向量机(SVM)详解
支持向量机(SVM)是一种流行的监督学习方法,用于分类和回归任务。它的目标是找到一个最优的决策边界(超平面)来区分不同类别的数据。
SVM的核心概念
1. 超平面(Hyperplane)
- SVM通过一个超平面将数据分为两个类别。在二维空间中,这个超平面是一条线;在更高维度中,它是一个平面或超平面。
2. 边距(Margin)
- 边距是数据点到超平面的最小距离。SVM的目标是最大化这个边距,以提高分类的准确性和鲁棒性。
3. 支持向量(Support Vectors)
- 支持向量是距离决策边界最近的那些数据点。它们是构建超平面的关键元素。
数学原理
1. 决策边界
- 超平面可以表示为 w ⋅ x + b = 0 w \cdot x + b = 0 w⋅x+b=0,其中 w w w 是权重向量, x x x 是特征向量, b b b 是偏置。
2. 最大化边距
-
SVM寻求最大化边距,即最大化距离超平面最近的数据点的距离。
-
边距计算公式为:
Margin = 2 ∣ ∣ w ∣ ∣ \text{Margin} = \frac{2}{||w||} Margin=∣∣w∣∣2
3. 优化问题
-
SVM的训练可以形式化为一个优化问题:最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w∣∣2,同时对于每个数据点 i i i,确保其正确分类:
y i ( w ⋅ x i + b ) ≥ 1 y_i(w \cdot x_i + b) \geq 1 yi(w⋅xi+b)≥1
其中, y i y_i yi 是数据点 i i i 的类别标签。
4. 核技巧(Kernel Trick)
- 在非线性可分的情况下,SVM可以通过核技巧将数据映射到更高维的空间,从而找到一个合适的超平面。
- 常用的核函数包括多项式核、径向基函数(RBF)核等。
代码
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载Iris数据集
iris = load_iris()
X, y = iris.data, iris.target
# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# 创建SVM分类器,使用RBF核
svm_classifier = SVC(kernel='rbf')
# 训练SVM分类器
svm_classifier.fit(X_train, y_train)
# 在测试集上进行预测
y_pred = svm_classifier.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
结论
- SVM通过最大化边距来提高分类的鲁棒性。
- 它在处理中小规模数据集的二分类问题上表现出色,并且通过核技巧可以有效处理非线性问题。