我的人工智能之旅——线性回归

本文将涉及以下知识点

(1)线性关系

(2)线性回归

(3)假设函数

(4)代价函数

(5)学习速率

(6)梯度下降

(7)特征向量

相关的线性代数或微积分知识,可参照另两篇博文

我的人工智能之旅----线性代数基础知识

我的人工智能之旅----微积分基础知识

以下是正文。


线性关系

解释线性回归之前,先来看一下线性关系。

什么是线性关系?如果自变量与因变量存在一次方函数关系,那么就成自变量与因变量存在线性关系。例如

y=2x+3 //x为自变量,y为因变量
y=2j+3k+i //j,k,i为自变量,y为因变量

但需要注意的是,类似

y=zx //z,x为自变量,y为因变量

就不是线性关系。

线性关系还必须满足以下条件

f(x_1+x_2)=f(x_1)+f(x_2)

f(ax)=a\cdot f(x)

线性回归

所谓线性回归,就是利用数理统计中的回归分析,来确定两种或两种以上变量间,相互依赖的定量关系的一种统计分析方法。

即由样本(x,y),推断y=ax+b的过程。其中a,b为需要推断的常量。那么,问题来了。

(1)为什么是"y=ax+b"型的一元一次结构?而非其它一元N次结构?

(2)如何推算出a,b?

假设函数

先来回答上一小节的问题(1)。可以使用其它一元N次结构。选择一元一次结构只是为了方便。之后的学习,可以换为更复杂的拟合结构。由于我们假设x,y之间存在"y=ax+b"型的映射关系,所以函数f(x)=ax+b被称为假设函数,hypothesis function。

对于假设函数中的参数a,b,我们没有办法直接算出正确的值。也无法让所有样本,都映射到假设函数上。因此,只能推算出对于样本集合整体来说,最佳的a,b取值。

代价函数

如何评断参数a,b最佳?最佳a,b应使得假设函数求得的数据,与实际数据之间误差的平方和为最小。

我的人工智能之旅——线性回归_第1张图片

注:关于为何使用1/2m,而非1/m,我们在下一小节说明。

由于样本集中的每个样本(x,y)已知,算式中a和b成为了变量,算式可以看作是a,b作为变量的函数。即

我的人工智能之旅——线性回归_第2张图片

该函数,被称为代价函数,cost function,或者平方误差代价函数,squared error cost function。

有了代价函数,推算a,b的问题就演化为,求代价函数何时取到最小值的问题。

当然,除了平方误差代价函数外,还存在其它代价函数。只是平方误差代价函数,是解决线性回归问题最常用的手段罢了。

但不管使用何种代价函数,我们的目的终归是要推算最佳的a,b。那么,如何推算呢?

梯度下降算法

梯度下降算法,gradient descent,用于求函数的最小值。该算法运用了微积分(claculus)中的导数(derivatives)或偏导数(partial derivatives)知识。

简单的说,导数体现了自变量在变化时,对因变量所产生的影响。若存在多个自变量,那么对其中一个变量进行的求导,即为偏导数。换句话说,一个自变量在变化时,对因变量和其它自变量锁产生的影响。

若某一点的导数大于0,那么说明,因变量随自变量增大而增大,随自变量减小而减小。若小于0,则因变量随自变量的增大而减小,随自变量减小而增大。依据该特性,我们不断地同时更新a,b的取值,直至(a,b)所对应的点导数为0。那么,如何更新呢?

我的人工智能之旅——线性回归_第3张图片

我们将J(a,b)带入,来看一下运算过程。

我的人工智能之旅——线性回归_第4张图片

还记得上一节的“1/2m”or“1/m”的疑问吗?通过运算,“1/2”被约掉。因此,代价函数之所以取“1/2m”作为参数,是为来运算方便。

将导数结果带入,通过不断的迭代尝试获取a_{next}b_{next},直至两者的偏导数为0或接近0。此时,得到的a,b的值,即为最佳值(全局最佳,或局部最佳)。

需要注意的是,由于受限于样本集合的大小,该最佳值可能为局部最佳值。

此外,初始点的选取,也将影响最佳值的推算。

我的人工智能之旅——线性回归_第5张图片我的人工智能之旅——线性回归_第6张图片

可见,梯度下降算法其实是一步一步的试出了对于样本集合最佳的a,b取值。有了a,b的估值,假设函数的真容也便浮出水面了。

梯度下降,并非唯一的推算最佳参数的方法。其它常用方法还包括,BFGS算法,L-BFGS算法,共轭梯度法(Conjugate Gradient)等。这些方法远比梯度下降法复杂的多,但优点在于,它们不用人为的选择学习率,甚至可以每次迭代自动使用更优的学习率,因此收敛速度较梯度下降更快。由于篇幅及范围的原因,此处暂不过多涉及。

