问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

支持向量机(SVM):机器学习中的经典算法

创作时间:
作者:
@小白创作中心

支持向量机(SVM):机器学习中的经典算法

引用
CSDN
1.
https://blog.csdn.net/m0_61404163/article/details/145966258

支持向量机(SVM):机器学习中的经典算法

引言

在机器学习的众多算法中,支持向量机(Support Vector Machine, SVM)是一种经典的监督学习方法,特别适用于二分类问题,并且在高维空间中表现尤为优越。SVM 以其坚实的数学理论、良好的泛化能力以及在小样本学习中的优异表现,成为了广泛应用于文本分类、生物信息学、图像识别等领域的重要工具。

本文将深入探讨支持向量机的原理,介绍其数学基础、训练过程、评估方法,并结合实际案例分析其优缺点和应用场景。希望读者能在阅读后对 SVM 形成全面的认识,并掌握其实际应用的关键技巧。

什么是支持向量机?

基本概念

支持向量机是一种用于分类和回归的监督学习算法,其核心思想是找到一个最优超平面,以最大化数据分类的间隔(Margin)。通俗来说,SVM 在特征空间中寻找一个能够最好地区分不同类别的边界,使得新数据点可以基于其位置被正确分类。

假设我们有一个二分类问题,目标是寻找一个超平面将两类数据分隔开,如下图所示:

超平面的数学表达式通常是:

$$
w \cdot x + b = 0
$$

其中:

  • $w$ 是法向量,决定超平面的方向;
  • $b$ 是偏置,决定超平面的位置;
  • $x$ 是输入特征向量。

理想情况下,我们希望找到这样一个超平面,使得两类数据点到超平面的间隔最大,这正是 SVM 的核心目标。

支持向量机的数学原理

SVM 的数学原理可以分为线性可分线性不可分两种情况,分别介绍如下。

1. 线性可分情况

在理想情况下,我们可以找到一个超平面,使得所有样本点都能被正确分类。设训练样本为:

$$
{(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)}
$$

其中:

  • $x_i$ 为特征向量;
  • $y_i \in {+1, -1}$ 为类别标签。

目标是找到超平面参数 $w, b$ 使得所有数据点满足:

$$
y_i (w \cdot x_i + b) \geq 1, \quad \forall i
$$

从几何上看,支持向量机的目标是最大化分类间隔(Margin),即最大化最小间隔 $\frac{2}{||w||}$,可以通过优化以下凸优化问题求解:

$$
\min_{w, b} \quad \frac{1}{2} ||w||^2
$$

$$
s.t. \quad y_i (w \cdot x_i + b) \geq 1, \quad \forall i
$$

该问题可以通过拉格朗日对偶方法进行求解,最终转化为求解以下对偶优化问题:

$$
\max_{\alpha} \sum_{i=1}^{n} \alpha_i - \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \alpha_i \alpha_j y_i y_j x_i \cdot x_j
$$

$$
s.t. \quad \sum_{i=1}^{n} \alpha_i y_i = 0, \quad \alpha_i \geq 0, \forall i
$$

其中,$\alpha_i$ 为拉格朗日乘子,最终超平面参数由支持向量决定:

$$
w = \sum_{i=1}^{n} \alpha_i y_i x_i
$$

2. 线性不可分情况

在现实问题中,数据往往是线性不可分的

这时我们引入松弛变量 $\xi_i$ 允许一定的分类错误:

$$
y_i (w \cdot x_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0, \quad \forall i
$$

目标函数变为:

$$
\min_{w, b, \xi} \quad \frac{1}{2} ||w||^2 + C \sum_{i=1}^{n} \xi_i
$$

其中,C 是正则化参数,用于控制误分类点的惩罚程度。

3. 核函数与非线性可分 SVM

对于复杂数据,SVM 采用核方法(Kernel Trick)将低维数据映射到高维空间,使其在高维空间线性可分。

常见核函数包括:

  • 线性核:$K(x_i, x_j) = x_i \cdot x_j$
  • 多项式核:$K(x_i, x_j) = (x_i \cdot x_j + c)^d$
  • 高斯核(RBF 核):$K(x_i, x_j) = \exp(-\gamma ||x_i - x_j||^2)$

通过核函数,SVM 在高维特征空间找到最优超平面,实现非线性分类。

如何训练支持向量机模型

训练 SVM 主要包括以下步骤:

  1. 数据预处理:归一化、去除异常值等。
  2. 选择核函数:根据数据特性选择适合的核函数。
  3. 调整超参数:通过交叉验证优化 $C$ 和核函数参数。
  4. 求解最优化问题:使用 SMO(Sequential Minimal Optimization)算法或梯度下降求解。

代码示例

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_curve, auc

# 1. 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=10, random_state=42)

# 2. 数据集划分(80% 训练集,20% 测试集)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 4. 训练 SVM 模型
svm_model = SVC(kernel='rbf', C=1.0, probability=True, random_state=42)  # RBF核
svm_model.fit(X_train, y_train)

# 5. 预测
y_pred = svm_model.predict(X_test)
y_prob = svm_model.predict_proba(X_test)[:, 1]  # 获取正类的概率值

# 6. 计算评估指标
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

# 7. 绘制 ROC 曲线
fpr, tpr, _ = roc_curve(y_test, y_prob)
roc_auc = auc(fpr, tpr)
plt.figure(figsize=(6, 5))
plt.plot(fpr, tpr, label=f'ROC Curve (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], 'r--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('SVM ROC Curve')
plt.legend()
plt.show()

# 8. 输出评估指标
print(f'准确率 (Accuracy): {accuracy:.4f}')
print(f'精确率 (Precision): {precision:.4f}')
print(f'召回率 (Recall): {recall:.4f}')
print(f'F1 分数 (F1-score): {f1:.4f}')
print(f'AUC 值: {roc_auc:.4f}')

支持向量机的评估指标

SVM 主要使用分类指标进行评估,包括:

  • 准确率(Accuracy):衡量模型正确分类的样本占总样本的比例,计算公式为 $\frac{TP + TN}{TP + TN + FP + FN}$。
  • 精确率(Precision):衡量模型预测为正类的样本中实际为正类的比例,计算公式为 $\frac{TP}{TP + FP}$。
  • 召回率(Recall):衡量实际为正类的样本中被模型正确识别的比例,计算公式为 $\frac{TP}{TP + FN}$。
  • F1 分数(F1-score):精确率和召回率的调和平均值,兼顾两者的平衡,计算公式为 $2 \times \frac{Precision \times Recall}{Precision + Recall}$。
  • ROC 曲线(Receiver Operating Characteristic Curve):反映模型在不同阈值下的分类能力,横轴为假阳率(FPR),纵轴为真正率(TPR)。
  • AUC 值(Area Under Curve):ROC 曲线下的面积,表示模型区分正负类的能力,值越接近 1 代表分类能力越强。

支持向量机的应用场景

SVM 由于其强大的分类能力,被广泛应用于:

  • 文本分类(如垃圾邮件检测)
  • 图像分类(如人脸识别)
  • 生物信息学(如基因分类)
  • 金融预测(如信用评分)

支持向量机的优缺点

优点

  • 适用于小样本、高维数据
  • 能够有效处理非线性分类(借助核方法)
  • 泛化能力强,不易过拟合

缺点

  • 计算复杂度高,训练速度较慢
  • 需要选择合适的核函数
  • 对噪声敏感,尤其是在大规模数据集上
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号