统计学习方法 学习笔记(五):支持向量机(下)

通过支持向量机(上)和支持向量机(中)的介绍,对支持向量机应该有点感性的认识啦!在这个学习笔记中,来继续探寻带核函数的支持向量机(解决如下图所示的问题)

对解线性分类问题,线性分类支持向量机是一种非常有效的方法。但是,有时分类问题是非线性的,这时可以使用非线性支持向量机。

 

核技巧:

    如上图所示,设原空间为$\mathcal{X} \subset R^2, x = (x^{(1)},x^{(2)})^T \in \mathcal{X}$,新空间为$\mathcal{Z} \subset R^2, z = (z^{(1)},z^{(2)})^T \in \mathcal{Z}$,定义从原空间到新空间的变换(映射):

$$z = \phi (x) = ((x^{(1)})^2,(x^{(2)})^2)^T$$

经过变换$z=\phi (x)$,原空间$ \mathcal{X} \subset R^2 $变换为新空间$ \mathcal{Z} \subset R^2$,原空间中的点相应地变换为新空间中的点,原空间中的椭圆:

$$w_{1}(x^{(1)})^2 +w_{2}(x^{(2)})^2 + b = 0$$

变换成为新空间中的直线:

$$w_{1}z^{(1)} + w_{2}z^{(2)} + b = 0 $$

在变换后的新空间里,直线$w_{1}z^{(1)} + w_{2}z^{(2)} + b = 0$可以将变换后的正负实例点正确分开。这样,原空间的非线性可分问题就变成了新空间的线性可分问题。

    上面的例子说明,用线性分类方法求解非线性分类问题分为两步:首先使用一个变换将原空间的数据映射到新空间;然后在新空间里用线性分类学习方法从训练数据中学习分类模型。核技巧就属于这样的方法。

    核技巧应用到支持向量机,其基本想法就是通过一个非线性变换将输入空间对应一个特征空间,使得在输入空间$R^n$中的超曲面模型对应于特征空间$\mathcal{H}$中的超平面模型(支持向量机)。这样,分类问题的学习任务通过在特征空间中求解线性支持向量机就可以完成。

    核函数的定义

    设$\mathcal{X}$是输入空间(欧式空间$R^n$的子集或离散集合),又设$\mathcal{H}$为特征空间(希尔伯特空间),如果存在一个从$\mathcal{X}$到$\mathcal{H}$的映射:

$$\phi (x): \mathcal{X} \rightarrow \mathcal{H}$$

使得对所有$x,z \in \mathcal{X}$,函数$K(x,z)$满足条件:

$$K(x,z) = \phi (x)\cdot \phi (z)$$

则称$K(x,z)$为核函数,$\phi (x)$为映射函数,式中$\phi (x)\cdot \phi (z) $为$\phi (x)$和$\phi (z)$的内积。

    核技巧的想法是,在学习与预测中只定义核函数$K(x,z)$,而不显示地定义映射函数$\phi$。通常,直接计算$K(x,z)$比较容易,而通过$\phi (x)$和$\phi (z)$计算$K(x,z)$并不容易。注意,$\phi$是输入空间$R^n$到特征空间$\mathcal{H}$的映射,特征空间$\mathcal{H}$一般是高维的,甚至是无穷维的。

核技巧在支持向量机中的应用:

    在线性支持向量机的对偶问题中,无论是目标函数还是决策函数(分离超平面)都只涉及输入实例与实例之间的内积。在对偶问题的目标函数中内积$x_i\cdot x_j$可以用核函数$K(x_i,x_j) = \phi (x_i) \cdot \phi (x_j)$ 来代替。此时对偶问题:

$$W(\alpha) = \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_jK(x_i,x_j) - \sum_{i=1}^{N}\alpha_i$$

同样,分类决策函数中的内积也可以用核函数代替,而分类决策函数式为:

$$f(x) = sign(\sum_{i=1}^{N_s}\alpha_{i}^{*}y_i\phi (x_i)\cdot \phi (x) + b^{*}) = sign(\sum_{i=1}^{N_s}\alpha_{i}^{*}y_iK(x_i,x) + b^{*})$$

