coursera机器学习 week1&week2&week3 总结

来源:互联网 发布:黑人枪杀 知乎 编辑:程序博客网 时间:2024/06/05 10:55

最近两个礼拜看了下2017年7月26日开课的coursera的机器学习课程,学到了第三周,打算大致总结一下前三周的课程,基本不会列公式,白话记叙,个人总结和心得而已。

引言部分先介绍机器学习的定义,旧的定义就不说了,比较新的定义是Tom Mitchell说的:一个程序被认为能从经验E中学习,从而解决任务T,同时利用度量值P衡量其性能;当且仅当有了经验E后,其处理任务T的性能度量值P有所提升。

机器学习主要就是监督学习和无监督学习,还有半监督和强化学习等等,监督学习分为回归问题和分类问题,无监督学习有聚类等算法;回归问题是预测连续数值,分类问题是预测离散数值。

监督学习问题一般都会有输入数据和输出数据,原始的数据会分割为训练数据和测试数据,数据量大也会分割为训练、验证、测试三部分,监督学习就是要再训练数据集上学习一个从输入映射到输出的函数,这个函数被称为假设;可以用一个损失函数度量假设函数的精确度,损失函数有很多种,比如损失函数为均方误差函数,记住前面系数是1/2m,这个MSE经常用作回归问题的损失函数,对于一个机器学习问题的目的而言,当然是让这个假设函数精确度越高越好,那么这时候损失函数的值就会越小,其实当损失函数达到最小值时,损失函数中的参数变量就是假设函数中的参数变量,便可以得出所需的映射;所以接下来就是想个算法求出损失函数的最小值。

承接上面求出了最小值,便可以得到参数变量值,梯度下降算法便可以求出最小损失函数,梯度下降算法原理推导就不讲了,在之前的的博客中有记过,大致形式就是:损失函数中的某个参数值 := 损失函数中的某个参数值 - α*损失函数对此参数值的偏导数,这个就是某个参数的更新公式,全部参数开始都初始化为0,并且所有的参数需要同时更新;α称为学习率,控制更新参数的幅度,值为正数,α太大会导致无法收敛,甚至发散,α太小则收敛速度会很慢;在接近局部最小值时,偏导数值会自动变得越来越小,所以更新的幅度会越来越小,不需要通过减小α来减小更新幅度;梯度下降可以用来最小化任何函数,但是如果函数不是凸函数,则有可能落入局部最优点而非全局最优点,同时不同的初始化可能得到不同的局部最优点。

下面讲了一些线性代数的东西,就不说了,提一个pinv(A)是对A求伪逆,inv(A)是对A求逆。

接下来是week2,开始讲了编程环境安装的东西,主要是Octave,方便,和matlab命令差不多,接着讲多变量线性回归,一般都是假设有n个变量/特征,参数有n+1个,假设的形式也很简单,就是n元一次方程式,损失函数继续用均方误差函数;参数继续用梯度下降算法同时更新,一般都假设x0 = 1,方便公式统一化。

在进行梯度下降算法运算前,可以利用特征缩放的技巧加速,原理在于:如果一个机器学习问题有多个特征,同时能确保这些特征都处在一个相近的范围内,则梯度下降能更快收敛;通常将特征值约束在[-1, 1]之间,x0 恒等于 1,特征缩放和均值归一化方法结合表示如下:x := (x-u)/ s,u是特征x的均值,s是x的范围(max-min)。

对于梯度下降算法,一般认为在每次迭代后损失函数的减小值小于10的-3次方就认为损失函数收敛了,可以以迭代次数为自变量,损失函数值为因变量画图,如果曲线为增函数或震荡函数,则需要使用更小的学习率;对于一个有效的学习率,损失函数值需要在每次迭代后都减小;对于学习率α的选择,可以按照0.001→0.003→0.01→0.03→0.1…………的方式选取。

通过定义新的特征,可能会得到更好的模型,比如将线性回归弄成多项式回归,多项式回归的时候注意特征缩放和均值归一化。最后介绍一下正规方程,就是一次性求解损失函数的最小值/参数变量,可以解得θ = ……,式子就不写了,用到了全部的训练数据输入特征和训练数据输出,x0依然恒等于1,其实这个式子中间的矩阵逆求的是伪逆,因为可能当特征数量≥训练数据或不同特征之间线性相关的时候,X’X是奇异矩阵,不存在逆,可以通过正则化或删减部分多余特征解决这一问题。正规方程一般在训练数据小于1w的时候比较好用,多了还是用梯度下降来快些,优点是不用选择学习率α。

