当前位置: 首页 > news >正文

机器学习 SVM支持向量机

目录

一.什么是支持向量机

直观理解分类边界:从 “分割线” 到 “超平面”

二.什么是支持向量

三.逻辑回归与支持向量机的对比

四.支持向量机的核心思想

五.异常点的影响与解决方法

1.影响

2.什么是惩罚因子C

3.解决方案

六.常见的核函数类型

七.支持向量机的优缺点

1.优点

2.计算依赖

3.缺点

八.SVC分类模型关键参数与训练后的模型属性

1.关键参数

2.训练后的模型属性

九.SVM 实战:用 scikit-learn 实现分类任务  鸢尾花的分类

1.读取数据,csv文件并无列名,header设为None

2.划分数据集

3.创建模型

4.训练模型并预测

5.完整代码

十.总结


一.什么是支持向量机

支持向量机(SVM)是一种二分类模型,其核心思想是:在特征空间中找到一个最优分类边界,使得两类数据之间的间隔最大化。这个 “间隔” 指的是分类边界到最近的样本点的距离,而这些距离分类边界最近的样本点被称为 “支持向量”(Support Vectors)—— 它们是决定分类边界位置的关键数据点。

直观理解分类边界:从 “分割线” 到 “超平面”

  • 在二维空间中,分类边界是一条直线
  • 在三维空间中,分类边界是一个平面
  • 在更高维的特征空间中,分类边界被称为 “超平面”(Hyperplane)。

SVM 的目标就是找到这样一个分类边界,使得两类数据被完美分隔,且距离分类边界最近的样本点到分类边界的距离最大(即 “最大间隔分类边界”)。

二.什么是支持向量

支持向量是距离分类边界最近的数据点,这些点决定了分类边界的位置。

它们决定了分类边界的位置和方向。在模型训练完成后,其他样本点的位置对分类边界不再产生影响 —— 这意味着 SVM 对冗余数据不敏感,计算效率较高

三.逻辑回归与支持向量机的对比

  • 逻辑回归的目标是找到一条线将两类数据划分开,但可能存在局部极值点问题,且不保证找到最优划分线。
  • 支持向量机(SVM)的目标是找到一条最优线,使得距离最近的数据点(支持向量)尽可能远,从而提高分类准确性。

四.支持向量机的核心思想

  • 最大间隙:SVM 追求分类器与最近数据点之间的最大距离即使软间隔最大化
  • 高维映射:通过核函数将低维数据映射到高维空间,使得原本线性不可分的数据在高维空间中线性可分。
  • 超平面:在高维空间中,分类器表现为超平面(如二维为线,三维为平面,更高维为超平面)。

关键术语解释:

  • 分类器:用于划分数据的线或超平面。
  • 核函数:将低维数据映射到高维空间的函数(如线性核、多项式核等)。
  • 支持向量:距离分类器最近的、影响分类决策的数据点。

五.异常点的影响与解决方法

1.影响

异常数据可能导致分割线偏移,使间隔(软间隔)变小,引发过拟合问题。即严格分类所有点(包括异常点)会导致间隔过小,泛化能力差

2.什么是惩罚因子C

惩罚因子是控制数据点进入的幅度,C越大分类越严格(不容有误),C越小则更宽松(允许错误点进入)。

3.解决方案

引入松弛因子(惩罚因子C),允许少数点进入间隔内,减少异常点干扰。即在原目标函数中加入松弛项,平衡分类准确性与间隔宽度。

六.常见的核函数类型

  • 线性核:直接低维计算,不提升维度。
    • 表达式:k(x, y) = x · y(向量点积)
    • 适用场景:线性可分数据,或特征维度较高的场景(如文本分类,特征维度通常为词袋维度)。
    • 优势:计算速度快,解释性强,不易过拟合。
  • 多项式核(如γ(xᵢxⱼ+c)ⁿ)
    • 表达式:k(x, y) = (γ · x · y + r)^d
    • 超参数:γ(核系数)、r(常数项)、d(多项式次数)。
    • 适用场景:数据具有明显多项式分布特征时(如二维空间中呈曲线分布的数据)。
    • 注意:d过大时易过拟合,需结合交叉验证调整。
  • 高斯核(或径向基函数核RBF,默认核函数)
    • 表达式:k(x, y) = exp(-γ · ||x - y||²)
    • 超参数:γ控制核函数的 “宽度”——γ越大,核函数越 “窄”,模型对局部数据敏感(易过拟合);γ越小,核函数越 “宽”,模型泛化能力越强。
    • 适用场景:非线性数据,且数据分布未知时的首选核函数。它能灵活拟合复杂的非线性关系,是实际应用中使用最广泛的核函数。
  • sigmoid核:较少单独使用,有时用于模拟神经网络,可用于构建非线性模型。

七.支持向量机的优缺点

1.优点

  • 泛化能力强:通过最大化间隔,SVM 在小样本数据集上表现优异,不易过拟合。
  • 对高维数据友好:即使特征维度远大于样本数量,SVM 仍能有效工作(如文本分类)。
  • 对噪声不敏感:支持向量仅关注关键样本,冗余数据不影响模型。
  • 核函数机制灵活:通过核函数轻松处理非线性问题,无需手动设计高维特征。

2.计算依赖

计算的复杂度由支持向量数量决定,而非数据维度。

3.缺点

  • 计算复杂度高:训练时间随样本数量增加而显著增长,不适合超大规模数据集(通常样本数超过 10 万时需谨慎使用)。
  • 调参复杂:核函数选择、Cγ等超参数对模型效果影响大,需大量交叉验证。对参数和核函数的选择敏感,若选择不当会影响结果
  • 多分类支持较弱:SVM 本质是二分类模型,多分类任务需通过 “一对多” 或 “一对一” 策略间接实现。
  • 对缺失值敏感:数据预处理需严格处理缺失值,否则会影响核函数计算。

