遵循统一的机器学习框架理解SVM
遵循统一的机器学习框架理解SVM
一、前言
- 我的博客仅记录我的观点和思考过程。欢迎大家指出我思考的盲点,更希望大家能有自己的理解。
- 本文参考了李宏毅教授讲解SVM的课程和李航大大的统计学习方法。
二、理解
统一的机器学习框架(MLA):
1.模型(Model)
2.策略(Loss)
3.算法(Algorithm)
按照如上所说框架,SVM最核心的就是使用了 Hinge Loss 和 核方法 。
SVM: Hinge Loss + Kernel Method
Model
给定数据集 \((x^1,\hat{y}^1),(x^2,\hat{y}^2)...(x^n,\hat{y}^n)\),其中\(\hat{y}^i\in\{1,-1\}\),且线性函数:
\[f(x)=w^Tx+b\]
\[y=\begin{cases}
1,\quad &f(x)>0\\
-1, &f(x)<0
\end{cases}\]
同时:
当 \(\hat{y}=1\) 时,\(f(x)\)越大越好; \(\hat{y}=-1\) 时,\(f(x)\)越小越好。
综合来说即:\(\hat{y}f(x)\) 越大越好。
Loss
结构风险最小化:经验风险+正则项
经验风险
上面说到我们希望 \(\hat{y}f(x)\) 越大越好,也就是当 \(\hat{y}f(x)\) 越大时,损失应该越小(Large Value, Small Loss)。
1.考虑使用 \(sigmoid + cross\ entropy\) 的损失函数:
\[\hat{y}=\begin{cases}
+1,\; &f(x)>0\; &\sigma(f(x))\longrightarrow 1, &Loss=-ln(\sigma(f(x)))\\
-1,\; &f(x)<0\; &\sigma(f(x))\longrightarrow 0, &Loss=-ln(1-\sigma(f(x)))
\end{cases}\]
考虑到 \(1-\sigma(f(x))=1-\frac{1}{1+exp(-f(x))}=\frac{1}{1+exp(f(x))}=\sigma(-f(x))\)
\[Loss = -ln(\sigma(\hat{y}f(x)))=ln(1+exp(-\hat{y}f(x))) \]
这个就是西瓜书中的对率损失。
2.使用Hinge Loss损失函数:
使用对率损失时,希望\(\hat{y}f(x)\)越大越好,好上加好,永无止境的那种。
换一种角度看,假如我们希望 \(\hat{y}f(x)\) 做的足够好就可以了,也就是说当 \(\hat{y}f(x)>1\) 时,我们认为它已经做的足够好了,此时损失就为0了。
题外话:Hinge Loss就好像横向学习,很多时候我们需要学习很多领域的知识,此时大概知道、了解就行;对率损失就像纵向学习,在自己的领域需要钻研,好上加好。
\[Loss = max(0,1-\hat{y}f(x))\]
正则项
\[\frac{1}{2}||w||^2\]
综上所述,最终的损失函数:
\[Loss = \frac{1}{2}\lambda||w||^2 + \sum_{i=1}^n max(0,1-\hat{y}^i f(x^i))\]
注意到Loss中正则项是凸函数,经验损失项也是凸函数,直接用梯度下降法就可以求解。
Algorithm
梯度下降法
\[\frac{\partial L}{\partial w} = \lambda w+ \sum_{i=1}^n -\delta(\hat{y}^i f(x^i) < 1)\hat{y}^i x^i\]
\[\frac{\partial L}{\partial b} = \sum_{i=1}^n -\delta(\hat{y}^i f(x^i) < 1)\hat{y}^i\]
其中\(\delta(\hat{y}^i f(x^i) < 1)\)是指示函数。
\[w^{k+1}=w^k-\eta(\lambda w^k+ \sum_{i=1}^n -\delta(\hat{y}^i f(x^i) < 1)\hat{y}^i x^i)\]
\[b^{k+1}=b^k-\eta(\sum_{i=1}^n -\delta(\hat{y}^i f(x^i) < 1)\hat{y}^i)\]
总结
到目前位置所做的事就是:对于一组给定的数据,找到一个超平面划分它们,进行分类,且要求尽可能做的好(策略是HingeLoss)。考虑到在当前维度或者空间可能做的不是很好(可分性不是很好),可以把这些数据点变换空间或者升维,在另一个空间具有更好的可分性,这样可以把当前任务做的更好。
\[z = \phi(x) \]
z表示对x进行变换后的形式(可以是高维空间,也可以是低维空间),此时再使用上面所说的方法
\[Loss = \frac{1}{2}\lambda||w||^2 + \sum_{i=1}^n max(0,1-\hat{y}^i f(z^i))\]
\[Loss = \frac{1}{2}\lambda||w||^2 + \sum_{i=1}^n max(0,1-\hat{y}^i f(\phi(x^i)))\]
不足之处:对x进行变换后得到z,首先我们需要计算得到z,再进行后续的计算,当升维后z的维度很大,此时虽然可分性增加了,但是计算量会大大增加,而且对于特殊情况,比如z是无限维时,z根本就无法计算出来,由此引出核方法。
扩展
- 对于一个深度神经网络做二分类任务,一般我们使用交叉熵作为损失函数,假如把损失函数替换为hingeloss,则就是深度学习版的SVM。
- 把深度神经网络的前n-1层看作一个特征变换层,最后一层看作分类层,与我们总结中说的就非常相似了,把 \(x\) 进行转换,再进行分类。不同点在于:我们所说的SVM这个变换的函数是我们定义的,是确定的,而Deep Learning里的转换函数是不定的,是通过数据学出来的。
总的来说,SVM和深度学习分类任务遵循统一的思想,从本质上来说没必要区分它们。
三、对偶形式
写出对偶形式的目的是:将 \(w,b\) 表示为数据点的线性组合,这样可以把 \(\phi(x^i)\phi(x^j)\) 这种在高维空间的计算转换成成 \(\kappa(x^i,x^j)\) 在低维空间计算,再通过核函数直接得到最终的值的方式。
隐含的思想是:我并不需要了解中间的过程(升维后的值),只需要得到他们之间的关系就行(核函数),核函数 \(\kappa\) 就表示了这种关系。
根据 \(w,b\) 的求解公式的特性,当 \(w^0=0,b^0=0\) 时,容易看出 \(w,b\) 是给定数据点的线性组合(Linear Combination)
\[w = \sum_{i=1}^n \alpha_i \hat{y}^i x^i\]
\[b = \sum_{i=1}^n \beta_i \hat{y}^i\]
\[\alpha_i= \eta\{(1-\eta \lambda)^k \delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->0}+(1-\eta \lambda)^{k-1} \delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->1}+...\\+(1-\eta \lambda)^0 \delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->k}\}\]
\[\beta_i= \eta\{\delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->0}+ \delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->1}+...\\+ \delta(\hat{y}^i (w^Tx^i+b<1))_{w,b->k}\}\]
这里要区别于感知机,因为在此处有正则项,\(\lambda > 0\),假如 \(\lambda=0\) 时,则 \(\alpha_i=\beta_i\)
此时:
\[f(x) = w^Tx+b= (\sum_{i=1}^n \alpha_i \hat{y}^i x^i)^{T}x+\sum_{i=1}^n \beta_i \hat{y}^i\]
\[f(x) = w^Tx+b= (\sum_{i=1}^n \alpha_i \hat{y}^i z^i)^{T}z+\sum_{i=1}^n \beta_i \hat{y}^i\]
\[f(x) = w^Tx+b= \sum_{i=1}^n \alpha_i \hat{y}^i \kappa (z^i,z)+\sum_{i=1}^n \beta_i \hat{y}^i\]
遵循统一的机器学习框架理解SVM的更多相关文章
- 遵循统一的机器学习框架理解高斯混合模型(GMM)
遵循统一的机器学习框架理解高斯混合模型(GMM) 一.前言 我的博客仅记录我的观点和思考过程.欢迎大家指出我思考的盲点,更希望大家能有自己的理解. 本文参考了网络上诸多资料,特别是B站UPshuhua ...
- 机器学习之深入理解SVM
在浏览本篇博客之前,最好先查看一下我写的还有一篇文章机器学习之初识SVM(点击可查阅哦).这样能够更好地为了结以下内容做铺垫! 支持向量机学习方法包括构建由简至繁的模型:线性可分支持向量机.线性支持向 ...
- 支持向量机通俗导论(理解SVM的三层境界)
原文链接:http://blog.csdn.net/v_july_v/article/details/7624837 作者:July.pluskid :致谢:白石.JerryLead 出处:结构之法算 ...
- 支持向量机通俗导论(理解SVM的三层境界) by v_JULY_v
支持向量机通俗导论(理解SVM的三层境界) 前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好懂,要深入学习和研究下去 ...
- [转] - Weiflow——微博机器学习框架
Weiflow--微博机器学习框架 本文从开发效率(易用性).可扩展性.执行效率三个方面,介绍了微博机器学习框架Weiflow在微博的应用和最佳实践. 在上期<基于Spark的大规模机器学习在微 ...
- 支持向量机通俗导论(理解SVM的三层境界)(ZT)
支持向量机通俗导论(理解SVM的三层境界) 原文:http://blog.csdn.net/v_JULY_v/article/details/7624837 作者:July .致谢:pluskid.白 ...
- 支持向量机通俗导论(理解SVM的三层境界)【非原创】
支持向量机通俗导论(理解SVM的三层境界) 作者:July :致谢:pluskid.白石.JerryLead. 出处:结构之法算法之道blog. 前言 动笔写这个支持向量机(support vecto ...
- Python开源机器学习框架:Scikit-learn六大功能,安装和运行Scikit-learn
Python开源机器学习框架:Scikit-learn入门指南. Scikit-learn的六大功能 Scikit-learn的基本功能主要被分为六大部分:分类,回归,聚类,数据降维,模型选择和数据预 ...
- 支持向量机通俗导论(理解SVM的三层境界)[转]
作者:July .致谢:pluskid.白石.JerryLead.说明:本文最初写于2012年6月,而后不断反反复复修改&优化,修改次数达上百次,最后修改于2016年11月.声明:本文于201 ...
随机推荐
- @select注解中可以用条件构造器
https://mp.baomidou.com/guide/wrapper.html#lambda https://blog.csdn.net/weixin_42236404/article/deta ...
- javascript/Jquery 将字符串转换成变量名
var a = ['a', 'b', 'c'] var obj = {} for(i = 0; i < a.length; i++){ obj[a[i]] = "abc" + ...
- 原生JS实现简易随机点名功能
定时器的工作原理,这里将用引用How JavaScript Timers Work中的例子来解释定时器的工作原理,该图为一个简单版的原理图.· 上图中,左侧数字代表时间,单位毫秒:左侧文字代表某一个操 ...
- php面向对象之静态方法使用
什么是静态方法? 不是所有的变量和方法都要通过创建对象来调用.可以通过给变量和方法加上static关键字来直接调用.无锡大理石测量平台 调用静态成员的语法格式为: 关键字::静态成员 关键字可以是: ...
- eclipse和scala整合,打包配置文件及打包步骤
我写的是maven项目,pom文件为: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...
- luogu P3567 [POI2014]KUR-Couriers
二次联通门 : luogu P3567 [POI2014]KUR-Couriers MMP 指针 RE + MLE + WA..... 不得已...向黑恶的数组实力低头 /* 指针 */ #inclu ...
- CF590E Birthday
题意 给定 \(n\) 个只由 \(a,b\) 组成的字符串,保证两两不同. 要求从中选出尽可能多的字符串,使得选出的字符串中,任意一个字符串不是另一个的子串. 求最多能选多少并输出一个可行解. \( ...
- (转)外网如何访问docker容器
借鉴:https://blog.csdn.net/lvshaorong/article/details/69950694 Docker容器非常轻量,系统开销非常少,比VMware或者VirtualBo ...
- checkbox后台传个list显示和回显的页面代码C标签
<c:forEach items="${listtest}" var="provinces"> <input type= ...
- DELPHI10.3.2安卓SDK安装
DELPHI10.3.2安卓SDK安装 DELPHI10.3.2默认安装以后,还需要安装安卓SDK,才可以编译安卓项目. 1)运行Android Tools 2)勾选安装下面几个