云计算百科
云计算领域专业知识百科平台

速通机器学习 10|支持向量机 SVM

目录

前言

一、核心基础概念

1. 算法核心定位(与逻辑回归对比)

2. 超平面数学定义

3. 间隔与支持向量

4. SVM标准优化目标

二、硬间隔 SVM vs 软间隔 SVM

1. 硬间隔(Hard‑margin SVM)

2. 软间隔(Soft‑margin SVM)

三、核函数(Kernel Trick)

1. 线性核(linear)

2. 高斯 RBF 核(径向基核,最常用)

3. 多项式核(poly)

四、核心API与超参数详解

五、实战案例:SVM多参数网格寻优分类建模

六、章节总结

前言

本节学习支持向量机 SVM(Support Vector Machine),它是经典判别式分类算法,在小样本、高维数据上表现优秀,核心思想:寻找最优分隔超平面,最大化类别之间的间隔。

SVM 既可以做二分类,通过 One‑vs‑Rest 等方式拓展多分类;也可以做回归 SVR。

一、核心基础概念

1. 算法核心定位(与逻辑回归对比)

支持向量机(SVM)与逻辑回归同属判别式线性分类算法,均通过超平面划分样本类别,但求解逻辑存在本质差异:逻辑回归依托梯度下降迭代更新参数,拟合最优分类面;而SVM依托严格的数学推导,通过约束优化直接求解全局最优超平面,分类鲁棒性更强。

SVM核心核心准则:在两类样本之间,寻找一个最优分隔超平面,最大化样本与超平面的最小几何间隔,仅依靠边界附近的支持向量确定分类面,与远离超平面的样本无关。

通俗概括其核心逻辑:筛选出距离分类超平面最近的样本点,通过求解最优超平面,最大化超平面与这些临界样本点的间距(就是使最近的样本点在间隔边界上或者之外),以此实现最优分类效果。下面有详细的数学求解过程,不懂的话记住下个核心逻辑就好。

2. 超平面数学定义

在n维特征空间中,分类超平面为n-1维线性分割面,通用数学公式:w^T x+b=0式中:w

为权重法向量(垂直于超平面,决定超平面方向);b为偏置项(决定超平面位置)。

基于超平面可完成样本类别判别,规则如下:

\\begin{cases} \\boldsymbol w^T \\boldsymbol x + b > 0 \\Rightarrow y=+1 \\\\ \\boldsymbol w^T \\boldsymbol x + b < 0 \\Rightarrow y=-1 \\end{cases}

3. 间隔与支持向量

间隔是SVM的核心核心概念,分为函数间隔与几何间隔,是求解最优超平面的核心依据。

(1)函数间隔

用于表征样本分类的置信度,单个样本函数间隔公式:\\hat{\\gamma}_i = y_i\\left(\\boldsymbol w^T \\boldsymbol x_i + b\\right)

函数间隔受参数缩放影响,无法真实表征样本距离,不能作为优化依据。

(2)几何间隔

样本到超平面的真实垂直距离,具备尺度不变性,二维当中就是点到直线的距离,是SVM优化的核心指标,公式:\\gamma_i=\\frac{\\left|\\boldsymbol w^T \\boldsymbol x_i+b\\right|}{\\|\\boldsymbol w\\|}

间隔边界就是,样本点距离一定距离的边界,平行于超平面。

(3)支持向量:距离最优超平面最近的样本点,满足几何间隔最小。全局最优超平面仅由支持向量唯一确定,其余样本不参与模型参数求解。

4. SVM标准优化目标

SVM最终目标:求解参数 \\min_{\\boldsymbol w,b}\\frac12\\|\\boldsymbol w\\|^2 \\\\ \\text{s.t.}\\quad y_i\\left(\\boldsymbol w^T \\boldsymbol x_i + b\\right) \\ge 1,\\quad i=1,2,\\dots,n,最大化全局最小几何间隔,优化问题可等价转化为标准凸二次规划问题:

该约束优化问题可通过拉格朗日乘数法求解,引入拉格朗日算子将带约束优化问题转化为无约束对偶问题,最终解出最优权重w与偏置b。

