Machine Learning Foundations 第9节-第12节
2015-07-21 20:31
274 查看
機器學習基石 (Machine Learning Foundations) 学习要点小结:
课程来自coursera:
主要学习了几个不同的model。
常用的错误衡量方法:squared error
所以线性回归的目标就是:寻找这样的直线/平面/超平面,使得输入数据的残差最小。
根据前几节课的推导,我们只需保证Ein越小越好,这样就能达到learning的效果。
令上式 = 0 ,即可以算出w。
经过计算推导,我们归纳出线性回归算法的步骤:
下面我们将linear regression与linear classification进行对比:
通过计算比较可以发现,linear regression的error measure结果实际上是linear classification的error measure结果的上界,因此我们其实是可以用linear regression来做二元分类问题的。
当然,最好的选择是使用linear regression计算得到的w作为linear classification(NP-hard)的初始w。
Logistic regression选择的映射函数是S型的sigmoid 函数。
使用的错误衡量方法:cross-entropy error
因此我们的任务就是:
优化的方法使用梯度下降法。
完整的logistic regression algorithm如下:
(1)linear classification
(2)linear regression
(3)logistic regression
对比如下:
线性分类(PLA)、线性回归、逻辑回归的优缺点比较:
(1)PLA
优点:很高效,但依赖数据的线性可分。
缺点:只有在数据线性可分时才可行,否则需要借助POCKET 算法(没有理论保证)。
(2)线性回归
优点:最简单的优化(直接利用矩阵运算工具)。
缺点:y*s 的值较大时,与0/1 error 相差较大(loose bound)。
(3)逻辑回归
优点:比较容易优化(梯度下降)。
缺点:y*s 是非常小的负数时,与0/1 error 相差较大。
实际中,逻辑回归用于分类的效果优于线性回归的方法和POCKET 算法。线性回归得到的结果w 有时作为其他几种算法的初值。
随即梯度下降SGD(Stochastic Gradient Descent):
传统的梯度下降每一次更新w需要遍历一遍data,当数据量太大或者一次无法遍历全部data时是不可行的。
因此,便产生了SGD,每次随机选取一个数据(xn,yn) 来获取“梯度”,以此对w 进行更新。
这种方法在统计上的意义是:进行足够多的更新后,平均的随机梯度与平均的真实梯度近似相等。注意:在这种优化方法中,一般设定一个足够大的迭代次数,算法执行这么多的次数时我们就认为已经收敛(防止不收敛的情况)。
η经验上取值在0.1附近会比较合适。
多类别分类问题的两种解决方法:
(1)OVA(One Versus ALL):任意选择一个类作为+1,其他类都看做-1,在此条件下对原数据进行训练,得到w;经过多轮训练之后,得到多个w。
预测:对于可以明确区分的x,只会有1个相应的分类器识别该x;对于不明确的x,这时我们就需要找到可能性最大的那个分类器。
(2)OVO(One Versus One):每轮训练时,任取两个类别,一个作为+1,另一个作为-1,其他类别的数据不考虑,这样,同样用二值分类的方法进行训练;目标类有k个时,需要 k*(k-1)/2 轮训练,得到 k*(k-1)/2 个分类器。
预测:对于某个x,用训练得到的 k*(k-1)/2 个分类器分别对其进行预测,哪个类别被预测的次数最多,就把它作为最终结果。即通过“循环赛”的方式来决定哪个“类”是冠军。
可以看出,以上的多元分类是利用二元分类的方法进行的。
总体应对思路:将线性不可分的数据转换成线性可分的数据。
这里的转换可以叫做特征转换(feature transform),特征转换需要付出一定的代价,即更高的模型复杂度。
有一个公式可以推算出转换后需要的参数数量:
我们常常从最简单的模型开始学习。
hypothesis set是结构化的,多项式次数越高,模型越复杂,对输入的数据拟合的越充分,会使Ein越低,但是Eout会变高,因此在实际工作中,通常采用的方法是:先通过最简单的模型(线性模型)去学习数据,如果E_in 很小了,那么我们就认为得到了很有效的模型;否则,转而进行更高次的假设,一旦获得满意的E_in 就停止学习(不再进行更高次的学习)。
课程来自coursera:
https://class.coursera.org/ntumlone-002/lecture
主要学习了几个不同的model。
第9节 Linear Regression
目标y是实数空间R。常用的错误衡量方法:squared error
所以线性回归的目标就是:寻找这样的直线/平面/超平面,使得输入数据的残差最小。
根据前几节课的推导,我们只需保证Ein越小越好,这样就能达到learning的效果。
令上式 = 0 ,即可以算出w。
经过计算推导,我们归纳出线性回归算法的步骤:
下面我们将linear regression与linear classification进行对比:
通过计算比较可以发现,linear regression的error measure结果实际上是linear classification的error measure结果的上界,因此我们其实是可以用linear regression来做二元分类问题的。
当然,最好的选择是使用linear regression计算得到的w作为linear classification(NP-hard)的初始w。
第10节 Logistic Regression
目标y是[0, 1]。Logistic regression选择的映射函数是S型的sigmoid 函数。
使用的错误衡量方法:cross-entropy error
因此我们的任务就是:
优化的方法使用梯度下降法。
完整的logistic regression algorithm如下:
第11节 Linear Models for Classification
目前为止,已经学习了三种线性模型:(1)linear classification
(2)linear regression
(3)logistic regression
对比如下:
线性分类(PLA)、线性回归、逻辑回归的优缺点比较:
(1)PLA
优点:很高效,但依赖数据的线性可分。
缺点:只有在数据线性可分时才可行,否则需要借助POCKET 算法(没有理论保证)。
(2)线性回归
优点:最简单的优化(直接利用矩阵运算工具)。
缺点:y*s 的值较大时,与0/1 error 相差较大(loose bound)。
(3)逻辑回归
优点:比较容易优化(梯度下降)。
缺点:y*s 是非常小的负数时,与0/1 error 相差较大。
实际中,逻辑回归用于分类的效果优于线性回归的方法和POCKET 算法。线性回归得到的结果w 有时作为其他几种算法的初值。
随即梯度下降SGD(Stochastic Gradient Descent):
传统的梯度下降每一次更新w需要遍历一遍data,当数据量太大或者一次无法遍历全部data时是不可行的。
因此,便产生了SGD,每次随机选取一个数据(xn,yn) 来获取“梯度”,以此对w 进行更新。
这种方法在统计上的意义是:进行足够多的更新后,平均的随机梯度与平均的真实梯度近似相等。注意:在这种优化方法中,一般设定一个足够大的迭代次数,算法执行这么多的次数时我们就认为已经收敛(防止不收敛的情况)。
η经验上取值在0.1附近会比较合适。
多类别分类问题的两种解决方法:
(1)OVA(One Versus ALL):任意选择一个类作为+1,其他类都看做-1,在此条件下对原数据进行训练,得到w;经过多轮训练之后,得到多个w。
预测:对于可以明确区分的x,只会有1个相应的分类器识别该x;对于不明确的x,这时我们就需要找到可能性最大的那个分类器。
(2)OVO(One Versus One):每轮训练时,任取两个类别,一个作为+1,另一个作为-1,其他类别的数据不考虑,这样,同样用二值分类的方法进行训练;目标类有k个时,需要 k*(k-1)/2 轮训练,得到 k*(k-1)/2 个分类器。
预测:对于某个x,用训练得到的 k*(k-1)/2 个分类器分别对其进行预测,哪个类别被预测的次数最多,就把它作为最终结果。即通过“循环赛”的方式来决定哪个“类”是冠军。
可以看出,以上的多元分类是利用二元分类的方法进行的。
第12节 Nonlinear Transformation
这节面对的是线性不可分的数据。总体应对思路:将线性不可分的数据转换成线性可分的数据。
这里的转换可以叫做特征转换(feature transform),特征转换需要付出一定的代价,即更高的模型复杂度。
有一个公式可以推算出转换后需要的参数数量:
我们常常从最简单的模型开始学习。
hypothesis set是结构化的,多项式次数越高,模型越复杂,对输入的数据拟合的越充分,会使Ein越低,但是Eout会变高,因此在实际工作中,通常采用的方法是:先通过最简单的模型(线性模型)去学习数据,如果E_in 很小了,那么我们就认为得到了很有效的模型;否则,转而进行更高次的假设,一旦获得满意的E_in 就停止学习(不再进行更高次的学习)。
相关文章推荐
- hdu 5288 OO’s Sequence
- [2015-07-19] python005
- java中的进程与线程及java对象的内存结构
- [转]java int与integer的区别
- C语言11 -- 函数指针
- LeetCode(29) Divide Two Integers
- iOS开发 ----- C文件读写,以及字符串分割
- redhat 6.4 安装VirtualBox自动增强功能功:unable to find the sources of your current Linux kernel
- extendGcd,即扩展欧几里得算法的C++模板化解释
- iOS 用代码添加模态视图
- 阿里云服务器 安装rz,sz
- poj_1753_高斯消元
- 人丑就要多读书(13)
- 第5章面试2--专家打分
- scikit-learn:4.1. Pipeline and FeatureUnion: combining estimators(特征与预测器结合;特征与特征结合)
- C语言10 -- 动态内存分配
- st函数--区间最大最小值
- 算法之动态规划
- java中自动生成编码,例如18位,20位等
- JAVA从入门到精通书中ZIP压缩和解压缩错误修正