一、机器学习分类
1.1 监督学习
给出一组数据及正确的答案,使用数据训练出一个模型,当有新数据时可以得到正确结果。
- 回归问题:预测连续值的属性(如房价预测等);
- 分类问题: 将无穷多的特征进行分类,即预测离散型输出(如根据一些信息判断肿瘤是否为恶性)。
1.2 无监督学习
给出大量数据,不给出正确的答案 ,让机器自己寻找数据中可能的类型结构。
- 聚类:将一组数据进行分类,不预先说明有哪些类别。
- 鸡尾酒会算法:混合音频的分离。
二、单变量线性回归
2.1 模型描述
如图表示一个房价预测的数据集,x轴表示房子的面积,y轴表示对应的房价,现在需要做的就是用一条直线拟合这些数据,使得给出一个新的房子面积,可以预测出它的房价。当然,可以用曲线来拟合数据使得预测更加准确,但是目前只先讨论单变量的线性回归,即用直线来拟合数据。
定义一个数据集:
假设有如图所示的数据,称为一个训练集,其中用
表示 数据集的大小,用
表示第 i 行的输入(即房子面积),用
表示第 i 行的输出(房价)。用训练集进行训练,可以得到一个假设函数
,通过
可以建立一个从
到
的映射。对于单变量的线性回归,我们这样表示假设函数 :
2.2 代价函数
假设函数 :
我们称
和
为模型参数,目的是找到合适的
最小化
,m指训练集的样本容量,(即预测值和实际值的差的平方再求和),这就是代价函数,记作
,也被称为误差平方函数,是解决线性回归问题最常用的代价函数,到此为止,我们一共定义了假设函数,模型参数,代价函数,并且知道了线性回归的目的是
。
如果将函数简化成
,即
,那么
就是一条经过原点的直线(如下图左),假设我们有三个样本(左图红×处),不断改变
的取值,计算代价函数,可以得到下图右边这样的一个函数,可知,
时,代价函数值最小。
如果再加入
的影响,由于有两个参数的影响,所以所以
为一个三维图形,如下图左,将三维图形画成等高线图,可得到右边的两张图,可以直观看出,当取值为椭圆的中心点时,代价函数取值最低:
2.3 梯度下降
我们可以通过图像快速观察出代价函数
的最小取值的大致位置,但是我们还是不能很方便地得到代价函数取值最小时
的取值,梯度下降法就是用来将代价函数最小化的常用算法。
2.3.1 算法简单步骤
- 初始某个起点
- 不断一点点改变
去减少
,直到达到我们所期望的最小值。
如图所示是某个代价函数的图,将其想象成实际生活中的地形,梯度下降算法的思想是这样的:随机指定一个初始点,假如你要走出很小的一步,并以最快的速度下山,首先环顾四周,然后寻找到坡度最陡的一个方向走,一直重复直到走到最低谷。如果,初始点在右侧一点,你可能会走到另外一个局部最低点,这也是梯度下降的一个特点。
2.3.2 数学表达
不断重复步骤直到收敛:
,其中
表示赋值操作,
称为 学习率,表示每次下山时步子的大小,即梯度下降的速度,需要注意的是,每次更新
是同时进行的,不能先更新
然后用更新后的值去更新
。
对于偏导项,可以通过下图理解:同样将三维简化成二维(
),那么偏导项就是该点的斜率。
- 如果斜率为正数,那么
会变小,即向左移动。
- 如果斜率为正数,那么
会变大,即向右移动。
对于
的取值,如果太小会导致效率过低,如果太大会导致收敛失败甚至发散:
即时
为一个常数,在梯度下降的过程中,由于斜率会越来越小最终到达某个局部最优解(斜率为0),所以
也会越来越小,即每次下降的幅度也会越来越小直到为0。
2.3 线性回归算法
线性回归模型:
梯度下降算法:
不断重复
步骤直到收敛。
首先计算一下偏导数部分:
将计算结果代回到梯度下降算法,得到线性回归算法:
不断重复,直到收敛:
注意这里的
是在累加函数内的
虽然梯度下降算法可能会进入局部最优解,但是线性回归的代价函数是一个凸函数,即只有一个全局最优解,没有局部最优解,所以使用梯度下降法时一定能找到最优的解。
上述算法又称为 batch梯度下降法,因为每次下降都会遍历整个训练集的所有数据。
三、多变量线性回归
3.1 符号定义及向量化
:表示一条数据的属性的个数。
:表示训练集内数据的条数。
:表示训练集内第 i 个数据。
:表示训练集内第 i 个数据的第 j 个属性的值。
由于代价函数中要对训练集中的每一个数据都进行运算后求和,如果用循环的方式代码会很复杂并且效率低下,所以可以考虑将其转换成矩阵运算,及将数据进行向量化。具体如下:
我们假设:
,
,
,则:
假设函数:
,等价于矩阵运算:
,其中向量
也是多变量线性回归的模型参数。同理,代价函数
就可以表示为
。
3.2 多元梯度下降法
类比可以得到,多元梯度下降法的算法表达为:重复进行
,直到收敛,即对每个
求偏导,我们可以得到每一步,每个
的更新方式,注意要同时更新,求偏导的公式可以推到得到:
,这里的
是在累加函数内的。
同样,这里我们也可以进行向量化的操作:
我们设
,
,那么
就可以写成
, 所以
一点解释:
刚开始接触的时候很难理解这是怎么推得的(可能是我线代太差了),想了好久,在原理上大概理解了,首先提取出
没什么好说的。然后先看
这里得到的是一个 m * 1 的列向量,每一行表示的是第
个数据计算得到的
,然后左边的一大坨矩阵是一个 n * m 的矩阵,进行矩阵相乘,发现就是相等的,虽然不知道是怎么想到这样的变换过程的,可能有什么定理,但是还算是理解了,留个坑,以后如果懂了再填原理的坑吧!
3.3 特征缩放
3.3.1 主要思路
思路:设法将特征的取值维持在一个相近的范围。
比如有两个属性,房屋大小(取值为0-2000),卧室个数(取值1-5),那么如果画出等高线图,会是一个又高又瘦的形状,如果用梯度下降算法,会收缩地非常缓慢(如下图左)。我们可以将房屋大小除以2000,将卧室个数除以5,再画出等高线图就比较合适了(如下图右)。
更一般地来说:就是要讲每个属性的取值范围都缩放到接近
之间。注意: 如果取值范围过大或过小都是不能接受的,但是如果取值范围接近就可以结束,比如
可以接受,但是
和
这种取值范围是不能接受的。
3.3.2 均值归一化
对于一个属性,求出该属性所有样本的平均值,再将每个样本的该属性值减去平均值,使得这个属性所有样本的平均值变为0,然后再除以这个属性原始的取值范围(最大值-最小值)。如:若房屋面积的取值范围为
,有一个训练集,房屋面积的平均值为1000,则将每条数据的房屋面积属性组-1000,然后再除2000。
数学表达:
,其中
表示数据集中
的平均值,
指的是取值范围,即最大值-最小值。
3.4 学习率的选取
如果代价函数关于迭代次数的图形形如左上角这两张一样,说明学习率
取值过大,在线性回归模型中,数学证明得到,只要
足够小,每次迭代代价函数都是一定会下降的,当然需要注意的是,如果
过小,会导致梯度下降非常缓慢。
3.5 特征选择和多项式回归
以房价预测为例,如果有两个属性分别表示房屋的长和宽,可以将两个属性相乘得到一个新的属性:面积,用面积属性来预测房价显然更加合适。选择好特征后,考虑用什么多项式模型进行拟合。
如果使用一个二次函数来拟合,函数图形会先上升后下降,显然不太符合实际,考虑用三次函数进行拟合,那么三个属性分别就是面积、面积的平方、面积的三次方。由于三个属性的取值范围相差很大,所以需要用到特征缩放的思想。当然,还有许多其他模型可以选取,选择合适的函数进行拟合,很重要,后面会学习算法来决定选择哪些特征,用什么模型进行拟合。
3.6 正规方程
3.6.1 工作方式
不同于梯度下降法不断迭代的方法,正规方程提供了一种直接计算模型参数
的方法。
先给出求法:
。
- 构建
矩阵和
矩阵:
假设有m个样例,n个属性,
矩阵就行将每个样例横着依次放置,
矩阵就是将答案竖着依次放置。
表示倒置,
表示求其逆,数学上可以证明,这就是最优解,且用这种方法计算时无需用到特征缩放。
在matlab中,可以用代码 pinv(x'*x)*x'*y
来计算上述方程。
3.6.2 与梯度下降的区别
简单来说,小数据用正规方程,大数据用梯度下降。
3.7 正规方程在矩阵不可逆情况下的解决方法
虽然可能会出现矩阵不可逆的情况,但是pinv(x'*x)*x'*y
在MATLAB 中保证可以求得正解,这是函数实现上的一些问题。
如果矩阵不可以一般有两种可能原因:
- 学习时,包含多余特征,如: 同时有两个特征:一个是以平方英尺为单位的房屋面积,一个是以平方米为单位的房屋面积,由于两者可以相互线性表示,所以会导致矩阵不可逆的情况。
- 学习时,包含过多的特征(具体来说就是
),此时可以选择删去一些特征,或者使用正则化(后面会提到)。