欢迎光临
我们一直在努力

机器学习入门08——经典的SVM支持向量机

支持向量机(Support Vector Machine,SVM)是机器学习中经典的分类算法,凭借严格的数学理论支撑、优秀的小样本学习能力和抗过拟合特性,在分类任务中占据重要地位。

目前机器学习已经算是一个比较老的算法了,目前在机器学习算法当中,也就随机森林和SVM支持向量机用的比较多了。

一、SVM 的基础数学模型

1.1 超平面方程

SVM 的核心是寻找最优超平面,超平面是高维空间中线性分隔的 “面”,对应不同维度的形式如下:

  • 二维平面(直线):Ax_{1}+Bx_{2}+C=0
  • 三维平面:Ax_{1}+Bx_{2}+C_{3}+D=0
  • n 维空间(超平面):w_{1}x_{1}+w_{2}x_{2}+...+w_{n}x_{n}+b=0
  • 统一简写形式:w^{T}\\phi (x)+b=0

    其中ω为超平面的法向量,决定超平面的方向;b为偏置项,决定超平面的位置;Φ(x)可简单看作原始数据x。

    1.2 标签与决策函数

    SVM 中不用 0/1 区分类别,而是用 +1(正例)-1(负例),让分类判定更严格。

    决策函数:y(x)=sign(w^T\\phi (x)+b)

    其中符号函数sign(x)的定义为:

    分类正确的判定条件:对于任意样本(x_{i},y_{i}),满足y_{i}\\cdot y(xi)> 0

    • 正例(y_{i}=+1):w^{T}\\Phi (x_{i})+b>0,sign结果为 1,乘积 > 0;
    • 负例(y_{i}=-1):w^{T}\\Phi (x_{i})+b>0,sign结果为 – 1,乘积 > 0。

    1.3 点到超平面的距离

    要实现最大间隔,首先需要定义样本点到超平面的距离,这是 SVM 最优化的核心指标。

    n 维空间中,点x_{i}到超平面w^{T}\\Phi (x)+b=0的距离公式为:

    ​其中\\left \\| w \\right \\|= \\sqrt{w^{1}_{1}+w^{2}_{2}...+w^{2}_{n}}​​,是法向量ω的 L2 范数。

    结合分类正确性,将距离公式改进为带类别判定的确信度:

    这里的y(xi​)同时体现分类正确性(yi\\cdot (w^{T}\\Phi (x_{i})+b)>0)和间隔大小(距离越大,值越大)。

    二、寻找最优超平面:最优化目标与求解

    SVM 的目标是让离超平面最近的样本点,到超平面的距离最大化,这一目标可拆解为两步:

  • 找到离超平面最近的样本点:y(x_{i})=min_{i=1,...,N}\\frac{1}{\\left \\| w \\right \\|}y_{i}(w^{T}\\Phi (x_{i})+b)
  • 最大化这个最小距离:max_{w,b}[y(x_{i})]
  • 2.1 最优化目标的简化

    为了方便求解,对目标做放缩变换:令离超平面最近的样本点满足y_{i}(w^{T}\\Phi (x_{i})+b)=1,此时所有样本点的约束条件变为:

    y_{i}(w^{T}\\Phi (x_{i})+b)\\geq 1

    此时最优化目标可简化为:

    由于\\frac{1}{\\left \\| w \\right \\|}​最大化等价于\\frac{1}{2}\\left \\| w \\right \\|^{2}最小化(单调递减),为了后续求导方便,将目标进一步转化为最小化问题:

    2.2 拉格朗日乘子法求解有约束极值

    上述问题是带不等式约束的凸二次规划问题,需要用拉格朗日乘子法将约束条件融入目标函数,转化为无约束极值问题。

    2.2.1 构造拉格朗日函数

    定义拉格朗日乘子a_{i}\\geq 0,构造拉格朗日函数:

    约束条件:y_{i}(w^{T}\\Phi (x_{i})+b)\\geq 1a_{i}\\geq 0

    2.2.2 对偶问题转化

    根据强对偶性,原问题min_{w,b}max_{a}L(w,b,a)等价于对偶问题max_{a}min_{w,b}L(w,b,a),通过求解对偶问题可简化计算。

    求解min_{w,b}max_{a}L(w,b,a):对ω和b分别求偏导并令其为 0。

  • 对ω求偏导:\\frac{\\partial L}{\\partial w}=0\\rightarrow w= \\sum_{i=1}^{n}a_{i}y_{i}\\Phi (x_{i})
  • 对b求偏导:\\frac{\\partial L}{\\partial b}=0\\rightarrow \\sum_{i=1}^{n}a_{i}y_{i}=0
  • 将上述结果代入拉格朗日函数,化简后得到对偶问题的目标函数:

    约束条件:

    为了求解方便,将最大化转化为最小化:

    三、SVM 的重要扩展:软间隔

    实际场景中,数据往往存在噪音点,如果严格要求所有样本都满足y_{i}(w^{T}\\Phi (x_{i})+b)\\geq 1,会导致过拟合,因此 SVM 引入软间隔,允许个别样本点出现在间隔带内。

    3.1 松弛因子的引入

    定义松弛因子ξi​≥0,将严格的约束条件放松为:

    y_{i}(w^{T}\\Phi (x_{i})+b)\\geq 1-\\xi _{i}

    • \\xi _{i}=0:样本点在间隔带外,满足硬间隔约束;
    • \\xi _{i}> 0:样本点在间隔带内 / 另一侧,存在分类误差,\\xi _{i}越大,误差越大。

    4.2 软间隔的目标函数

    软间隔的目标函数需要同时考虑间隔最大化和分类误差最小化,因此加入惩罚因子C:

    约束条件:y_{i}(w^{T}\\Phi (x_{i})+b)\\geq 1-\\xi _{i}\\xi _{i}\\geq 0

    惩罚因子C的意义:

    • C越大:对分类误差的惩罚越重,越接近硬间隔,容易过拟合;
    • C越小:对分类误差的惩罚越轻,分类更宽松,容易欠拟合。

    4.3 软间隔的求解

    与硬间隔类似,构造拉格朗日函数并利用对偶性求解,最终得到的约束条件新增:C= a_{i}+\\mu _{i}(\\mu _{i}> 0),其余求解过程与硬间隔一致,最终仍通过a_{i}求解wb

    四、SVM 的灵魂:核函数

    硬间隔和软间隔都是针对线性可分的数据,而实际场景中大部分数据是线性不可分的。SVM 解决线性不可分问题的核心是核函数,通过核函数将低维线性不可分的数据映射到高维空间,使其在高维空间线性可分。

    4.1 核函数的核心思想

    低维空间线性不可分的数据,在高维空间中往往存在线性分隔的超平面。但直接将数据映射到高维空间会带来维度爆炸,计算复杂度急剧增加。

    核函数的巧妙之处在于:不需要显式地将数据映射到高维空间,而是在低维空间中直接计算高维空间的内积\\Phi (x_{i}T)\\Phi (x_{j}),大幅降低计算复杂度。

    核函数的定义:存在映射\\Phi (x),使得对任意低维样本、,满足K(x_{i},x_{i})=\\Phi (x_{i})^{T}\\Phi (x_{j}),则K(x_{i},x_{j})为核函数。

    4.2 常用核函数

    SVM 中常用的核函数有以下三种,适用于不同的数据集分布:

    4.2.1 线性核函数

    适用于线性可分的数据,是最简单的核函数,本质就是原始空间的内积。

    K(x_{i},x_{j})=x_{i}Tx_{j}

    4.2.2 多项式核函数

    适用于低维空间中数据呈多项式分布的线性不可分场景,可通过调整参数n控制映射维度。

    K(x_{i},x_{j})=(\\gamma x_{i}^{T}x_{j}+c)^{n}

    其中\\gamma > 0为核系数,c为常数,n为多项式次数。

    特例:当\\gamma = 1c=0n=2时,K(x_{i}x_{j})=(x_{i}^{T}x_{j})^{2},可将二维数据映射到三维空间。

    4.2.3 高斯核函数(RBF 核,径向基函数)

    应用最广泛的核函数,适用于任意线性不可分的场景,可将数据映射到无穷维空间,是解决非线性问题的首选。

    高斯核参数γ的意义:

    • \\gamma越小:正态分布越 “胖”,映射后的高维空间越平缓,泛化能力强,易欠拟合;
    • \\gamma越大:正态分布越 “瘦”,映射后的高维空间越复杂,拟合能力强,易过拟合。

    五、SVM 的优缺点与适用场景

    5.1 优点

  • 数学理论严谨:基于凸优化理论,解是全局最优解,可解释性强;
  • 核心样本驱动:仅由支持向量决定决策函数,忽略冗余样本,计算高效;
  • 抗过拟合能力强:最大间隔思想 + 软间隔的松弛机制,有效避免过拟合;
  • 解决非线性问题:核函数巧妙规避维度爆炸,高效处理非线性分类;
  • 避免维数灾难:计算复杂度取决于支持向量的数量,而非样本空间的维度;
  • 小样本表现优异:在小样本训练集上,性能远超其他传统机器学习算法。
  • 5.2 缺点

  • 大规模样本不适用:存储训练样本和核矩阵需要大量内存,样本数超过 10 万时,计算耗时严重;
  • 对参数敏感:性能依赖于惩罚因子C和核函数参数(如高斯核的γ),参数调优难度大;
  • 预测速度与支持向量数量相关:支持向量过多时,预测阶段的计算复杂度会显著提升;
  • 核函数选择无通用准则:核函数的选择依赖于数据分布,目前无统一的选择方法,只能通过交叉验证尝试。
  • 六,项目示例

    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.svm import SVC
    from sklearn.metrics import classification_report, confusion_matrix, accuracy_score

    iris = datasets.load_iris()
    X = iris.data
    y = iris.target
    feature_names = iris.feature_names
    target_names = iris.target_names

    X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
    )

    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train)
    X_test_scaled = scaler.transform(X_test)

    svm_model = SVC(kernel='rbf', C=1.0, gamma='scale', random_state=42)
    svm_model.fit(X_train_scaled, y_train)

    y_pred = svm_model.predict(X_test_scaled)

    print("SVM模型评估结果")
    accuracy = accuracy_score(y_test, y_pred)
    print(f"准确率:{accuracy:.4f}")

    print("混淆矩阵:")
    cm = confusion_matrix(y_test, y_pred)
    print(cm)

    print("分类报告:")
    print(classification_report(y_test, y_pred, target_names=target_names))

    赞(0)
    未经允许不得转载:171主机测评 » 机器学习入门08——经典的SVM支持向量机
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址