机器学习笔记(5):线性回归

2020-02-26  本文已影响0人  链原力

本文来自之前在Udacity上自学机器学习的系列笔记。这是第5篇,介绍了监督学习中的线性回归模型。

线性回归
回归这一个概念,在百度百科的解释是“发生倒退或表现倒退;常指趋于接近或退回到中间状态”。一开始指的是孩子的身高有趋于平均身高的现象。比如说,长得比较高的父母,生出来的孩子的身高一般会向平均值回落。因为这些长得比较高的父母,身高比平均值要高并不是大概率出现的事件。

当发现了这一现象后,人们开始将这个发现应用于其他地方。人们采集数据,然后绘制成散点图,研究数据之间的关系。久而久之,人们将数据之间的关系用函数关系表示,由此形成了数学上的回归的含义,即研究一组变量与另一组变量之间的关系,并使用函数方式表达出来。

所以,当我们遇到这样的问题,即知道一组自变量和另一组因变量之间的对应关系了,然后想研究新的自变量出现时,要预测对应的因变量的值,我们就可以使用线性回归。例如,不同年龄有不同的净资产。那么给定一个新的年龄,他的净资产有多少呢?

线性回归模型
如下图所示,我们想研究年龄和净资产的关系。对于一组给定的(年龄,净资产)数据点,我们制作了散点图。观察数据后我们可以预估一个线性回归模型(直线)可以满足。

净资产与年龄的模型

模型
假设:h_\theta(x)=\theta_0+\theta_1x
求解:\theta_i,\ i=1,2

其中x表示自变量,也就是这个例子中的年龄,h_\theta(x)表示因变量,表示净资产。


问题
我们将上面的模型转换为求解下面的最小值问题:
min \sum_{i=1}^{m}[h_\theta(x^{(i)})-y^{(i)}]^2

一般,求解线性模型的最小值问题,我们有梯度下降法和最小二乘法。下面分别介绍。


J(\theta_0, \theta_1)=\frac{1}{2m} \sum_{i=1}^{m}[h_\theta(x^{(i)}-y^{(i)}]^2


算法一:梯度下降法
给定\theta_0, \theta_1的初始值,然后不断地更新,使得J(\theta_0, \theta_1)不断地减少,直到小于某给定足够小的值。更新策略为:
\theta_j:=\theta_j-\alpha \frac{\partial}{\partial\theta_j}J(\theta_0, \theta_1) \quad (j=0, 1)

其中\alpha是学习速率(Learning rate)。

\frac{\partial}{\partial \theta_0}J(\theta_0, \theta_1) = \frac{\partial}{\partial \theta_0} \frac{1}{2m} \sum_{i=1}^{m} [h_\theta(x^{(i)})-y^{(i)}]^{2}

=\frac{1}{m} \sum_{i=1}^{m}[h_\theta(x^{(i)})-y^{(i)}] \frac{\partial}{\partial \theta_0}(\theta_0+\theta_1 x^{(i)}-y^{(i)})

=\frac{1}{m} \sum_{i=1}^{m}[h_{\theta}(x^{(i)})-y^{(i)}]

\frac{\partial}{\partial \theta_1}J(\theta_0, \theta_1) = \frac{\partial}{\partial \theta_1} \frac{1}{2m} \sum_{i=1}^{m} [h_\theta(x^{(i)})-y^{(i)}]^{2}

=\frac{1}{m} \sum_{i=1}^{m}[h_\theta(x^{(i)})-y^{(i)}] \frac{\partial}{\partial \theta_1}(\theta_0+\theta_1 x^{(i)}-y^{(i)})

=\frac{1}{m} \sum_{i=1}^{m}[h_{\theta}(x^{(i)})-y^{(i)}]x^{(i)}

如果令x_0=1,那么\theta_j的更新公式为:

\theta_j:=\theta_j-\frac{\alpha}{m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}]

推广到n\theta的情况。
样本数据:(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \ldots, (x^{(m)}, y^{(m)})
假设:
h_\theta(x)=\theta^Tx = \theta_0x_0+ \theta_1x_1+ \cdots +\theta_nx_n
其中,\theta \in \mathbb{R}^{n+1}

J(\theta)=\frac{1}{2m} \sum_{i=1}^{m}[h_\theta(x^{(i)}-y^{(i)}]^2
\theta_j:=\theta_j-\alpha \frac{\partial}{\partial\theta_j}J(\theta)

\theta_j:=\theta_j-\frac{\alpha}{m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}]

其中\theta_j保持同步地更新。

梯度下降法的具体推到涉及到高数中的泰勒公式,而其原理则是基于方向导数和梯度的定义。这里就不展开了。


算法二:最小二乘法
在高数书中定义了最小二乘法,即根据偏差的平方和为最小的条件来求解其中的常数的方法称为最小二乘法(Ordinary Least Equation)。而正规方程(Normal Equation)就是这里所说的条件表达为有确定解的代数方程式。

根据定理:设函数z=f(x,y)在点(x_0,y_0)具备偏导数,且在点(x_0,y_0)处有极值,则有
f_x(x_0,y_0)=0, \quad f_y(x_0,y_0)=0

这两个方程组成了正规方程。

所以对于\theta \in \mathbb{R}^{n+1}
J(\theta)=\frac{1}{2m} \sum_{i=1}^{m}[h_\theta(x^{(i)}-y^{(i)}]^2


\frac{\partial}{\partial \theta_j}J(\theta)=\cdots=0 \quad (j=1, \ldots, n)

求解\theta_0, \theta_1, \ldots, \theta_n

按照上面的条件可以推导得到:
\theta = (X^TX)^{-1}X^Ty
其中X,y都是样本数据的矩阵表达式。具体可以参考
http://mathworld.wolfram.com/NormalEquation.html

在scikit-learn中实现了线性回归模型的库:
https://scikit-learn.org/stable/modules/linear_model.html#ordinary-least-squares

上一篇下一篇

猜你喜欢

热点阅读