支持向量机(Support Vector Machine,SVM)是一种经典的监督学习算法,广泛应用于分类和回归任务。其核心思想是通过寻找最优超平面来实现数据分割,同时最大化分类间隔。SVM在处理高维数据和非线性可分问题时表现出色,这主要得益于其独特的数学构造和核技巧的应用。
硬间隔支持向量机假设数据是线性可分的,其目标是找到一个超平面,使得两类样本之间的间隔最大化。这个优化问题可以表示为:
min 1/2 ||w||²
s.t. y_i(w·x_i + b) ≥ 1, ∀i
其中w是超平面的法向量,b是偏置项。这个约束条件确保所有样本都被正确分类,并且距离超平面的距离至少为1/||w||。
在实际计算中,我们通常会使用拉格朗日乘子法将原始问题转化为对偶问题:
max Σα_i - 1/2 ΣΣα_iα_jy_iy_jx_i·x_j
s.t. α_i ≥ 0, Σα_iy_i = 0
这个对偶问题的解具有稀疏性,即只有少数α_i不为零,这些对应的样本就是支持向量。支持向量决定了最终的决策边界,这也是SVM名称的由来。
提示:在实际应用中,硬间隔SVM对噪声和异常值非常敏感,因为任何违反线性可分假设的样本都会导致无解。这也是软间隔SVM被提出的原因。
为了处理线性不可分的情况,软间隔SVM引入了松弛变量ξ_i,允许某些样本违反间隔约束。优化问题变为:
min 1/2 ||w||² + CΣξ_i
s.t. y_i(w·x_i + b) ≥ 1-ξ_i, ξ_i ≥ 0
这里的C是一个重要的超参数,控制着对误分类的惩罚程度。C值越大,模型对误分类的容忍度越低,可能导致过拟合;C值越小,模型允许更多的误分类,可能欠拟合。
Hinge损失函数是软间隔SVM的核心:
L(y, f(x)) = max(0, 1 - yf(x))
这个损失函数的特点是:对于正确分类且距离超平面足够远的样本,损失为0;对于误分类或距离太近的样本,损失线性增加。
求解SVM对偶问题的常用方法是序列最小优化(SMO)算法。SMO通过每次只优化两个拉格朗日乘子来简化问题,其他乘子保持不变。这种方法特别适合SVM,因为其解具有稀疏性。
SMO算法的关键步骤包括:
KKT条件是判断解是否最优的重要依据,对于SVM来说,KKT条件包括:
核技巧是SVM处理非线性问题的关键。其基本思想是将数据映射到高维特征空间,使其在该空间中线性可分。常用的核函数包括:
核函数的选择对SVM性能有重大影响。RBF核是最常用的选择,因为它可以处理各种复杂的非线性模式,并且只有一个主要参数γ需要调整。
当数据量很大时,传统的SVM方法可能面临计算瓶颈。这时可以采用以下近似方法:
这些方法可以显著降低计算复杂度,使SVM能够处理大规模数据集。
在SMO算法中,频繁计算核函数值是一个主要开销。为了提高效率,可以实现核缓存来存储最近使用的核函数值。典型的缓存策略包括:
缓存大小需要在内存使用和计算效率之间取得平衡。通常,缓存大小设置为100-1000MB可以获得较好的性能提升。
SMO算法需要选择违反KKT条件最严重的样本进行优化。常用的启发式策略包括:
这些策略的组合使用可以加速算法收敛。
参数C控制模型复杂度和训练误差之间的权衡。选择C的常用方法包括:
一般来说,噪声较多的数据需要较小的C值,而干净的数据可以使用较大的C值。
对于RBF核,γ参数控制单个样本的影响范围。γ值越大,决策边界越复杂,可能导致过拟合;γ值越小,决策边界越平滑,可能导致欠拟合。
选择γ的常用方法:
SVM本质上是二分类器,处理多类问题需要特殊策略:
选择哪种策略取决于具体问题和数据特点。一般来说,一对一方法在小规模多类问题上表现更好,而一对多方法更适合大规模问题。
支持向量回归使用ε-不敏感损失函数:
L(y, f(x)) = max(0, |y - f(x)| - ε)
这个损失函数的特点是:当预测值与真实值的偏差不超过ε时,损失为0;超过ε时,损失线性增加。ε参数控制着模型对误差的敏感程度。
与分类问题类似,SVR也可以表示为对偶问题:
max -1/2 ΣΣ(α_i - α_i*)(α_j - α_j*)K(x_i,x_j) - εΣ(α_i + α_i*) + Σy_i(α_i - α_i*)
s.t. Σ(α_i - α_i*) = 0, 0 ≤ α_i, α_i* ≤ C
这里α_i和α_i*是对应的拉格朗日乘子,分别对应上界和下界的违反。
ν-SVR是SVR的一个变体,它引入ν参数直接控制支持向量的比例和训练误差的上限。ν的取值范围是(0,1],较大的ν值允许更多的训练误差,通常会导致更平滑的回归函数。
ν-SVR的一个优点是它可以自动调整ε值,减少了参数调优的负担。
在使用SVM之前,适当的数据预处理非常重要:
对于大规模数据,可以采用以下策略提高计算效率:
评估SVM模型时,除了准确率等常见指标外,还应该关注:
可能原因和解决方案:
识别和解决方法:
识别和解决方法:
处理方法:
结构化SVM扩展了传统SVM,可以处理更复杂的输出空间,如序列、树或图结构。它在自然语言处理、计算机视觉等领域有广泛应用。
在线SVM可以逐步更新模型,适用于数据流或大规模增量学习场景。常见的在线SVM算法包括:
多核学习通过组合多个核函数来更好地捕捉数据的异构特征。常见方法包括:
SVM与逻辑回归:
SVM与神经网络:
在实际项目中,选择哪种模型取决于具体问题、数据特点和计算资源。