【机器学习】Stanford Machine Learning 学习笔记(一)

之前刷过一次斯坦福大学吴恩达教授的Coursera公开课,但那次刷的时候我还太年轻,所以也没做笔记,而且到现在为止,也都快忘的差不多了。过不了多久就要开始保研复试了,这里想再花一个月的时间重新过一遍,也在CSDN上做好记录。

因为是这个系列的第一篇文章,所以现在这里大致介绍一下这个课程吧!相信在中国只要接触过ML的同学们,肯定知道吴恩达和周志华这两个名字,毕竟鼻祖级的人物。但对于初学者来说,我还是推荐吴恩达的Coursera机器学习课程,毕竟不会涉及到太过深奥的数学知识,也比较容易理解,相比之下,周志华教授的西瓜书就…

话不多说,如果有不知道课程链接的我在这里分享一下,但其实也挺好找的。
Stanford Machine Learning

一、机器学习介绍

应用背景介绍

课程开始,吴恩达教授对机器学习做了一个科普性的介绍,这里我也没什么好记的,就是说了一下机器学习应用的场景很广啊,之类的,直接跳过,从干货开始。

什么是机器学习

这里给出了两种对于机器学习的经典定义:

Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed.

这是Arthur Samuel在1959年提出的:无需编程去赋予计算机可以学习的能力的一个研究领域。我觉得还是说的很贴切的,但相比第二种来说,就显得比较抽象和模糊了。

Tom Mitchell (1998) Well-posed Learning Problem: A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.

这是Tom Mitchell 在1998年提出的:计算机程序从经验E中学习关于某个任务T和一些性能测量P,如果其在T上的性能(由P测量)随经验E而改善。

在这里插入图片描述
可以结合这个例子来简单理解一下,假设你的邮件程序观察你把那种邮件标记为垃圾邮件,哪种邮件没有标记,并且基于这些数据去学习更好的过滤垃圾邮件,那么这里面的E、T还有P分别对应什么呢?图片中也给出了答案,因为最终的目标是要过滤垃圾邮件,所以任务T就是Classifying you label emails as spam or not spam.而程序需要不断的观察你的分类,也就是要不断的学习这个经验,所以经验E就是Watching you label emails as spam or not spam.那么如何去评价性能呢,改善的性能是什么呢?自然就是分类结果的正确性,所以性能P就是The number or fraction of emails correctly classified as spam or not spam.

机器学习算法

一般来说,机器学习算法就分为两类,监督学习和非监督学习。

所谓监督学习,就是利用已有的已经标记好的数据进行训练,从而达到使目标性能更好的结果,一般就是线性回归和分类算法。而所谓非监督学习,就是利用已有的未标记的数据进行训练,自己也不太清楚自己的目标是什么,反正最终机器学习算法会给出一个比较满意的结果,一般就是聚类算法。

当然,上述是课程中的说法,我觉得对于初学者来说,知道这两者也就足够了。但在现如今,更多的机器学习名词也都应运而生,这里举三个例子,也是最近看到的机器学习热点话题,一是为了拓宽一下大家的视野,一是为了让自己加深一下印象。

  • Online Learning,在线学习。主要是为了解决机器学习训练数据集大,机器内存不够的问题,在线学习可以支持把训练数据一部分一部分的进行训练,在新数据进入后,不需重新训练新模型,而只是在旧模型的基础上进行改进。
  • Active Learning,主动学习。主要是为了解决人工标注困难的问题,尤其是对于语音数据,获取和标注都相对困难。这里提到的主动学习的意思就是,给定一部分带标注的数据,然后剩下的数据如需进行标注,需要由算法主动的提出,这样就可以减少大部分人工标注的工作量。
  • Nonparametric Learning,无参数化学习。主要是为了解决那些未知函数形式的机器学习问题。相比于线性回归问题,许多现实中的问题,在开始的时候是不知道其函数形式的,那么也就没办法针对几个参数进行有目标性的训练,无参数化学习解决的就是这一类问题。

当然,对于上面这几种技术我也只是听其名而已,还不知其意。写在这里也就是作为一个扩展,同时为自己以后做一下记录。

下面就对监督学习和非监督学习进行更加细致的说明:

监督学习

在这里插入图片描述
可以看到,上面是一个预测房价的例子,横坐标是房间尺寸,纵坐标是价格。其中×表示已有数据,可以看到监督学习是在正确答案给出的情况下,再进行学习,进而用来预测新的数据。对于上述这种对连续值进行预测的情况,我们一般称之为"Regression",即回归。与之类似,但是是对离散值预测的情况,我们一般称之为"Classification",即分类。

非监督学习

在这里插入图片描述
与监督学习不同,可以看到非监督学习在一开始并没有给定正确的答案,而是只扔给你一堆数据,然后要机器学习算法根据数据中的不同,自动的找出类别。在这里比较典型的就是聚类算法。

当然,这种非监督学习算法的应用范围很广,但这些应用中,比较吸引我的是一个叫“鸡尾酒聚会”的问题。这个问题讲的是什么呢?是说在一个鸡尾酒会上,由于有人,有酒,有故事,有音乐,所以整个场面就比较混乱,而在此时,有人尝试用两个不同的麦克风在不同的地方进行录音,录音中混杂着人声与音乐声,要如何把人声和音乐声准确的分离出来呢?这就是鸡尾酒算法,由于麦克风所处位置不同,声音肯定是会有差别的,从而利用鸡尾酒算法自动的把人声和音乐声分离出来。