二、硬间隔 SVM vs 软间隔 SVM

1. 硬间隔(Hard‑margin SVM)

要求所有样本全部分类正确,样本严格在间隔边界外侧。

  • 适用:数据完全线性可分
  • 缺点:噪声、异常点会导致完全找不到可行解

2. 软间隔(Soft‑margin SVM)

现实数据大多不完全线性可分,允许少量样本出错(即允许少少量的样本点在间隔边界之内),引入松弛变量C。

优化目标:

  • C:惩罚系数,SVM 最重要超参数
  • C很大:惩罚错分样本,尽量不允许出错,容易过拟合,间隔窄
  • C很小:对错误宽容,追求更大间隔,容易欠拟合

三、核函数(Kernel Trick)

很多样本线性不可分,低维找不到分割超平面,把样本映射到高维空间,在高维实现线性可分。

核技巧:不显式计算高维映射,直接通过核函数计算样本在高维的内积,大幅降低计算开销。

常用核函数:

1. 线性核(linear)

K(x_i,x_j)=x_i^\\mathrm{T} x_j

等价普通线性分类,速度快,特征数多时优先选。

2. 高斯 RBF 核(径向基核,最常用)

K(x_i,x_j)=\\exp\\big(-\\gamma\\,\\|x_i-x_j\\|^2\\big)

  • γ:控制核的作用范围
  • γ过大:过拟合;过小:欠拟合

3. 多项式核(poly)

K(x_i,x_j)=\\big(\\gamma\\,x_i^\\mathrm{T}x_j + r\\big)^d

适合特征有组合关系的场景。

经验:不知道选什么核,优先尝试 RBF;特征维度很高优先 linear

四、核心API与超参数详解

支持向量机分类模型核心调用接口为 SVC,基于sklearn库实现,标准导入与初始化代码如下:

python
# 导入SVM分类模型
from sklearn.svm import SVC
模型初始化通用格式
svc_model = SVC(kernel, gamma, C, random_state)