八.SVC分类模型关键参数与训练后的模型属性

源码如下

1.关键参数

  • 惩罚因子 C
    • 控制异常数据是否作为支持向量。
    • C值越大,分类越严格(不容有误);C值越小,分类越宽松(允许异常点进入)。
    • 建议通过交叉验证选择(如0.01、0.1、1、100等)。
  • 核函数(kernel)
    • 默认选择RBF(径向基/高斯核函数)。
    • 其他选项:线性核函数、多项式核函数、sigmoid核函数。
  • gamma
    • 控制核函数中正态分布的“高矮胖瘦”,影响数据映射位置。
    • 默认值为特征数的倒数(如10个特征时gamma=0.1)。
  • degree
    • 仅在使用多项式核函数时需设置,其他情况下忽略。

2.训练后的模型属性

可获取支持向量svm.support_vectors_

系数svm.coef_[0]

及截距项svm.intercept_[0]等结果

九.SVM 实战:用 scikit-learn 实现分类任务  鸢尾花的分类

iris.csv的部分内容如下:第一列为编号

1.读取数据,csv文件并无列名,header设为None

from sklearn.svm import SVC
import pandas as pd
from  sklearn import metrics
from sklearn.model_selection import train_test_splitdata=pd.read_csv('iris.csv',header=None)

2.划分数据集

X=data.iloc[:,1:5]
y=data.iloc[:,-1]
train_x,test_x,train_y,test_y=train_test_split(X,y,test_size=0.2,random_state=100)

3.创建模型

使用线性核函数(kernel='linear')和严格参数(C=float('inf'))进行SVM训练,确保无异常点进入软间隔。

svm=SVC(kernel='linear',C=float('inf'),random_state=0)

4.训练模型并预测

svm.fit(train_x,train_y)
predicted=svm.predict(test_x)
print(metrics.classification_report(test_y,predicted))precision    recall  f1-score   support0       1.00      1.00      1.00        111       1.00      1.00      1.00         9accuracy                           1.00        20macro avg       1.00      1.00      1.00        20
weighted avg       1.00      1.00      1.00        20

5.完整代码

import numpy as np
from sklearn.svm import SVC
import pandas as pd
from  sklearn import metrics
from sklearn.model_selection import train_test_splitdata=pd.read_csv('iris.csv',header=None)X=data.iloc[:,1:5]
y=data.iloc[:,-1]
train_x,test_x,train_y,test_y=train_test_split(X,y,test_size=0.2,random_state=100)
svm=SVC(kernel='linear',C=float('inf'),random_state=0)
svm.fit(train_x,train_y)
predicted=svm.predict(test_x)
print(metrics.classification_report(test_y,predicted))

十.总结

支持向量机(SVM)是一种基于统计学习理论的经典算法,其核心思想是通过最大化间隔找到最优超平面,结合核函数机制有效处理非线性问题。尽管在超大规模数据集上的训练效率不如深度学习模型,但 SVM 在小样本、高维特征的分类任务中仍具有不可替代的优势。

使用 SVM 时需注意:

  • 根据数据线性性选择合适的核函数(优先尝试线性核和 RBF 核)。
  • 通过交叉验证调整C(惩罚系数)和γ(核系数)等超参数。
  • 对数据进行标准化预处理(核函数对特征尺度敏感)。

掌握 SVM 不仅能帮助解决实际分类问题,更能深入理解机器学习中 “间隔最大化”“核技巧” 等核心思想,为后续学习更复杂的模型打下基础。

http://www.lryc.cn/news/614165.html

相关文章:

  • 虚幻基础:场景actor与角色的碰撞
  • (0️⃣基础)程序控制语句(初学者)(第3天)
  • Javase-异常
  • Idea配置——build system的选项区别
  • SpringBoot激活指定profile的方式
  • 灰狼算法+四模型对比!GWO-CNN-LSTM-Attention系列四模型多变量时序预测
  • 《汇编语言:基于X86处理器》第12章 浮点数处理与指令编码(2)
  • 准确----SFTP新增用户
  • 三步完成,A100本地vLLM部署gpt-oss,并启动远程可访问api
  • 串口转以太网实战:S7-200驱动大棚温湿度监控、HMI与通风设备
  • Vue框架进阶
  • FPGA实现Aurora 64B66B数据回环传输,基于GTX高速收发器,提供2套工程源码和技术支持
  • 机器学习支持向量机(SVM)
  • 论文精读(二)| 开源软件漏洞感知技术综述
  • 深度学习·MAFT
  • Linux中的内核同步源码相关总结
  • 2025华数杯数学建模A题【 多孔膜光反射性能的优化与控制】原创论文分享
  • 提升LLM服务效率的秘密武器——vLLM!
  • 【MongoDB学习笔记2】MongoDB的索引介绍
  • [GESP202309 五级] 2023年9月GESP C++五级上机题题解,附带讲解视频!
  • 【具身智能】具身智能的革命——人形机器人如何重塑人类日常生活
  • VIOO IQOO7手机 解锁BL ROOT教程
  • Effective C++ 条款30:透彻了解inlining的里里外外
  • 安装CST时,报错问题处理
  • Suno AI 完全上手教程:从文字到音乐,打造自己专属音乐
  • Qwen Agent 入门介绍与简单使用示例
  • 用不均匀硬币实现公平决策
  • 【Bellman负环】Cycle Finding
  • 遥测自跟踪天线系统组成、特点、功能、工作流程
  • 降低程序运行时CPU和GPU峰值占用的技术方案