SMV 算法【python,机器学习,算法】

server/2024/10/18 9:25:05/

支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised
learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),
其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。

SVM 使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险
(structural risk), 是一个具有稀疏性和稳健性的分类器。SVM 可以通过核方法(kernel method)进行非线性分类,
是常见的核学习(kernel learning)方法之一。

支持向量机(Support Vector Machine, SVM)是一种强大的机器学习算法,主要用于分类问题,也可以用于回归和异常检测。以下是SVM训练的一般步骤:

  1. 数据准备:
    • 收集数据集,并划分为训练集和测试集(或验证集)。
    • 对于分类问题,确保数据集包含每个类别的标签。
    • 对于回归问题,确保目标变量是连续的。
    • 如果需要,对数据进行预处理,如缩放、标准化或归一化,因为SVM对特征的尺度敏感。
  2. 选择核函数(对于非线性SVM):
    SVM的一个关键特性是它可以处理非线性问题,通过选择一个核函数(如线性核、多项式核、径向基函数(RBF)核或
    Sigmoid 核)来实现。 根据问题的性质和数据集的特性选择合适的核函数。
  3. 选择参数:
    对于 SVM,有两个主要的参数需要选择:C(正则化参数)和 γ(核函数的系数,对于 RBF 核)。
    C 控制对误分类的惩罚程度,C 越大,模型越复杂,但可能过拟合;C 越小,模型越简单,但可能欠拟合。
    γ 控制RBF 核的“宽度”,γ越大,核函数越窄,模型越复杂;γ越小,核函数越宽,模型越简单。
    可以使用交叉验证和网格搜索等方法来找到最佳的 C 和 γ 值。
  4. 训练 SVM 模型:
    使用训练集和选定的核函数及参数来训练 SVM 模型。
    训练过程中,SVM 会找到一个决策边界(超平面),该边界将不同类别的数据点分隔开,并最大化两个类别之间的间隔。
  5. 评估模型:
    使用测试集来评估模型的性能。
    对于分类问题,可以使用准确率、召回率、F1 分数等指标来评估模型的性能。
    对于回归问题,可以使用均方误差(MSE)、均方根误差(RMSE)等指标来评估模型的性能。
  6. 优化模型(可选):
    如果模型的性能不佳,可以尝试调整参数、选择不同的核函数或进行特征选择等优化措施。
    也可以尝试使用集成方法(如 Bagging、Boosting)来改进 SVM 的性能。
  7. 使用模型进行预测:
    一旦模型训练完成并经过评估和优化,就可以使用它来对新数据进行预测了。
    对于分类问题,模型会输出数据点所属的类别;对于回归问题,模型会输出一个连续值作为预测结果。

需要注意的是,虽然 SVM 在许多问题上表现良好,但它并不总是最佳选择。
在选择使用 SVM 之前,最好先了解问题的性质和数据集的特性,并考虑其他可能的机器学习算法

为了方便计算分析,下面以二维数据进行讨论。

三个超平面

  1. 决策超平面
    W 1 x 1 + W 2 x 2 + b = 0 W_1x_1+W_2x_2+b=0 W1x1+W2x2+b=0,位于正负超平面的中间位置。
  2. 正类超平面
    W 1 x 1 + W 2 x 2 + b = 1 W_1x_1+W_2x_2+b=1 W1x1+W2x2+b=1,所有的正类数据会分布到该平面内或者分割的平面以上。
  3. 负类超平面
    W 1 x 1 + W 2 x 2 + b = − 1 W_1x_1+W_2x_2+b=-1 W1x1+W2x2+b=1,所有的负类数据会分布到该平面内或者分割的平面以下。

正负超平面之间的距离应最大化,这样才能更好的进行分类,正负超平面上会分布一些向量数据点,因此通过该方式进行分类的方法称作支持向量机。
其中 W 1 W_1 W1 W 2 W_2 W2表示权重, x 1 x_1 x1 x 2 x_2 x2表示特征值。

正负超平面之间的距离

通过向量法则以及三个超平面的式子可以推导出正负超平面距离公式 L = 2 ∣ W ⃗ ∣ L=\frac{2}{|\vec{W}|} L=W 2,其中 W ⃗ = w 1 2 + w 2 2 \vec{W}=\sqrt{w_1^2+w_2^2} W =w12+w22
那么问题将转换为求取 W ⃗ \vec{W} W 最小值的问题。

求取 ∣ W ⃗ ∣ |\vec{W}| W 的最小值

分类值 y i = { 1 , − 1 } y_i=\{1,-1\} yi={1,1},那么 y i . ( w ⃗ . x i ⃗ + b ) ⩾ 1 y_i . (\vec{w}.\vec{x_i}+b)\geqslant 1 yi.(w .xi +b)1 i ∈ 1 , 2 , 3 , . . . , n i \in 1,2,3,...,n i1,2,3,...,n表示所有的样本。