我在看这段的时候,吴恩达教授给大家展示了鸡尾酒算法的计算结果,真的很完美的将二者分离开了,虽然我知道这两种录音也不能是一般的录音,但还是觉得很神奇,就想,这一定很难实现吧!结果接下来,吴恩达教授就给出了MATLAB实现:
在这里插入图片描述
哎,无知真可怕!

二、单变量的线性回归

之前好像记录了一些概念性的东西,下面就该上干货了!机器学习最简单的部分,单变量线性回归。

什么叫单变量线性回归呢?这个可以拆解来看,单变量,说明只有一个自变量,也就是说输出只有一个输入因素来决定。而线性,也就是输出结果与这个输入因素之间是线性关系,是一次的。回归,也就是上面监督学习中提到的,用来预测连续的取值。

预测方程h(x)假设

了解了什么是单变量的线性回归,下面给出其预测函数的定义吧!
在这里插入图片描述
是不是看着很简单?这不就是初中学的直线方程吗!对,没错,单变量线性回归,其实就是用一条直线去预测未来的结果。但这里需要掌握的是学习的思想,就是如何通过机器学习的思想来获得这里面未知的参数Θ,这就是这个简单问题在这个课程中的意义所在。

代价函数

如果要确定参数,首先我们需要确定我们最终的目标是什么。那也就是代价函数。

在这里插入图片描述
上图是代价函数的定义,其中左边是考虑两个参数的代价函数,而右边是简化的代价函数。看到这里,这其实就是方差嘛!不过为了说明和记录的更加清晰,下面我结合一幅图来直观的对代价函数进行说明。

在这里插入图片描述
上面这幅图可以更加明确的说明问题,可以看到,如果我们的预测函数为h(x),也就是左图中的黑线,而实际数据为左图中的×,那么可以看到我们上面定义的代价函数其实就是蓝线所表示距离的平方和,这也就正好表示了预测函数与实际数据的偏离程度。定义代价函数的目的,就是要表示这个偏离程度,而我们的目标也就是选择合适的参数值,使代价函数的值最小。

虽然在后面吴恩达教授还将代价函数扩展到了二维的情形,但也是换汤不换药,我也就不用记录了。

三、梯度下降法

这应该是机器学习领域最经典的一个方法了,基本思想就是根据导数来调整参数Θ,进而达到对代价函数的优化。

下面我就针对梯度下降法的算法以及注意事项进行说明和记录。
在这里插入图片描述
梯度下降法的算法实现如上所示,对于单变量的线性回归,只有j=0和j=1两个参数,其中α为学习率,它决定了每一次迭代,参数改变的步长。α后面的部分表示代价函数J对不同的参数变量求偏导数的结果。

相信对于大家来说,这个算法应该不难看懂,大体的思想就是,因为要求解代价函数J的最小值,而且对于线性回归来说,其代价函数都是凸函数,极小值也就是最小值,所以可以直接根据导数来进行优化,又由于当自变量接近最小值的时候,导数会越来越小,所以也就可以达到一个学习率不变的变步长的效果了。

学习率α

在上述公式中,α虽然是可以任意取值的,但对于确定的问题来说,是有一定范围的。

可以想象,如果α取值过大的话,就会导致震荡。而α取值过小的话,又会导致迭代次数太多,学习花费时间较长。
下面给出二者的详细图解:
在这里插入图片描述

单变量线性回归的梯度下降法

上面给出的是梯度下降法的通用形式,接下来,针对特定单变量的线性回归,有算法形式如下:
在这里插入图片描述
这里需要注意的是,二者必须同时进行更新。这尤其体现在编写代码时,我们设后面的偏导数项为D0和D1(是需要计算的),参数为c0、c1
,学习率为a,那么习惯性的,看到上述算法,大家会这样来实现:

while diff > 1e-10 :
	c0 = c0 - a * D0;
	c1 = c1 - a * D1;

这样看起来好像没什么问题,但是要记住,这里D0和D1都是根据参数c0和c1计算出来的,如果这样写程序的话,在计算D1之前,c0的值就已经改变了,所以计算的D1也会是有问题的,虽然优化结果可能并没有问题。

while diff > 1e-10 :
	# 计算D0
	# 计算D1
	c0 = c0 - a * D0;
	c1 = c1 - a * D1;

以上是其中一种正确计算的方法,供大家参考。

“成批”梯度下降法

在本部分课程最后,吴恩达教授提到了"Batch" Gradient Descent,这其实就是业内人士对这种梯度下降法的叫法而已,因为这种梯度下降法,在每次更新参数时,考虑所有的样本,也就是从1加和到m,所以就叫"Batch"。

四、总结

第一周的课程除了上述这些之外还有一些线性代数的知识,但由于都很简单,我就不在这里写和记录。

这是第一次写学习笔记,感觉思路还是比较乱,不过也算比较全面的总结了知识点,并且解释了一下。最重要的是理清了这部分知识点的思路。

吴恩达教授从机器学习的应用将起,讲述了机器学习当前的分类情况,我也针对此进行了当代问题的补充,之后给出了机器学习中的最简单问题–单变量线性回归,并由此引入了代价函数的概念,进而为了优化代价函数,介绍了梯度下降的方法。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值