前言
不知不觉研一已经过去了一个学期,上学期真实忙得没有时间总结。天天忙着上课和做实验,随机过程和工程硕士数学确实有些收获,就是感觉上课的形式花的时间太多;模式识别和计算机网络体系结构做了几个实验,收获颇丰。说实话,在教学方面,清华的老师也强不到哪里去 (听师兄说本部也差不多),根本就不能吸引学生注意力,课堂气氛也不行。
上学期也算是入门了机器学习吧,跟着吴恩达在 Coursera 上的 Machine Learning 学了半个学期,也看了一些书和论文。现在总结一下,不然就连最简单的线性回归还是一知半解,毕竟只有写出来,讲出来才是自己的。
线性回归
给定数据集
,其中 , ,线性回归就是试图去学习线性模型以尽可能准确地根据输入 预测输出 。
线性回归并不陌生,例如高中的时候学过的父母身高预测法,假设父母的身高
假设存在
以下实验数据来自于吴恩达在 Coursera 的 Machine Learning 课程的实验 ex1。
Ex 1
一个餐厅的 CEO 考虑在不同的城市开一家新店,所以希望能根据城市人口的数量 (先不考虑其他因素,即一元线性回归) 预测商铺的利润
商铺利润
符号解释
:“输入” 变量,也叫做输入特征。例如 , 就是第 座城市的人口数量。 :“输出”,也叫做目标变量。例如第 座城市的利润。 :一个训练样本 : 个训练样本组成的训练集,上标 表示样本在训练集中的索引,和指数没有关系
性能度量
如何找到
例如上图中明显
损失函数、代价函数和目标函数
损失函数是一种衡量损失和错误程度的函数
在机器学习领域,经常会出现损失函数、代价函数和目标函数,它们之间并没有严格的规定,然而它们的定义一般如下:
- 损失函数 (Loss function):定义在单个训练样本上,衡量一个样本的输出与真实值差别,例如:
- 平方损失 (通常用于线性回归):
- 铰链损失 (用于 SVM,像铰链):
- ...
- 平方损失 (通常用于线性回归):
- 代价函数 (Cost function):定义在整个训练集上,即选定参数
后对数据进行估计所要支付的代价加上一些惩罚函数 (例如正则化项),例如:- 均方误差 (几何意义是 “欧氏距离”):
- SVM 的代价函数:
- ...
- 均方误差 (几何意义是 “欧氏距离”):
- 目标函数 (Objective function):代价函数的推广,即需要优化的函数。可能是最大化,也可能是最小化 (此时就是代价函数),例如:
- 似然函数:用最大似然估计评估模型参数 (MLE)
- 后验:用最大后验估计模型参数
- ...
线性回归使用均方误差作为代价函数,因此可以算出中
但是在以均方误差作为性能度量的前提下,是不是还存在
最小二乘问题
线性回归的代价函数是一个二次函数且半正定,所以这是一个最小二乘问题。所以最小化
解析解
求解线性最小二乘问题可以通过对代价函数求导,然后令导数为零可以得到
对于多元线性回归 (输入变量维数大于 2),如果数据的组数少于输入变量维数,那么矩阵
求解过程涉及求一阶偏导数,一阶偏导数以一定方式排列成的矩阵又叫做雅可比 (Jacobian) 矩阵,所以在机器学习中一般使用
梯度下降算法
当
梯度下降算法涉及到求代价函数
所以梯度下降过程中,
其中
- 批量梯度下降
- 随机梯度下降
- 小批量梯度下降
批量梯度下降 (Batch Gradient Descent,简称 BGD)
梯度下降的时候使用所有样本来更新参数
1 | for iter = 1:num_iteration |
随机梯度下降 (Stochastic Gradient Descent,简称 SGD)
梯度下降的时候使用一个样本来更新参数
1 | for iter = 1:num_iteration |
批量梯度下降和随机梯度下降的时间复杂度一样,但是对于迭代同样的次数,随机梯度下降中的参数更新的次数较多,所以收敛的速度就快。但是由于随机梯度下降计算的梯度是对于这一次所选取的这一个样本的平方损失的梯度,而不是全部样本的均方误差的梯度,所以计算的梯度可能不准确,所以最后不一定能收敛到全局最优点。
在数据量很大的情况下,单个样本的平方损失可能会很接近于全部样本的均方误差,那么随机梯度下降计算的梯度就会很准确,同时收敛的速度也很快。
小批量梯度下降 (Mini-batch Gradient Descent,简称 MBGD)
结合了批量梯度下降和随机梯度下降,在梯度下降的时候使用一部分样本来更新参数
总结
线性回归主要就是观察数据,发现它满足一定的线性关系,然后就去找出这个关系,让预测尽可能地准确。一般都是使用小批量梯度下降算法,通过最小化代价函数算出模型的参数,得到的模型就可以用来对新的数据进行预测。
参考文献
[1] 周志华。机器学习。清华大学出版社. 2016.
[2] 吴恩达。机器学习.
[4] Ian Goodfellow, Yoshua Bengio, Aaron Courville. Deep Learning. 人民邮电出版社. 2017.
[4] Stephen Boyd, Lieven Vandenberghe. 凸优化。清华大学出版社. 2017.
[5] 关治,陆金甫。数值方法。清华大学出版社. 2017.