这等价于经过映射函数$\phi$将原来的输入空间变换到一个新的特征空间,将输入空间中的内积$x_i\cdot x_j$变换为特征空间中的内积$\phi (x_i)\cdot \phi (x_j)$,在新的特征空间里从训练样本中学习线性支持向量机。当映射函数是非线性函数时,学习到的含有核函数的支持向量机是非线性分类模型。

    也就是说,在核函数$K(x,z)$给定的条件下,可以利用线性分类问题的方法求解非线性分类问题的支持向量机。学习是隐式地在特征空间进行的,不需要显示地定义特征空间和映射函数。这样的技巧称为核技巧,它是巧妙地利用线性分类学习方法与核函数解决非线性问题的技术。在实际应用中,往往依赖领域知识直接选择核函数。下面介绍两种核函数:

常用核函数:

(1)多项式核函数(polynomial kernel function):

$$K(x,z) = (x\cdot z + 1)^p$$

对应的支持向量机是一个$p$次多项式分类器。在此情形下,分类决策函数成为:

$$f(x) = sign(\sum_{i=1}^{N_s}\alpha_{i}^{*}y_i(x_i\cdot x + 1)^p + b^{*})$$

(2)高斯核函数(Gaussian kernel function)

$$K(x,z) = exp(- \frac{||x-z||^2{2\sigma^{2}}})$$

对应的支持向量机是高斯径向基函数(radial basis function)分类器。在此情形下,分类决策函数成为:

$$f(x) = sign(\sum_{i=1}^{N_s}\alpha_{i}^{*}y_iexp(- \frac{||x-z||^2}{2\sigma^{2}}) + b^*)$$

 

非线性支持向量机学习算法:

    输入:训练数据集$T = \{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}$,其中$x_i \in \mathcal{X} = R^n, y_i \in \mathcal{Y} = {-1,+1},i=1,2,...,N$;

    输出:分类决策函数

    (1)选取适当的核函数$K(x,z)$和适当的参数$C$,构造并求解最优化问题:

$$\min_{\alpha} \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i\alpha_jy_iy_jK(x_i,x_j) - \sum_{i=1}^{N}\alpha_i$$

$$s.t.    \sum_{i=1}^{N}\alpha_iy_i = 0$$

$$ 0 \leq \alpha_i \leq C, i=1,2,...,N$$

求得最优解$\alpha^{*} = (\alpha_{1}^{*},\alpha_{2}^{*},...,\alpha_{N}^{*})^T$

    (2)选择$\alpha^{*}$的一个正分量$0<\alpha_{j}^{*}<C$,计算

$$b^{*} = y_j - \sum_{i=1}^{N}\alpha_{i}^{*}y_iK(x_i\cdot x_j)$$

    (3)构造决策函数:

$$f(x) = sign(\sum_{i=1}^{N}\alpha_{i}^{*}y_iK(x\cdot x_i) + b^{*})$$

当$K(x,z)$是正定核函数时,上述目标函数是凸二次规划问题,解是存在的。对偶算法的实现请参考序列最小最优化算法。

转载于:https://www.cnblogs.com/double-lin/p/10420515.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

是先设计mysql表再进行php代码_PHP与RBAC设计思路,数据表设计与源码讲解

权限系统模块对于互联网产品是一个非常重要的功能&#xff0c;可以控制不同的角色合理的访问不同的资源从而达到安全访问的作用权限控制有哪些模型ACLRBAC 基于角色的访问控制从上图我们可以看出&#xff0c;ACL是用户和权限直接关系的&#xff0c;而RBAC则是通过角色间接关联用…

自动化测试模型

自动化测试模型可以看作自动化测试框架与工具设计的思想。自动化测试不仅仅是单纯写脚本运行就可以了&#xff0c;还需要考虑到如何使脚本运行效率提高&#xff0c;代码复用、参数化等问题。自动化测试模型分为四大类&#xff1a;线性模型、模块化驱动测试、数据驱动、关键字驱…

SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串

自定义取出第几个分割字符前的字符串&#xff0c;默认位置&#xff08;0&#xff09;格式&#xff1a;dbo.split(字段名,分隔字符,取出的第几个字符串)如果没有分隔的字符&#xff0c;则返回整个字符串。如果取出的位置字符串的位置超出Index则返回空。CREATE FUNCTION [dbo].[…

