一、SVM 的核心目标与理想超平面
SVM 的基本需求是在样本空间中找到一个 "划分超平面",将不同类别的样本准确分离。这里的 "超平面" 是根据样本空间维度变化的子空间 ------ 比如二维空间中是直线,三维空间中是平面,更高维空间中则是 n-1 维的抽象子空间。
而 "理想超平面" 有一个关键特性:对训练样本的局部扰动 "容忍性" 最好。简单来说,就是超平面与两类样本中 "离它最近的点"(即 "支持向量")的距离最大,这些支持向量是支撑超平面的关键样本,其他样本不会影响超平面的位置。SVM 的核心目标就是最大化超平面与支持向量之间的 "间隔"(两类支持向量到超平面的距离之和),以此提升模型对新样本的泛化能力。
二、SVM 的数学逻辑与优化方向
为实现 "最大化间隔" 的目标,PPT 先明确了样本标签规则 ------ 将正例样本标记为 + 1,负例标记为 - 1,同时定义了判断样本类别的决策方程(可对样本进行特征映射以适配复杂数据)。
随后,通过几何逻辑将 "最大化间隔" 转化为可求解的优化问题:由于间隔大小与超平面的参数相关,最终目标转化为 "最小化超平面参数的复杂度",同时保证所有样本都能被正确分类(即样本代入决策方程后,结果需满足一定约束条件)。
三、SVM 的求解过程(拉格朗日乘子法)
由于 SVM 的优化问题是 "带约束的规划问题",PPT 引入拉格朗日乘子法进行求解,核心思路是将原始的 "极小化目标 + 约束条件" 转化为对偶问题,降低求解难度。
具体步骤包括:构建拉格朗日函数(引入乘子将约束融入目标),对超平面参数求偏导并令其为 0,得到参数与样本、乘子之间的关系,再代入原函数得到对偶问题的目标函数。最终通过求解对偶问题,确定关键的拉格朗日乘子(仅支持向量对应的乘子非零),进而计算出超平面的参数。PPT 还通过具体数值实例演示了这一过程,从化简目标函数到验证约束条件,最终得到超平面方程,让抽象的数学求解更易理解。
四、SVM 的进阶优化(软间隔与核变换)
- 软间隔(应对噪声样本)
原始 SVM 要求 "完全分离所有样本"(硬间隔),但实际数据中常存在噪声样本(异常点),硬间隔会导致超平面过度偏向噪声,影响泛化能力。为此,PPT 引入 "松弛因子",放松分类约束 ------ 允许部分样本分类偏差或错误,同时将 "最小化偏差" 纳入目标函数。
还定义了惩罚系数 C:C 越大,对分类错误的惩罚越重,接近硬间隔;C 越小,对错误的容忍度越高,可避免过度拟合噪声。
- 核变换(应对低维不可分)
当样本在低维空间中无法用线性超平面分离时(如环形分布数据),PPT 提出 "核变换" 思路:将样本映射到更高维的特征空间,使高维空间中样本可线性分离。
为避免 "维度灾难"(高维计算量暴增),引入核函数 ------ 无需直接计算高维特征的内积,只需通过低维样本的计算就能间接得到高维内积结果,大幅降低计算成本。PPT 以具体例子验证了核函数的有效性,并介绍了常用的核函数类型(如线性核、高斯核),其中高斯核可适配多数低维不可分场景,应用广泛。
五、整体总结
本次学习 以 "问题 - 目标 - 求解 - 优化" 为逻辑线,完整呈现了 SVM 的核心脉络:从解决 "样本分类" 的基本问题出发,通过定义理想超平面明确目标,用拉格朗日乘子法实现数学求解,再针对实际数据的噪声、不可分问题,用软间隔和核变换进行优化,最终形成一套兼顾理论严谨性与工程实用性的分类算法,为理解和应用 SVM 提供了清晰的框架。
实践代码:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC # 导入支持向量机分类器
from sklearn.preprocessing import StandardScaler # SVM也需要特征标准化
# 1. 加载数据
data = pd.read_csv("D:\\pythonProject\\heart.csv")
# 2. 拆分特征与目标值
X = data.drop('target', axis=1) # 特征
y = data['target'] # 目标值(0=无心脏病,1=有心脏病)
# 3. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 4. 特征标准化(SVM对特征尺度敏感,必须标准化)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # 训练集拟合并标准化
X_test_scaled = scaler.transform(X_test) # 测试集使用相同的标准化参数
# 5. 训练支持向量机模型
# 可以通过调整kernel参数尝试不同的核函数:linear(线性), rbf(径向基), poly(多项式)等
model = SVC(kernel='rbf', random_state=42, gamma='scale') # rbf是默认核函数
model.fit(X_train_scaled, y_train)
# 6. 预测与评估
accuracy = model.score(X_test_scaled, y_test)
print(f"支持向量机模型准确率:{accuracy:.4f}")
结果如下所示:
支持向量机模型准确率:0.8242