将问题转换为:求取 f ( w ) = ∣ w ⃗ ∣ 2 2 f(w)=\frac{|\vec{w}|^2}{2} f(w)=2w 2最小值问题,限制条件为 y i . ( w ⃗ . x i ⃗ + b ) − 1 ⩾ 0 y_i . (\vec{w}.\vec{x_i}+b)-1\geqslant 0 yi.(w .xi +b)10

为了使用拉格朗日乘子,将限制条件转换为等式 g i ( w , b ) = y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 = p i 2 g_i(w,b)=y_i * (\vec{w} . \vec{x_i}+b)-1=p_i^2 gi(w,b)=yi(w .xi +b)1=pi2

因此,拉格朗日方程式子为: L ( w , b , λ i , p i ) = ∣ w ⃗ 2 ∣ 2 − ∑ i = 1 s λ i ∗ ( y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 − p i 2 ) L(w,b,\lambda_i,p_i)=\frac{|\vec{w}^2|}{2}-\sum\limits_{i=1}^{s} \lambda_i * (y_i * (\vec{w} . \vec{x_i}+b)-1-p_i^2) L(w,b,λi,pi)=2w 2i=1sλi(yi(w .xi +b)1pi2)

对各个分量求偏导,并令其为0,可以得到 4 个式子:

  1. L ′ ( w ) = w ⃗ − ∑ i = 1 s λ i y i x i ⃗ = 0 L^\prime(w)=\vec{w}-\sum\limits_{i=1}^{s}\lambda_i y_i \vec{x_i}=0 L(w)=w i=1sλiyixi =0
  2. L ′ ( b ) = − ∑ i = 1 s λ i y i = 0 L^\prime(b)=-\sum\limits_{i=1}{s}\lambda_i y_i=0 L(b)=i=1sλiyi=0
  3. L ′ ( λ i ) = y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 − p i 2 = 0 L^\prime(\lambda_i)=y_i * (\vec{w} . \vec{x_i}+b)-1-p_i^2=0 L(λi)=yi(w .xi +b)1pi2=0
  4. L ′ ( p i ) = 2 λ i p i = 0 L^\prime(p_i)=2\lambda_i p_i=0 L(pi)=2λipi=0

由 3 和 4 式子可以得到 λ i ∗ ( y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 ) = 0 \lambda_i * (y_i * (\vec{w} . \vec{x_i}+b)-1) = 0 λi(yi(w .xi +b)1)=0
因为 λ i ⩾ 0 \lambda_i \geqslant 0 λi0,所以 y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 ⩾ 0 y_i * (\vec{w} . \vec{x_i}+b)-1 \geqslant 0 yi(w .xi +b)10

上面 4 个式子加上 ′ l a m b d a i ⩾ 0 'lambda_i \geqslant 0 lambdai0就是 KKT 条件。

将原问题转换为对偶问题求解

  1. 原问题
    m i n i m i z e f ( w ) = ∣ w i ⃗ ∣ 2 2 minimize\ \ f(w)=\frac{|\vec{w_i}|^2}{2} minimize  f(w)=2wi 2
    限制条件 g i ( w , b ) = y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) − 1 ⩾ 0 g_i(w,b)=y_i * (\vec{w} \cdot \vec{x_i}+b)-1 \geqslant 0 gi(w,b)=yi(w xi +b)10
  2. 对偶问题
    m a x i m i z e q ( λ ) = m a x i m i z e ( m i n i m i z e ( ∣ w i ⃗ ∣ 2 2 − y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) − 1 ) ) maximize\ \ q(\lambda)=maximize(minimize(\frac{|\vec{w_i}|^2}{2} - y_i * (\vec{w} \cdot \vec{x_i}+b)-1)) maximize  q(λ)=maximize(minimize(2wi 2yi(w xi +b)1)),其中 λ i ⩾ 0 \lambda_i \geqslant 0 λi0
  3. 根据 KKT 条件,精简对偶问题
    m a x i m i z e q ( λ i ) = m a x i m i z e ( ∑ i = 1 s λ i − 1 2 ∑ i = 1 s ∑ j = 1 s λ i λ j y i y j x i ⃗ ⋅ x j ⃗ ) maximize\ \ q(\lambda_i) = maximize(\sum\limits_{i=1}^{s}\lambda_i-\frac{1}{2}\sum\limits_{i=1}^{s}\sum\limits_{j=1}^{s}\lambda_i\lambda_j y_i y_j \vec{x_i} \cdot \vec{x_j}) maximize  q(λi)=maximize(i=1sλi21i=1sj=1sλiλjyiyjxi xj )
  4. 由对偶问题,求解得到 λ i \lambda_i λi,然后根据 w ⃗ = ∑ i = 1 s λ i y i x i ⃗ \vec{w}=\sum\limits_{i=1}{s}\lambda_i y_i \vec{x_i} w =i=1sλiyixi 求解得到 w ⃗ \vec{w} w ,再根据 y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) − 1 = 0 y_i *(\vec{w}\cdot\vec{x_i}+b)-1=0 yi(w xi +b)1=0求得 b b b

