SVM -支持向量机原理详解与实践之四

SVM -支持向量机原理详解与实践之四SVM 支持向量机原理详解与实践之四 前言去年由于工作项目的需要实际运用到了 SVM 和 ANN 算法 也就是支持向量机和人工神经网络算法 主要是实现项目中的实时采集图片 工业高速摄像头采集 的图像识别的这一部分功能 虽然几经波折 但是还好最终还算顺利完成了项目的任务 忙碌一年 趁着放假有时间好好整理并总结一下 本文的内容包括 前面的部分是对支持向量机原理的分析 后半部分主要直接上手的一些

SVM –支持向量机原理详解与实践之四

  1. SVM原理分析

    1. SMO算法分析

SMO即Sequential minmal optimization, 是最快的二次规划的优化算法,特使对线性SVM和稀疏数据性能更优。在正式介绍SMO算法之前,首先要了解坐标上升法。

  1. 坐标上升法(Coordinate ascent)

坐标上升法(Coordinate Ascent)简单点说就是它每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的。

  1. 坐标上升法原理讲解

为了更加通用的表示算法的求解过程,我们将算法表示成:

 

SVM -支持向量机原理详解与实践之四

3.13-1

坐标上升法的算法为:

SVM -支持向量机原理详解与实践之四

这个算法中最为关键的地方就是内循环对于SVM -支持向量机原理详解与实践之四的求解,意思是固定除了SVM -支持向量机原理详解与实践之四之外的所有a(从i=1~m),也就是说将SVM -支持向量机原理详解与实践之四除外的其他变量看成是常数,并且将W看做是关于SVM -支持向量机原理详解与实践之四的函数,那么直接对SVM -支持向量机原理详解与实践之四求导优化得到极大值,在上面算法的版本中,内循环优化变量的顺序是SVM -支持向量机原理详解与实践之四但是一个更高级的版本可能选择其它的顺序,例如我可以根据我们的期望来选择下一个变量来更新,并让W(a)有最大的增加。

当函数W在内循环中能够最快的达到最优,则坐标上升是一个有效的算法,下面是一个坐标上升的示意图:

SVM -支持向量机原理详解与实践之四

上图中的椭圆形线代表我们需要优化问题的二次函数的等高线,变量数为2,起始坐标是(2,2),途中的直线是迭代优化的路径,可以看到每一步都会相最优值前进一步,而且前进的路线都是平行与相应的坐标轴的,因为每次只优化一个变量。

 

  1. C++算法编程实践

问题:求解函数SVM -支持向量机原理详解与实践之四的最大值。

解:回顾我们前面分析的求取函数最大值的关键是,求解每一个迭代变量的导数,当求解某一变量的导数的时候,其他的变量看做是常数:

SVM -支持向量机原理详解与实践之四

VS2013控制台工程参考代码如下:

// Coordinate ascent.cpp : Defines the entry point for the console application.

//

 

#include“stdafx.h”

 

 

#include


usingnamespace std;

#definef(x1,x2,x3) (-x1*x1-2*x2*x2-3*x3*x3+2*x1*x2+2*x1*x3-4*x2*x3+6)

int_tmain(intargc,_TCHAR*argv[])

