1、机器学习简介
-
机器学习的应用
-
机器学习的定义
-
Arthur Samuel(1959)下的定义是:在没有被明确编程的前提下,赋予计算机学习能力的研究
Arthur Samuel(阿瑟·塞缪尔)的小故事:阿瑟·萨缪尔是人工智能研究的先驱。他编写了一个下棋的程序,该程序能够自己学习,自己与自己对弈几百万次,不断提高棋力,最终棋力超过自己。
-
吴恩达说:“我的朋友 Tom Mitchell(1998)(汤姆·米切尔,机器学习之父)的定义”:计算机程序可以从经验E中学习,解决某一任务T,进行某一性能度量P,通过P测定在T上的表现因为经验E而提高
在跳棋游戏中,经验E就是程序跟自己对弈几百万次,任务T就是下跳棋,性能度量P就是与新对手下棋到时候赢的概率。
-
-
机器学习算法的类型有很多,最常用的两类是监督学习(最最常用)和无监督学习。
- 监督学习:教计算机做某些事
- 无监督学习:让计算机自己学习
-
什么是监督学习?监督学习是指通过让机器学习大量带有标签的样本数据,训练出一个模型,并使该模型可以根据输入得到相应输出的过程。通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出,监督学习中最重要的两类问题分类、回归。
-
例子一:预测房价。假设想要预测房价,可以收集数据,设置坐标轴,横轴是房子的英尺数,纵轴是房子的价格。假设有一栋房子要卖出去,那么可以依据这个数据集,用一条直线或者一条二次曲线或者其他函数来拟合数据集,从而得到该房子的大小对应的价格。
这也是一个典型的回归问题:回归是监督学习的一个重要问题,回归用于预测输入变量(自变量) 和输出变量(因变量) 之间的关系, 特别是当输入变量的值发生变化时, 输出变量的值随之发生的变化。回归问题功能是建模和分析变量之间的关系,设法预测连续的数值输出
-
例子二:以乳腺癌检测。同样有一个数据集,建立一个坐标系,横轴表示肿瘤大小,纵轴使用1表示良性肿瘤,0表示恶行肿瘤。在这种情况下,只有0或者1两种结果。或者可以进一步思考,可以在这个模型中加入更多的因素,比如肿瘤厚度、患者年龄等等,可以加入无限多的影响因素,利用某一个算法,可以得到一个预测模型,将良性肿瘤与恶性肿瘤进行区分,实现检测肿瘤的目的。再进一步思考,在不同的应用场景中,可以通过同样的无限多的输入,得到所输入的因素归结于某几个类别,而不拘泥于两个、3个或者4个。
这是一个典型的分类问题:分类(classification),即找一个函数判断输入数据所属的类别,可以是二类别问题(是/不是),也可以是多类别问题(在多个类别中判断输入数据具体属于哪一个类别)。要预测的值属于一个离散值。
-
-
什么是无监督学习?无监督学习更像是让机器自学,是没有标签的一种学习。无法清楚判断数据集中数据、特征之间的关系,而是要根据聚类或一定的模型得到数据之间的关系。无监督学习常常被用于数据挖掘,用于在大量无标签数据中发现些什么。它的训练数据是无标签的,训练目标是能对观察值进行分类或者区分等。例如无监督学习应该能在不给任何额外提示的情况下,仅依据所有“猫”的图片的特征,将“猫”的图片从大量的各种各样的图片中将区分出来。无监督主要有三种:聚类、离散点检测和降维。
-
聚类算法:聚类就是将观察值聚成一个一个的组,每一个组都含有一个或者几个特征。 无监督学习中,数据是没有标签的或者是有一样的标签的。不清楚数据的含义和作用,只知道是有一个数据集的。数据集可以判断是有两个数据集,自己进行分类,这就是聚类学习。聚类算法的应用:
-
组织大型的计算机集群,找出哪些计算机趋于协同工作,把这些计算机放在一起,就可以让这个集群工作效率更高了
-
社交网络的分析。通过email中联系最频繁的人,或者微信联系人或者QQ联系人,自动识别不同的人是否属于一个圈子的朋友,判断哪些人互相认识。
-
应用于市场细分。在庞大的客户信息数据库中,自动划分找出不同的客户市场划分,自动将客户划入不同的细分市场,从而针对不同市场进行销售
-
-
降维算法:降维指的是使用较少的列或特征来表示数据的方法,原理是将样本点从输入空间通过线性或非线性变换映射到一个低维空间,从而获得一个关于原数据集的低维表示
-
-
推荐使用Octave进行机器学习学习。使用Octave实现了一条有趣的例子,可以发现实现非常简单
有两个麦克风A和B,有两个人X和Y,X离麦克风A近,Y离麦克风B近。人X唱歌,人Y念古诗。使用无监督学习算法,有这样一行代码:“[Ws,v]=svd((repmat(sum(x.x,1),size(x,1),1).x)*x');”,对麦克风A和B录制下来的音源进行分析,可以从A音源中提取出单独的人X唱歌的音源,从B音源中提取出人Y念诗的音源。
2、监督学习算法 -- 使用了梯度下降的单变量线性回归模型
-
课程中常用的符号
- m:表示训练样本的数量
- x:输入变量
- y:输出变量
- (x,y):表示一个训练样本
- (x(i),y(i)):表示一个特定的训练样本。(i是一个上标)
- h:代表假设函数
-
几个概念:
-
线性:就是量与量之间按比例、成直线的关系,在数学上可以理解为一阶导数为常数的函数
-
线性回归模型:通过一个数据集,找到一个最合适的线性函数模型,来预测一个数值
-
单变量线性回归:只有一个变量的函数
-
-
代价函数:任何能够衡量模型预测出来的值h(θ)与真实值y之间的差异的函数都可以叫做代价函数
-
有这样一个线性回归模型的例子 - 预测房屋价格
-
有这样一个数据集:横轴表示房屋大小,纵轴表示价格
-
初步判断这需要一个线性回归模型,并且这是一个单变量的线性回归。使用 h(x) = ax + b 函数可以来拟合数据集
-
那么问题就归结为如何确定 a,b的值。
-
需要使用代价函数来衡量模型预测出来的值与真实值的差异,让这个差异最小化(越趋近于0越好),从而来确定a、b的值。在回归模型中,最常用的是平方误差代价函数
-
-
平方误差代价函数
-
函数定义:将第1-m号对应的预测结果,减去第1-m号对应的实际结果所得的差的平方相加得到总和,再除以2m
-
这个函数,当涉及的参数比较少,比如只有一个、两个的时候,可以比较简单地画出图像(二维坐标轴,三维坐标轴、等高图),分析使J最小的参数值。但是当参数比较多的时候,就很难这样分析了,所以需要一种用来解决这个代价函数的通用方法,比如梯度下降法。
-
-
梯度下降算法:以某点为起始,选择下一步要走的点,使得下一步为当前点可最快到达最低处的点,不停地循环此步骤,直到到达局部最小值。假设有代价函数 J(θ1,θ2)
-
随机选取一个点,通常可以选择让所有的θ为0
-
不停地改变θ值,来使J(θ1,θ2)变小,直到找到J(θ1,θ2)的最小值(或局部最小值)
-
注意:
-
更新参数值时要同时更新所有的参数,同时更新的意思是赋值语句中间不能有任何其他的会改变参数值的赋值语句。
-
α表示learning rate(学习率),表示每次更新参数值时所更新值的幅度的大小。若α过小,则从初始参数值到代价函数局部最低点所属的参数值要经过非常多次更新;而如果α过大,则会有可能使参数值在更新时直接跨过局部最低点,导致算法无法收敛甚至发散。
-
之所以说是局部最小值而非全局最小值,是因为代价函数的曲线图有可能有多个局部最低点,在这种情况下,设定不同的初始theta值,有可能会到达不同的局部最低点
-
注意求偏导的计算
-
-
对于θ值更新公式的李姐:
-
假设有一个只有一个θ值的代价函数。
-
首先α值代表了一个参数更新的幅度。
-
那么对代价函数进行求导,其实就是当前点的切线的斜率k,然后让斜kα,再使用原参数值 - kα,已知α始终为正:那么当k为负数时,原参数值 - k*α会比原参数值大,反之新参数值比原参数值小,如上图所示θ就会沿着最低值的方向移动!!!
-
那么也相应很好李姐α值代表了一个参数更新的幅度是什么含义了!
-
当有多个参数θ时,偏导数的意义跟一个参数时的导数的意义是一样的,以此类推!
-
-
-
batch梯度下降算法:每一次梯度下降都使用了数据集全部数据的梯度下降算法。还有其他的梯度下降算法,可能只是使用数据集的子集!!
-
总结:使用了梯度下降的单变量线性回归模型
3、监督学习算法 -- 多元线性回归模型
-
对于一个要度量的对象,一般来说会有不同维度的多个特征。比如之前的房屋价格预测例子中,除了房屋的面积大小,可能还有房屋的年限、房屋的层数等等其他特征:
-
这里由于特征不再只有一个,引入一些新的记号:
-
对于多元线性回归模型
-
有新的假设函数:
-
有多个参数:
-
有新的代价函数:
-
依此,依然可以使用类似单变量回归模型的梯度下降算法:
-
-
特征缩放算法
-
概念:当我们可以保证不同的特征的值保持在一个比较相近的范围内时,梯度下降算法就可以更快收敛。所以可以使用特征缩放算法,让不同的特征的值保持在一个比较相近的范围内!
-
引入:以房价预测问题为例
-
让特征值的范围为 -1 <= X <= 1是合适的。但是不必拘泥于这个特定的数值范围,一般而言,比如“-3 <= X <= 3”,“-1/3 <= X <= 1/3”这样的范围也是合适的。
-
一般可以使用以下的特征缩放算法:注意分母也可以是该特征值的标准差
-
总结特征缩放的意义:其实就是为了减少梯度,提高运行速度罢了。另外注意,一旦采用特征缩放,我们就需对所有的输入采用特征缩放,包括训练集、测试集、预测输入等
-
-
如何确定学习率?
-
通常有两种方式来确定梯度下降算法已经收敛。但是通常会发现方式二很难去选择一个阈值(0.001不一定适用),所以偏向于使用方式一
-
方式一:画出代价函数值随迭代次数增加的变化曲线。如下图
可以发现在迭代300-400次的时候,代价函数值几乎不改变了, 也就是此时已经收敛
-
方式二:一些自动的收敛测试。也就是让另一个算法来判断是否已经收敛,判断依据通常是迭代过程中代价函数的值变化小于0.001。
-
-
当使用代价函数值随迭代次数增加的变化曲线时,可以提前知道梯度下降算法有没有在正常运行,如果没有正常运行就要及时调整学习率。比如发现代价函数值发生了震荡,没有随着迭代次数增加而减少,甚至变大了,那么算法可能永远不会收敛,那就说明学习率太大了;如果发现代价函数的值持续变小,但是幅度极小,就说明学习率过低了;以上两种情况都需要及时调整,当然 α 足够小时,代价函数在每轮迭代后一定会减少,迭代次数够多一定会收敛。
-
总结:通过不断改变 α 值,绘制并观察代价函数值随迭代次数增加的变化图像,并以此来确定合适的学习速率。 尝试时可取 α 值 如 … 0.001 , 0.003 , 0.01 , 0.03 , 0.1 , 0.3 , 1 …,按3倍来提升或减少
-
4、监督学习 -- 多项式回归
-
在特征选取时,我们也可以自己归纳总结,定义一个新的特征,用来取代或拆分旧的一个或多个特征。比如,对于房屋面积特征来说,我们可以将其拆分为长度和宽度两个特征,反之,我们也可以合并长度和宽度这两个特征为面积这一个特征,那么这个时候就会出现二次项了,那么线性回归模型就不适用了
-
线性回归只能以直线来对数据进行拟合,有时候需要使用曲线来对数据进行拟合,即多项式回归。那么在寻找模型来拟合数据集的时候,就多出来很多选择。比如:
-
在使用多项式回归时,要记住非常有必要进行特征缩放,比如 x 的范围为 1-1000,那么 x^2 的范围则为 1- 1000000,不适用特征缩放的话,范围更不一致,也更影响梯度下降迭代的效率。
-
多项式回归模型在假设函数之外的操作,与线性回归是差不多的,就是建立代价函数,使用梯度下降算法迭代代价函数,得到最适合的参数,从而得到完整的假设函数。
5、回归模型确定参数的另一个解法 - 正规方程
-
对于一些线性回归问题来说,正规方程法给出了一个更好的解决问题的方式。正规方程法就是对代价函数求偏导数,并让偏导数为0求解出θ值,从而直接求出所有θ值,不需要类似梯度下降那样的迭代:
-
正规方程解析
-
假设有以下数据集:
-
那么可以构建以下的矩阵X、Y:
-
那么可以计算出参数Q的向量:在数学上可以证明,以下的计算方式求解出来的θ向量,就是会使代价函数J(θ)最小的解(不李姐)
-
这个式子在Octave中的写法是:
-
注意使用正规方程不需要特征缩放!
-
-
正规方程算法和梯度下降算法的选择:
补充:当使用的模型适用正规方程时,如果n<10000,通常选择正规方程,如果n> 10000就需要斟酌,如果超过10000太多,那么一般选择梯度下降算法。
-
正规方程的推导过程(不理解,了解):
-
不可逆性正规方程(不重要,选学)
-
由于存在计算 (X的转置 * X)的逆矩阵 的操作,所以如果 X的转置 * X 的结果是一个不可逆的矩阵,就会产生问题
-
X的转置 * X 的结果不可逆的情况很少发生,如果发生了通常有以下两种原因:
-
特征之间线性相关:比如同时包含英寸的尺寸和米为单位的尺寸两个特征,它们是线性相关的,即 x1 = x2 * 3.28^2
-
特征数量大于训练集的数量 ( m ⩽ n )
-
-
如果发现 X的转置 * X 的结果不可逆,可尝试:
- 减少多余/重复特征
- 增加训练集数量
- 使用正则化(后文)
-
在Ovtave中,通常有两种计算逆矩阵的函数,pinv以及inv,pinv函数可以用于计算伪逆矩阵,inv不能。所以通常选用pinv函数就可以解决上述问题。
-
6、二元分类问题 - Logistic 回归算法
-
二元的分类问题:将因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),其中 0 表示负向类,1 表示正向类。在两个类别中,哪个类别是正向类哪个是反向类并没有约束,惯例是0表示没有,1表示有
-
引入分类问题
-
为了根据肿瘤大小预测是否是恶性肿瘤,假设有这样一个数据集:
-
大概可以使用一条直线来拟合它,在Y轴上取一个点 0.5,可以这样预测,大于0.5对应点的为1,反之为0。这样至少在这个数据集上是合理的。
-
但是,如果数据集中有另外一个数据,那么用来拟合数据的直线将发生改变,变成深蓝色的那一条,那么这个预测结果就会发生错误。所以不推荐使用回归模型来处理分类问题。
-
-
结合以上案例,那么如何解决类似的分类问题呢?可以使用分类算法 logistic回归算法 来解决二元分类问题
-
逻辑回归算法 -- 假设函数
-
逻辑回归算法要求输出值的范围是[0,1],所以假设函数h(x)首先要满足这个基本的条件
-
有这样一个常用的逻辑函数(logistic function | sigmoid function),逻辑函数0<= g(z) <= 1:
-
当使用线性回归模型来拟合数据时,已经得到结论,不合适
-
那么将两个方程结合起来,那么假设函数为:
-
对假设函数的李姐:
逻辑回归模型中,h(x)的作用是,根据输入 x 以及参数θ,计算得出“输出y=1”的可能性
-
-
决策边界
-
决策边界就是分类的分界线,它是假设函数的属性,而不是数据集的属性,也就是说决策边界是由假设函数决定的。决策边界的概念,可帮助我们更好地理解逻辑回归模型的拟合原理。
-
在上述逻辑回归的假设函数h(X)中,有这样的结论:
-
回忆一下 sigmoid 函数的图像:观察可得当 g ( z ) ≥ 0.5时,Z ≥ 0;反之 Z < 0
-
线性拟合的数据集举例:
-
有这样一个数据集:
-
假设函数为:
-
那么可以得到结论:假设已经拟合数据集得到 θ向量
-
那么这条直线就是决策边界
-
-
非线性拟合的数据集举例:
-
有这样的数据集:
-
假设函数为:
-
假设已经通过数据拟合得到 θ 向量,可得到结论:
-
那么这个圆就是决策边界
-
-
-
逻辑回归算法 -- 代价函数
-
在上述假设函数中,如何确定θ向量来拟合数据?解决这个问题的前提是确定代价函数。
-
如果直接套用线性回归的代价函数,即平方误差代价函数,可绘制关于 J ( θ ) 的图像,如下图:
-
回忆线性回归中的平方损失函数,其是一个二次凸函数(碗状),二次凸函数的重要性质是只有一个局部最小点即全局最小点。上图中的函数是一个非凸函数,有许多局部最小点,这样将使得梯度下降算法无法确定收敛点是全局最优。
-
如果此处的损失函数也是一个凸函数,是否也有同样的性质,从而最优化?这类讨论凸函数最优值的问题,被称为凸优化问题
-
对于逻辑回归,更换平方损失函数为对数损失函数,可由统计学中的最大似然估计方法推出代价函数J(θ)。
-
那么关于J(θ)的图像如下:
分析:
如左图,当训练集的结果为 y = 1(正样本)时,随着假设函数趋向于 1 ,代价函数的值会趋于 0,即意味着拟合程度很好。如果假设函数此时趋于 0 ,则会给出一个很高的代价,拟合程度差,算法会根据其迅速纠正 θ 值,右图 y = 0 同理。
-
区别于平方损失函数,对数损失函数也是一个凸函数,但没有局部最优值
-
总结,代价函数J(θ)为:(注意这种紧凑的写法)
-
-
逻辑回归 --- 确定参数
-
在逻辑回归中确定参数θ,依然可以使用梯度下降算法。与在线性回归中的使用方式一致。
-
上述式子可以化为:
-
向量化的实现:
-