遵循统一的机器学习框架理解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 ...
随机推荐
- Educational Codeforces Round 75
目录 Contest Info Solutions A. Broken Keyboard B. Binary Palindromes C. Minimize The Integer D. Salary ...
- 解决chrome浏览器自动填充密码
chrome会自动填充密码,解决方法很简单 使用下面的参考代码即可: <input type="password" readonly οnfοcus="this.r ...
- 【概率论】5-2:伯努利和二项分布(The Bernoulli and Binomial Distributions)
title: [概率论]5-2:伯努利和二项分布(The Bernoulli and Binomial Distributions) categories: - Mathematic - Probab ...
- wepy小程序项目
# 安装(更新) wepy 命令行工具. cnpm install wepy-cli -g # 安装依赖包 cnpm install # 开发实时编译. npm run dev WePY开发文档参考 ...
- 快速打造自己的PHPStorm主题
---恢复内容开始--- 一个优雅和舒适的界面,可以增加过多写入代码的动力. Phpstorm小型的白色主题比较简陋.为了打造一个优雅和舒适的界面,我们安装一件叫Material Theme UI的插 ...
- Windows下OpenFOAM开发及使用环境配置指南 (1)【转载】
转载自:http://openfoam.blog.sohu.com/158614863.html *************************************************** ...
- elasticsearch配置jdk
编辑bin/elasticsearch 可以看到elasticsearch使用环境变量JAVA_HOME中配置的jdk:if [ -x "$JAVA_HOME/bin/java" ...
- 命令行启动模块的Python代码研究
pyrasite的 __requires__ = 'pyrasite==2.0' import re import sys from pkg_resources import load_entry_p ...
- C#实现获取当前文件路径的上级路径
界面: 声明: textBox1.Text为指定文件路径:string path = @"F:\ABB-pragram\ABB工作站\ABB Station\Systems\Situatio ...
- Mac地址转换成long长整型
Mac地址转换成long长整型 using System;using System.Collections.Generic;using System.IO;using System.Text;usin ...