机器学习 Week1 —— 线性回归,梯度下降

自学机器学习,我选择的是吴恩达在Coursera上的公开课Machine Learning,学了课程中的两个星期,发现讲得比较明白易懂,连微积分、矩阵都会补充一下基础知识。跟着这门课程,很多东西比较容易地就理解了。这几篇博客,我准备将学习过程中的笔记总结一下。

Machine Learning -- Andrew Ng, Stanford

这次主要介绍一下机器学习的基础知识,线性回归模型,损失函数,梯度下降法。

  1. 机器学习简单介绍
    关于机器学习(Machine Learning)有很多不同的定义,课程里面采用的是 Tom Mitchell 的定义:

A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E
对于一个特定的任务T,一个机器从经验E中学习,使用P来衡量它在任务T中的表现,如果通过学习经验E,它的P提高了,那么就称之为机器学习

机器学习大体上分为两类:有监督学习(Supervised Learning)无监督学习(Unsupervised Learning)。有监督学习可以分为分类(Classification)和回归(Regression)两类问题,无监督学习主要指聚类(Cluster)问题。分类问题是指给定一系列特征数据,通过这些特征数据来预测目标属于哪一类别,而回归则是根据这些特征数据来得到一个数值,分类用于需要预测的结果是离散的情况,而回归用于最终结果是连续的情况。举个例子,给出一套房子的一些特征数据如面积,卧室数等等,如果目标是预测这套房子的房价,这是一个连续的数值,那么就属于回归问题,如果目标是判断房价处于哪一个价格等级,由于价格等级是离散的一些等级,那么这就属于分类问题。
关于聚类问题,一个例子是谷歌新闻,比如你在谷歌新闻下面搜当天的新闻:“Gmail推出新功能”,那么你会看到一个“Gmail推出新功能”的大标题下面,聚合了很多来自不同媒体的相关报导,那么谷歌新闻是怎么把这些内容都归到一起的呢,就是通过聚类算法。事先并没有人告诉它应该怎么归类,它就是在大量的新闻中,使用聚类算法,进行自动的归类。

  1. 线性回归
    线性回归(Linear Regression)是一个很简单的回归算法,使用它我们可以快速地了解很多基础知识。首先看一个只有一个特征值的线性回归问题,给定以下数据:
x y
2104 460
1416 232
1534 315
852 178
... ...

这些给定的数据也叫做数据集,我们把每组数据记作(x^{(i)},y^{(i)}),一共有m组数据。我们的目标就是给出一个模型,用于根据新给定的x值预测y的值,对于线性回归,我们使用的模型是一个线性函数:
h_i(\theta) = \theta_0 + \theta_1x^{(i)}
这个模型也叫做假设(Hypothesis),其中\theta_0\theta_1就是我们最终需要训练得到的参数(Parameter),所以我们就是想找到一组最优的\theta_0\theta_1,使我们的假设最贴近数据集:

Hypothesis

那么我们如何得到最优的\theta_0\theta_1呢,我们将训练的目标转化为最小化下面这个函数:
J(\theta) = \frac 1{2m}\sum_{i=1}^m(h_i(\theta)-y^{(i)})^2
这个需要最小化的函数就叫做损失函数(Cost Function),损失函数有很多种,上面用的这种叫做均方误差(Mean Square Error),可以看到,我们实际上就是在最小化我们的假设与训练集中实际的y_i的误差。至于最小化损失函数的方法,将会在下一部分介绍。
总结一下,通过一个最简单的线性回归的例子,我们介绍了以下的名词:

  • Dataset 数据集:(x^{(i)},y^{(i)}
  • Hypothesis 假设:h_i(\theta) = \theta_0 + \theta_1x^{(i)}
  • Cost Function 损失函数:J(\theta) = \frac 1{2m}\sum_{i=1}^m(h_i(\theta)-y^{(i)})^2
  1. 梯度下降法
    好了,我们已经知道在线性回归问题中,我们的目标转化为了最小化损失函数,那么现在来介绍最小化损失函数J(\theta)的方法:梯度下降法(Gradient Descent),这个算法不仅用于线性回归,其他的问题也可以用梯度下降法来最小化损失函数。
    梯度下降法的思想是:先选定一个初始点\theta_0\theta_1,但是这个初始点有可能是让损失函数J(\theta)取最小值的点,也有可能不是让损失函数J(\theta)取最小值的点,所以我们就不断地更新\theta_0\theta_1的值,更新的时候按照下面的方法更新:
    \theta_n = \theta_n-\alpha\frac{\partial J(\theta)}{\partial \theta_n}
    需要注意的是更新的时候需要一次性算完之后全部更新,而不能在算\theta_1的时候使用已经更新之后的\theta_0代入J(\theta)。上面的算式就是梯度下降法。可以看到,如果取的\theta_0\theta_1已经在最小值点(全局最小或者局部最小)上,那么每次更新的时候由于导数是零,所以\theta_0\theta_1的值维持不变。而如果\theta_0\theta_1没有处于最小值点上,那么在\alpha取值适当的情况下,每次更新\theta_0\theta_1会让损失函数J(\theta)的取值都变得比更新之前更小。下面通过一个图来直观地感受一下梯度下降法:
Gradient Descent

对应每个不同的\theta_0\theta_1J(\theta)都有不同的取值,每次更新的时候\theta_n都沿着使J(\theta)下降最快的方向更新。如果参数\theta_n不止两个,方法也是一样的。
对于线性回归模型来说,由于我们已经得到了J(\theta)的表达式,我们可以将J(\theta)代入,求出偏导数,从而进一步化简这个式子:
\theta_n = \theta_n-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x_i)-y_i)

  1. 学习率
    在梯度下降法的更新公式中,有一个参数\alpha,它控制着每次更新的大小,也叫学习率(Learning Rate),是手动设置的。需要注意的是,如果学习率设置得过小,那么每次更新只会下降很小的一段距离,想要达到最优解就会花费更多的步骤,所以运行的时间会大大增加;如果学习率设置得过大,那么有可能更新之后的\theta_n会使得J(\theta)直接跃过了最小值点,甚至变得比更新之前的值更大,像这样:
Learning rate too small or too large

这样下去,损失函数会不断变大,永远也到不了最优解。
还有一点是,当我们向最小值点接近的时候,可以看到梯度也变小了,因此梯度下降法式子中的 \alpha\frac{\partial J(\theta)}{\partial \theta_n} 也随之在变小,所以我们不需要随着训练次数的增加而逐渐减小学习率\alpha

  1. 多元线性回归
    之前讲的线性回归的例子里面,我们只用到了一个特征参数x来预测y的值,但是在实际应用中,很多时候我们会利用多个特征参数,比如如果我们想预测一个房子的价格,我们除了可以用面积这一个特征参数来预测价格之外,还可以利用年代,卧室数,客厅面积等等一些特征参数一起来预测价格,所以假设特征参数有n个,这个时候我们的数据集就变为:
    (x^{(i)}_1,x^{(i)}_2,...,x^{(i)}_n,y^{(i)})
    对比刚刚的线性回归来建立这个多元线性回归(Multivariate linear regression)的模型,可以得到:
  • Hypothesis 假设:h_i(\theta) = \theta_0 + \theta_1x^{(i)}_1+ \theta_2x^{(i)}_2+...+\theta_nx^{(i)}_n
  • Cost Function 损失函数:J(\theta) = \frac 1{2m}\sum_{i=1}^m(h_i(\theta)-y^{(i)})^2
  1. 多项式回归
    当然,只用线性的模型去拟合数据有很大的局限性,大部分数据都不是线性的,但是这个时候解决方法也很简单,只需要在线性模型的基础上稍加改进就可以使用简单的非线性模型来拟合数据。
    从一个简单的例子开始,在线性回归中的那个只有一个特征参数的例子中,如果y^{(i)}x^{(i)}的关系不是线性的,而是二次的关系,那么我们可以首先对数据集作一些处理,用x'^{(i)} = x^{(i)2},然后去建立yx'的模型,这样我们就用建立线性模型的方法处理了非线性的数据。不只是二次方的关系,更高次方或者其它非线性关系也可以这样处理。

  2. 其他技巧
    当我们有很多个特征参数时,这些特征的量程往往是不一样的,甚至差距很大,比如房子的面积可能是上百平方米,而卧室数则是个位数,如果不对数据作预先处理,在训练的时候可能会花费更多时间。因此我们需要做的就是将这些数据都处理到差不多的范围,比如-1 ~ 1这个范围,或者-5 ~ 5等等,一个常用的处理方法是均值归一化处理(Mean Normalization)
    x^{(i)} = \frac {x^{(i)}-u_i}{s_i}
    其中u_i是指第i个特征参数(如房子面积)下的所有数据的平均值,s_i指第i个特征参数下的数据的极差,或者标准差。
    第二个技巧是矩阵化(Vectorization),比如在多元线性回归中:
    h_i(\theta) = \theta_0 + \theta_1x^{(i)}_1+ \theta_2x^{(i)}_2+...+\theta_nx^{(i)}_n
    如果一个一个算再相加的话效率相对低下,更好的方法是使用矩阵,假设x^{(i)}_0 = 1,那么h_i(\theta)也可以使用以下方法计算:
    h_i(\theta) = [\theta_0,\theta_1,...,\theta_n]*X^T
    其中X = [x^{(i)}_0,x^{(i)}_1,...,x^{(i)}_n]
    使用矩阵的好处是非常易于编程实现,课程中推荐了Octave,它的语法和MATLAB一样,但是是免费的,既可以直接在命令行中运行也可以编辑.m文件运行。使用这些语言实现矩阵运算十分方便。
    目前为止,大体对线性回归的模型作了介绍,但是具体如何使用编程语言实现还没有讲解,我们的目标是求出模型中\theta_i的值,第一种方法,我们可以按照模型中的梯度下降法,写出每一步的循环,不断地更新\theta_i的值,直到损失函数下降到比较小的值,还有一种方法,就是实际上对模型进行数学运算之后,我们其实可以得到\theta_i的通解:
    \Theta = (X^TX)^{-1}X^Ty
    其中\Theta\theta_i组成的向量,yy^{(i)}组成的向量,X是所有特征值的所有数据组成的一个矩阵,上面的式子叫做 Normal Equation,是除了梯度下降法之外的另一种最小化损失函数的方法。当然,由于这个 Normal Equation 里面涉及到求逆矩阵,所以有时并不能得到好的结果。比如当你有很多个特征参数,但是给的数据集所提供的数据却远远少于特征参数的个数时,这时通解中的矩阵是没有逆矩阵的。下表比较了使用梯度下降法和直接使用通解的区别,我们需要根据实际情况来选择:

Gradient Descent Normal Equation
Need to choose alpha No need to choose alpha
Needs many iterations No need to iterate
O (kn^2) O (n^3), need to calculate inverse of X^TX
Works well when n is large Slow if n is very large
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容