多元线性回归

至此,我们其实还是在讨论一元一次的简单假设,即一个自变量和一个因变量的情况。但实际遇到的问题并非如此简单。例如,房子的价值,不仅仅与面积有关,还要参考楼层,房龄,房间数量等多重因素,即多元线性回归的问题。

那么,我们的假设函数也相应发生了变化。

f(x_0,x_1,x_2,x_3)=a_0+a_1x_1+a_2x_2+a_3x_3

这里,我么把参数都变为了a_i,自变量变为了x_i(例如,x_1,x_2,x_3分别代表楼层,房龄,房间数量,x_0默认为1)。之所以这样表示,是为了方便矩阵的引入。根据矩阵内积(矩阵与向量的乘法),f(x_0,x_1,x_2,x_3)可以表述为

f(x_0,x_1,x_2,x_3)= \begin{bmatrix} a_0&a_1&a_2&a_3 \end{bmatrix}*\begin{bmatrix} 1 \\ x_1 \\ x_2 \\ x_3 \end{bmatrix}

若假设向量A=\begin{bmatrix} a_0\\a_1\\a_2\\a_3 \end{bmatrix},向量X=\begin{bmatrix} x_0\\x_1\\x_2\\x_3 \end{bmatrix},那么,向量A的转置A^T=\begin{bmatrix} a_0 &a_1 &a_2 &a_3 \end{bmatrix}

则假设函数转化为f(X)=A^{T}X,其中x_i称为特征(feature),X称为特征向量(feature vector)。

解决多元线性回归的问题,我们同样使用梯度下降算法,即我们要推算出合适的A。而推算过程,我们已在上一小节进行了描述。那么,套用之前的公式,可得到代价函数,

J(A^T)=\frac{1}{2m}\sum _{i=1}^{m}{(f(X_i)-y_i)^2}

a_j(j=0,1,2,3)的迭代算法则为

{a_j}_{next}={a_j}-\beta \frac{\partial }{\partial a_j}J(A^T)

其中

\frac{\partial }{\partial a_j}J(A^T) \\=\frac{\partial }{\partial a_j}(\frac{1}{2m}\sum _{i=1}^{m}{(f(X_i)-y_i)^2}) \\=\frac{\partial }{\partial a_j}(\frac{1}{2m}\sum _{i=1}^{m}(a_0+a_1x_i_1+a_2x_i_2+a_3x_i_3-y_i)^2)

当j=0,1,2,3时,各偏导数为

\frac{\partial }{\partial a_0}J(A^T)=\frac{1}{m}\sum _{i=1}^{m}{(a_0+a_1x_i_1+a_2x_i_2+a_3x_i_3-y_i)}=\frac{1}{m}\sum _{i=1}^{m}{(f(X_i)-y_i)}

\frac{\partial }{\partial a_1}J(A^T)=\frac{1}{m}\sum _{i=1}^{m}{(x_i_1(a_0+a_1x_i_1+a_2x_i_2+a_3x_i_3-y_i))}=\frac{1}{m}\sum _{i=1}^{m}{(x_i_1(f(X_i)-y_i))}

\frac{\partial }{\partial a_2}J(A^T)=\frac{1}{m}\sum _{i=1}^{m}{(x_i_2(a_0+a_1x_i_1+a_2x_i_2+a_3x_i_3-y_i))}=\frac{1}{m}\sum _{i=1}^{m}{(x_i_2(f(X_i)-y_i))}

\frac{\partial }{\partial a_3}J(A^T)=\frac{1}{m}\sum _{i=1}^{m}{(x_i_3(a_0+a_1x_i_1+a_2x_i_2+a_3x_i_3-y_i))}=\frac{1}{m}\sum _{i=1}^{m}{(x_i_3(f(X_i)-y_i))}

由于x_i_0=1,所以

\frac{\partial }{\partial a_j}J(A^T)=\frac{1}{m}\sum _{i=1}^{m}{x_i_j(f(X_i)-y_i)}

最终,参数向量A中的元素a_j的迭代算法为

a_j_{next}=a_j-\frac{\beta }{m}\sum _{i=1}^{m}{x_i_j(f(X_i)-y_i)}

小结

线性回归,可分为一元或多元线性回归。通过构建合理的假设函数和代价函数,利用梯度下降算法,迭代推算出对于样本集合来说,最佳的参数或参数向量。希望通过本文的叙述,使得大家对推算过程,线性回顾问题的解决思路,有一个大致的了解。

你可能感兴趣的:(人工智能,机器学习,人工智能之旅)