支持向量机(SVM)

支持向量机(SVM)详解

支持向量机(SVM)是一种流行的监督学习方法,用于分类和回归任务。它的目标是找到一个最优的决策边界(超平面)来区分不同类别的数据。

SVM的核心概念

1. 超平面(Hyperplane)

  • SVM通过一个超平面将数据分为两个类别。在二维空间中,这个超平面是一条线;在更高维度中,它是一个平面或超平面。

2. 边距(Margin)

  • 边距是数据点到超平面的最小距离。SVM的目标是最大化这个边距,以提高分类的准确性和鲁棒性。

3. 支持向量(Support Vectors)

  • 支持向量是距离决策边界最近的那些数据点。它们是构建超平面的关键元素。

数学原理

1. 决策边界

  • 超平面可以表示为 w ⋅ x + b = 0 w \cdot x + b = 0 wx+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 ∣∣w2,同时对于每个数据点 i i i,确保其正确分类:

    y i ( w ⋅ x i + b ) ≥ 1 y_i(w \cdot x_i + b) \geq 1 yi(wxi+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通过最大化边距来提高分类的鲁棒性。
  • 它在处理中小规模数据集的二分类问题上表现出色,并且通过核技巧可以有效处理非线性问题。

你可能感兴趣的:(支持向量机,算法,机器学习)