{

    double x1 = 1;

    double x2 = 1;

    double x3 = 1;

    double f0 =f(x1, x2, x3);

    double err = 1.0e-10;

    while (true)

    {

        x1 = x2 + x3;//x1求导的表达式,每次迭代后更新

        x2 = 0.5*x1 – x3;//x2求导的表达式,每次迭代后更新

        x3 = 1.0 / 3 * x1 – 2.0 / 3 * x2;//x3求导的表达式,每次迭代后更新

        double ft =f(x1, x2, x3);//求函数值

        if (abs(ft – f0)

//
判断f是否收敛

        {

            break;//收敛即完成求解过程

        }

        f0 = ft;//更新f0

    }

    cout <<“\nmax{f(x1,x2,x3)}=” <<f(x1, x2, x3) << endl;

    cout <<取得最大值时的坐标:\n(x1,x2,x3)=(“ << x1 <<“,” << x2 <<“,” << x3 <<“)” << endl;

    system(“pause”);

    return 0;

}

运行结果如下:

SVM -支持向量机原理详解与实践之四

  1. SMO算法详解

回到我们软间隔与正则化章节(还有最优间隔分类器),我们的对偶问题,就是通过固定拉格朗日乘子a,得到w和b的最优化表达式(关于a的表达式),所以最后我们只需要确认a,我们就可以最终确定w和b,但是在讨论SMO算法之前,我们并没有真正求解出SVM -支持向量机原理详解与实践之四。这一章我们就会通过介绍SMO算法对对偶问题最后需要解决的问题:

SVM -支持向量机原理详解与实践之四

做出一个求解,也就是在参数SVM -支持向量机原理详解与实践之四上求W最大值的问题,注意其中的SVM -支持向量机原理详解与实践之四就是训练样本的输入,x即为样本的输入特征,y即样本对应的标签(结果)。

按照前面介绍的坐标上升的思路,我们首先固定除了SVM -支持向量机原理详解与实践之四以外的所有参数,然后在SVM -支持向量机原理详解与实践之四上求极值。现在下面先固定SVM -支持向量机原理详解与实践之四以外的所有参数,看看具体的求解步骤:

  1. SVM -支持向量机原理详解与实践之四
    首先由优化问题的约束条件SVM -支持向量机原理详解与实践之四可知:

即可推出

 

SVM -支持向量机原理详解与实践之四

 

两边乘以:

SVM -支持向量机原理详解与实践之四

 
 

SVM -支持向量机原理详解与实践之四

(3.13.2-1)

因为SVM -支持向量机原理详解与实践之四,所以SVM -支持向量机原理详解与实践之四,因此到这一步,SVM -支持向量机原理详解与实践之四就由其它的SVM -支持向量机原理详解与实践之四决定,如果我们固定主SVM -支持向量机原理详解与实践之四,无论如何不能违背优化问题的约束SVM -支持向量机原理详解与实践之四

    因此如果我们想要更新一些SVM -支持向量机原理详解与实践之四的对象,为了保持满足约束条件就必须至少快速的更新它们中的两个,这个就激发出SMO算法,那么SMO算法可以简单的描述成:

重复大括号中的操作直到收敛{

  1. 选择一对SVM -支持向量机原理详解与实践之四SVM -支持向量机原理详解与实践之四来更新下一个(用启发式的方法,也就是尝试选取两个允许我们朝着全局最大方向做最大前进的参数)
  1. 固定所有其它的参数SVM -支持向量机原理详解与实践之四,优化关于和SVM -支持向量机原理详解与实践之四的函数W(a)

}

为了测试该算法的收敛性,我们可以检查KKT条件:

SVM -支持向量机原理详解与实践之四

是否满足收敛容错参数,典型值为0.1~0.001之间。

SMO作为一个高效的算法的关键原因在于计算更新SVM -支持向量机原理详解与实践之四SVM -支持向量机原理详解与实践之四的效率非常高。假设当前我们有一些SVM -支持向量机原理详解与实践之四满足(3.10.3-5)的约束,固定SVM -支持向量机原理详解与实践之四,想要优化关于SVM -支持向量机原理详解与实践之四SVM -支持向量机原理详解与实践之四的函数,用SVM -支持向量机原理详解与实践之四表示SVM -支持向量机原理详解与实践之四SVM -支持向量机原理详解与实践之四有:

 

SVM -支持向量机原理详解与实践之四

 

由于右边固定,我们可以直接用一个常数表示,例如用SVM -支持向量机原理详解与实践之四表示:

SVM -支持向量机原理详解与实践之四

于是我可以将SVM -支持向量机原理详解与实践之四SVM -支持向量机原理详解与实践之四的约束画出来:

SVM -支持向量机原理详解与实践之四

根据约束条件:

SVM -支持向量机原理详解与实践之四

可知上图中表示SVM -支持向量机原理详解与实践之四SVM -支持向量机原理详解与实践之四的横轴和纵轴必须限制在0到C的方框内,并且也要在直线上。并且SVM -支持向量机原理详解与实践之四的纵轴也必须满足SVM -支持向量机原理详解与实践之四,否则就不能满足约束条件。

下面用SVM -支持向量机原理详解与实践之四表示SVM -支持向量机原理详解与实践之四,过程是:

SVM -支持向量机原理详解与实践之四

其中SVM -支持向量机原理详解与实践之四,因为SVM -支持向量机原理详解与实践之四,所以有:

SVM -支持向量机原理详解与实践之四

所以目标问题W可以表示为:

SVM -支持向量机原理详解与实践之四

其中SVM -支持向量机原理详解与实践之四为常数。

实际的问题中W展开后就是一个关于SVM -支持向量机原理详解与实践之四的二次函数SVM -支持向量机原理详解与实践之四, A、B、C是固定值,这样通过对W进行求导可得SVM -支持向量机原理详解与实践之四,然而要保证SVM -支持向量机原理详解与实践之四满足SVM -支持向量机原理详解与实践之四,我们使用SVM -支持向量机原理详解与实践之四 表示求导求出的SVM -支持向量机原理详解与实践之四, 然而最后的SVM -支持向量机原理详解与实践之四,需要根据下面的情况得到:

SVM -支持向量机原理详解与实践之四

SVM -支持向量机原理详解与实践之四求出以后,我们可以就可以得到SVM -支持向量机原理详解与实践之四

 

  1. 支持向量机实践

这里限于篇幅,实践的内容将在下一篇展开…


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178843.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:24
下一篇 2026年3月26日 下午4:24


相关推荐

  • linux C 中的volatile使用【转】[通俗易懂]

    linux C 中的volatile使用【转】

    2022年3月12日
    34
  • FM Bandwidth IQ Rate Sample Rate

    FM Bandwidth IQ Rate Sample Rate在labview中,编写FM的程序经常会涉及到以下几个名词,他们的关系是怎样的呢?BandwidthdeviationfrequencymodulatingfrequencyIQRateSampleRate首先关于带宽Bandwidth他是由以下公式决定的。请参考Carson’sRule。FMBandwidth=2(Δf + fm)

    2022年10月17日
    4
  • 阿里云如何部署使用OpenClaw?OpenClaw部署一看就会:零基础零代码、纯点击

    阿里云如何部署使用OpenClaw?OpenClaw部署一看就会:零基础零代码、纯点击

    2026年3月13日
    2
  • Canny 边缘检测算法

    Canny 边缘检测算法Canny 边缘检测算法 其对受白噪声影响的阶跃型边缘是最优的 目的 返回一个二值图像 非零数值表示图像中边缘的存在 返回与边缘相关的尺度和方向信息标准 检测标准 不丢失重要的边缘 不应有虚假的边缘定位标准 实际边缘与检测到的边缘位置之间的偏差最小单响应标准 将多个响应降低为单个边缘响应 这个标准可以解决受噪声影响的边缘问题 以及起到地址非平滑边缘检测算子的作用 步骤 A 用高斯滤

    2026年3月19日
    2
  • JavaScript核心语法特点

    JavaScript核心语法特点2019 8 25 日晚学习笔记 25 日晚 学习了 js 的基本语法 第一次清晰的知道 js 的语法特点 知道 js 的由来 以下是 js 的语法特点总结 1 借鉴 C 语言的基本语法 2 借鉴 Java 语言的数据类型和内存管理 3 借鉴 Scheme 语言 将和函数提升到 第一等公民 firstclass 的地位 4 借鉴 Self 语言使用基本原型 prototype 的继承机制 JavaScript 的

    2026年3月26日
    3
  • MySQL字符串拼接函数介绍

    MySQL字符串拼接函数介绍在 MySQL 中 实现字符串拼接主要有以下 3 种函数 concat x y concat ws 分隔符 x y group concat distinctxxxo descyyysepar 分隔符 一 concat 函数 concat 函数用于将多个字符串连接成一个字符串格式 concat str1 str2 mysqlconca

    2025年6月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号