核技巧

  1. 方法一:通过维度转换函数将向量进行升维度,然后计算 x i ⃗ ⋅ x j ⃗ \vec{x_i} \cdot \vec{x_j} xi xj 的结果。这种方法有限制性,当维度很高时,无法计算结果。
  2. 方法二: 定义多项式核函数 K ( x i ⃗ , x j ⃗ ) = ( c + x i ⃗ , x j ⃗ ) d K(\vec{x_i},\vec{x_j})=(c+\vec{x_i},\vec{x_j})^d K(xi ,xj )=(c+xi ,xj )d,参数 c c c控制了式子中既有低次项也有高次项。
  3. 在 SVM 问题中,使用高斯核函数 K ( x i ⃗ , x j ⃗ ) = e − γ ∣ x i ⃗ − y j ⃗ ∣ 2 K(\vec{x_i},\vec{x_j})=e^{-\gamma|\vec{x_i}-\vec{y_j}|^2} K(xi ,xj )=eγxi yj 2,即 Radial Basis Kernel 函数。 γ \gamma γ相当于相似容忍度。

损失函数

使用铰链损失函数 m a x ( 0 , 1 − p ) max(0,1-p) max(0,1p)。其中 p = y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) p=y_i *(\vec{w}\cdot \vec{x_i}+b) p=yi(w xi +b)


http://www.ppmy.cn/server/46891.html

相关文章

信息与未来2015真题笔记

[信息与未来 2015] 加数 题目描述 给出一个正整数 n n n,在 n n n 的右边加入 ⌊ n 2 ⌋ \left\lfloor\dfrac n2\right\rfloor ⌊2n​⌋,然后在新数的右边 再加入 ⌊ ⌊ n 2 ⌋ 2 ⌋ \left\lfloor\dfrac{\left\lfloor\dfrac n2\right\rfloor}2\rig…

【C#】自定义List排序规则的两种方式

目录 1.系统排序原理 2.方式一&#xff1a;调用接口并重写 3.方式二&#xff1a;传排序规则函数做参数 1.系统排序原理 当我们对一个List<int>类型的数组如list1排序时&#xff0c;一个轻松的list1.sort();帮我们解决了问题 但是在实际应用过程中&#xff0c;往往我们…

Linux文件系统和日志分析

一、深度认识文件系统 1.1 iNode号 iNode&#xff1a;元信息 1.1.1 iNode内容 iNode的内容包括文件的大小&#xff0c;属性&#xff0c;权限&#xff0c;UID&#xff0c;GID&#xff0c;时间戳等。 时间戳&#xff1a; atime&#xff1a;access time&#xff0c;访问时间…

排序-希尔排序

介绍 希尔排序属于那种没有了解过的直接看代码一脸懵逼的&#xff0c; 所以同学们尽量不要直接看代码&#xff0c;仔细阅读本篇博客内容。 插入排序本来算是一个低效排序&#xff0c; 一次只可以挪动一个数据&#xff0c; 但是&#xff0c;它的强来了&#xff01;&#xff01…

Matplotlib绘图指南:从基础绘图到多子图展示

目录 前言 导入模块 第一点&#xff1a;绘制图像 第二点&#xff1a;保存图像 第三点&#xff1a;多图形的绘制 第四点&#xff1a;绘制多子图 总结 前言 在数据可视化中&#xff0c;Matplotlib是一款强大的Python库&#xff0c;提供了丰富的功能来绘制各种类型的图表。…

C# --- 浮点数类型 float, double, decimal

C# --- 浮点数类型 float, double, decimal float, double, decimaldecimal float, double, decimal decimal double 和 float 的采用base 2, 不能精确的表示浮点数, 进行加减乘除的操作的时候会出现精度丢失的问题decimal 采用base 10&#xff0c;可以精确的表示浮点数&#x…

深入解析智慧互联网医院系统源码:医院小程序开发的架构到实现

本篇文章&#xff0c;小编将深入解析智慧互联网医院系统的源码&#xff0c;重点探讨医院小程序开发的架构和实现&#xff0c;旨在为相关开发人员提供指导和参考。 一、架构设计 智慧互联网医院系统的架构设计是整个开发过程的核心&#xff0c;直接影响到系统的性能、扩展性和维…

基于翔云C#语言的身份证实名认证接口开发示例

现如今&#xff0c;安全与便捷成为了互联网服务的两大关键词。为了进一步提升用户体验并加强网络安全管理&#xff0c;国内多家主流App近日宣布完成一项重要功能升级——集成身份证实名认证系接口。这一举措标志着用户在进行App注册时&#xff0c;将享受到更加高效、安全的身份…