mysql 开发 生产_在没有表锁定的情况下在巨大的MySQL生产表...

[2017]更新&#xff1a;MySQL 5.6支持在线索引更新In MySQL 5.6 and higher, the table remains available for read and write operations while the index is being created or dropped. The CREATE INDEX or DROP INDEX statement only finishes after all transactions tha…

ListView性能优化

ListView在ScrollView中无法正确计算它的大小, 故不能显示正常的条目。 解决办法有&#xff1a; 1.重写ListView, 覆盖onMeasure()方法。 1 public class WrapperListView extends ListView {2 public WrapperListView(Context context) {3 super(context);4 }…

判断页面关闭的方法 UNLOAD/onbeforeunload

最近一个朋友做在线统计&#xff0c;问我怎么判断用户登陆和离开。获得用户登陆不用说了&#xff0c;大家都知道&#xff0c;判断离开的话就有一点问题了&#xff0c;如果说用户都是按照设计者的规定的范围触发退出事件离开的话那就没什么难度了&#xff0c;但是用户的离开方式…

mysql 第几周 时间戳_php时间戳函数实现计算第几周,以及当天所在周的具体日期范围...

<html><script language"javascript">function showdate(){c new Date(2008,1,29);//输入开学的日期.注意,月份是从0-11;comperc.getTime();//以2008年2月29日作为上半学期结束。然后记录新的开学日期var now new Date();//获取当前时间var d_nownow.ge…

java学习笔记④MySql数据库--03/04 DQL查询

03 使用DQL查询数据&#xff08;一&#xff09; 04 使用DQL查询数据&#xff08;二&#xff09; DQL 数据查询语言 select select * 方式效率低 AS 取别名 (给字段取别名,给表取别名,给计算结果取别名) as取别名时,可省略as distinct 去重 所有字段一起不重复算一条记录 selec…

2005国产空间信息系统软件测评结果揭晓

记者&#xff1a;云洲 来源&#xff1a;www.3sNews.net 责编&#xff1a;小柯 [3sNews讯]2005年12月27&#xff0c;为期两天的“地球观测与导航技术领域科技发展研讨会”于中国科技会堂胜利召开&#xff0c;备受业界关注的2005国产空间信息系统软件测评结果在会上揭晓&am…

mysql变量string_mysql sql语句有变量 time_t变量转换为string

1.char*变量 如果有两个指针变量不可以 需要一个转换为stringstring strCall ;strCall.assign(pCallInfo->m_szCallerNo,strlen(pCallInfo->m_szCallerNo));//char* 转换为stringstring sql "insert into tcallrecord values("strCall","pCallInfo-…

axios+vue实现动态渲染员工数据+数据是对象

<style>table{width: 600px;margin: 0 auto;text-align: center;border-collapse: collapse; /*合并边框哦*/}tr th,tr td{border: 1px solid pink;}</style><script src"../vue.js"></script><script src"../axios.js">&l…

[Translation]《击鼓》

"Live or die,meet or part,weve made oath,you and I;,7UZGive me your hand,Ill hold,and live together,till old.l"From: 《击鼓》I?©MYUP2U社区 -- 整理童年的记忆&#xff0c;释放知识的潜力&#xff0c;共享青春的激情&#xff0c;尽在MYUP2U&#xff0…

[vue] vue自定义事件中父组件怎么接收子组件的多个参数?

[vue] vue自定义事件中父组件怎么接收子组件的多个参数&#xff1f; 子组件传递多个参数&#xff0c;父组件用展开运算符获取个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关…

FLASH全屏,左右侧,闪烁广告及对错觉的代码补充.

<!--焦点图开始--> <script type"text/javascript"><!--var focus_width250; ------ flash的宽度var focus_height160; ------ flash的高度同样可以加上背景颜色 var focus_bgcolor160; ------ flash的背景颜色…

vscode调试angular2

调试步骤&#xff1a; 1.安装nodejs 2.安装vscode 3.vscode安装debugger for chrome插件 4.选择调试->打开调试配置&#xff0c;选择chrome配置&#xff0c;打开lauch.json,修改如下&#xff1a; {"version": "0.2.0","configurations": [{&q…