各核心超参数精细化释义如下:

  • kernel(核函数):设定模型映射方式,可选 linear线性核、rbf高斯核、poly多项式核,默认高斯核,适配大多数非线性分类场景。
  • C(惩罚系数):软间隔SVM核心参数,用于平衡模型复杂度与分类误差。数值越大,对误分类样本惩罚越重,易过拟合;数值越小,模型容错性越高,易欠拟合。
  • gamma(核函数系数):仅作用于RBF高斯核,控制样本作用辐射范围。数值过大缩小作用区间、易过拟合;数值过小扩大作用区间、易欠拟合。
  • random_state(随机种子):固定模型随机运算逻辑,保证实验结果可复现,便于参数调优与结果对比。
  • 五、实战案例:SVM多参数网格寻优分类建模

    本章节基于数据集datingTestSet完成SVM分类实战,结合特征标准化、10折交叉验证、多参数网格遍历寻优,自动筛选最优核函数、惩罚系数、Gamma参数,构建最优SVM分类模型,同时完成模型训练、测试与可视化评估。

    数据集:速通机器学习10|支持向量机SVM资源-CSDN下载

    # 导入所需工具库
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn.svm import SVC
    from sklearn import metrics
    from sklearn.model_selection import train_test_split, cross_val_score
    from sklearn.preprocessing import StandardScaler
    from sklearn.metrics import confusion_matrix

    # 1. 自定义混淆矩阵可视化函数
    def cm_plot(y, yp):
    # 计算混淆矩阵
    cm = confusion_matrix(y, yp)
    # 绘制混淆矩阵热力图
    plt.matshow(cm, cmap=plt.cm.Blues)
    plt.colorbar()
    # 遍历填充矩阵数值
    for x in range(len(cm)):
    for y in range(len(cm)):
    plt.annotate(cm[x, y], xy=(y, x), ha="center", va="center")
    plt.ylabel('True label') # 真实标签
    plt.xlabel('Predicted label')# 预测标签
    return plt

    # 2. 数据集读取与划分
    # 读取制表符分隔的相亲数据集
    datas = pd.read_csv(r'D:\\pythoncode2\\bigdata_ai40\\机械学习\\data\\datingTestSet2.txt', sep='\\t', header=None)
    # 拆分特征集与标签集
    data = datas.iloc[:, :-1] # 所有列除最后一列为特征
    labels = datas.iloc[:, -1] # 最后一列为分类标签

    # 3. 特征标准化(SVM必备预处理)
    scaler = StandardScaler()
    # 划分8:2训练集、测试集
    x_train, x_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=42)
    # 训练集拟合并标准化,测试集仅做标准化(避免数据泄露)
    x_train = scaler.fit_transform(x_train)
    x_test = scaler.transform(x_test)

    # 4. 多参数网格遍历+10折交叉验证寻优
    # 定义超参数遍历范围
    c_list = [0.1, 0.5, 1, 10, 100] # 惩罚系数C取值
    kernels = ["poly", "rbf", "sigmoid"] # 三类核函数
    gammas = [0.001, 0.01, 0.1, 1, 2] # RBF核gamma系数取值

    # 初始化最优参数与精度存储变量
    best_accuracy = 0.0
    best_params = {'C': 0, 'kernel': '', 'gamma': 0}

    # 三重循环遍历所有参数组合
    for c in c_list:
    for kernel in kernels:
    for gamma in gammas:
    # 初始化SVM模型
    sv_model = SVC(kernel=kernel, gamma=gamma, C=c, random_state=42)
    # 10折交叉验证计算平均准确率
    cv_scores = cross_val_score(sv_model, x_train, y_train, cv=10, scoring='accuracy')
    mean_score = np.mean(cv_scores)
    # 打印每组参数的验证效果
    print(f"核函数:{kernel:6s} | Gamma:{gamma:4f} | 惩罚系数C:{c:4.1f} | 交叉验证准确率:{mean_score:.4f}")
    # 更新最优参数组合
    if mean_score > best_accuracy:
    best_accuracy = mean_score
    best_params['C'] = c
    best_params['kernel'] = kernel
    best_params['gamma'] = gamma

    # 输出全局最优超参数
    print("="*80)
    print(f"最优参数组合:{best_params}")
    print(f"最优训练集交叉验证准确率:{best_accuracy:.4f}")
    print("="*80)

    # 5. 基于最优参数训练最终SVM模型
    final_svm = SVC(
    kernel=best_params['kernel'],
    C=best_params['C'],
    gamma=best_params['gamma'],
    random_state=42
    )
    final_svm.fit(x_train, y_train)

    # 6. 训练集模型评估
    train_pred = final_svm.predict(x_train)
    print("\\n【训练集分类评估报告】")
    print(metrics.classification_report(y_train, train_pred))
    cm_plot(y_train, train_pred).show()

    # 7. 测试集泛化能力评估
    test_pred = final_svm.predict(x_test)
    print("\\n【测试集泛化评估报告】")
    print(metrics.classification_report(y_test, test_pred))
    cm_plot(y_test, test_pred).show()

    六、章节总结

    本章对支持向量机(SVM)核心原理、特性与适用场景进行系统性总结,分点归纳如下:

  • 核心原理:SVM是理论体系严谨的经典判别式分类算法,核心遵循最近样本、最大间隔准则。依托函数间隔与几何间隔双重约束,通过凸二次规划、拉格朗日对偶优化求解全局最优超平面,模型参数可通过严格数学推导得出,具备较强可解释性。
  • 核心优势:算法泛化能力优异,仅依靠支持向量确定最优分类面,有效规避冗余样本干扰;适配小样本、高维特征数据集,分类精度高,结合核函数可高效处理线性不可分问题。
  • 算法局限:时间复杂度较高,模型训练运算成本大;面对十万级以上海量数据集,训练耗时显著增加,求解效率大幅降低,难以拟合最优超平面。
  • 适用场景:优先应用于中小规模、高维度的数据分类任务;不适合超大批量海量数据建模,该场景下训练效率与拟合效果均不理想。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » 速通机器学习 10|支持向量机 SVM
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!