下面教了一些Octave的简单命令,这个网上都有总结,主要就是一些矩阵初始化,矩阵切片,画图,矩阵信息,文件操作,矩阵拼接……,抽空再练习下,一下子记不住这么多。。。做了下编程题,感觉还不错,流程都给弄好了,类似填空的感觉。

最后到了week3,开始将分类,先讲logistic回归,如果说直接拿着线性回归来分类,假设预测数值>0.5归类为1类,<0.5归类于0类,会得到此方法不咋的的结论。对于二分类问题,一般用0代表负类,1代表正类,每个训练数据都会有一个类别标签,对于logistic回归而言,假设函数的形式与线性回归的简单形式就不一样了,h(x) = g(θ’X),这个g是一个S型函数/逻辑函数,式子就不写了,hθ(x)=P(y=1|x;θ),即假设函数为某个值时,这个值被认为是对于新输入样本x的y=1的概率值。讲一下决策边界,对于logistic回归的假设函数而言,若分母中的θ’T≥0时,整个假设函数值≥0.5,此时认为预测类别为类别1,否则预测类别为0,所以θ’T = 0被认为是假设函数的决策边界,此时假设函数值=0.5(决策边界是假设函数的一个属性);如果假设函数分母中的θ’T换成一个多项式的化(最高次数>1),则会有一个非线性边界,高阶多项式可以得到非常复杂的边界。

那么对于logistic回归而言,求取假设函数的参数也是主要目标,所以一样需要一个损失函数,如果直接用均方误差损失函数,则由于其假设函数形式与线性回归不一样,所以此时均方误差损失函数是非凸函数,容易陷入局部最优值,所以这里采用了对数损失函数,可以从概率角度解释对数损失函数的正确性,损失函数的系数从1/2m变成了1/m,梯度下降方式求参数值的形式与线性回归一样,唯独假设函数形式不一样;对于logistic回归,除了梯度下降方法之外,还有一些高级优化方法,如BFGS、L-BFGS、conjugate gradient等等,注意其在Octave中的使用。

对于多分类的情况,logistic回归采用one-vs-all,即有几类就训练几个模型,然后得出每个类别的预测概率值,取最大值的类别。

结尾讲一下过拟合,过拟合的定义很简单:如果拥有过多的特征,同时学习得到的假设又非常契合训练数据,即损失函数值接近0,但是在新的样本数据上的泛化效果非常差;过拟合=高方差,欠拟合=高偏差,过多的features+少量的训练数据 →过拟合;解决方案如下:1、减少特征数量,无论是人工方法还是模型选择算法,留下重要变量,确定是舍弃了一部分特征的同时也舍弃了一部分信息。
2.正则化:保留所有的特征变量,但是降低参数θj的数量级/数值,非常适合特征数量非常多时候,每个特征都会对结果有一些影响。
下面讨论正则化,对于正则化有L1、L2正则,L1正则就是损失函数后面加上正则化参数×∑|θ|,L2正则就是将|θ|换成θ的平方,正则化参数用来平衡模型与训练数据的拟合程度和模型的复杂度;正则化的目的在于找到一个简单形式的假设函数,同时这个假设函数又能很好的拟合训练数据,这样能够使得泛化效果好,如果正则化参数太大,则参数θ趋向于0,假设函数 = θ0,模型欠拟合,如果正则化参数太小,则模型依然复杂,无法解决过拟合问题。注意一点,无论是线性回归还是logistic回归的正则化项都是放在均值系数里面的,即代价函数 = 1/2m(损失函数+正则化项)–线性回归形式,代价函数 = 1/m×损失函数+1/2m×正则化项–logistic回归,对于线性回归而言梯度下降的参数更新公式变为:θj = θj(1-α*(正则化系数/m))-与之前一样的式子(L2正则化);如果用正规方程求解则避免了求解过程中逆矩阵的奇异问题,式子形式大致为:θ = (X’X +正则化系数×矩阵D)^T×X^T×y;这里D为(n+1)×(n+1)对角线矩阵,第一个是0,其余对角线上元素为1,括号内矩阵逆一定存在。

大致就是上面这些内容,还有一些编程的实际代码操作就没有展看说了,毕。

原创粉丝点击