小白的机器学习笔记系列之二 —— 从线性感知器到线性回归

什么是线性回归模型

上一篇文章,咱们讲了一个很是朴素而直观的学习模型——线性感知器,这个学习模型主要用于分类问题, 如咱们以前说到的原鸢尾花分类例子。那么,对应另一些非分类问题,好比信用额度评估,房屋价格评估等,咱们又有什么办法呢?html

经过对线性感知器进行一些改良,咱们获得一个称做线性回归的学习算法,能够用来解决这类问题。git

举个栗子

咱们以房屋价格评估为例,来看一下线性回归是如何实现的。假设影响房屋价格的因素有地上建筑面积, 地下室面积, 占地面积,卧室数, 洗手间数, 楼层数,景观,房屋情况,建造年限这些因素, 暂且不考虑地段和不动产市场的波动,而且假设房屋的价格和以上房屋的基本状况成线性关系。github

那么咱们是否能够找到一组合适的权重参数,使得他们的线性组合刚好是房屋的价格?web

让咱们用数学的语言来描述以上问题。算法

输入参数 x x

  • 卧室数 ( x 1 x_1
  • 洗手间数( x 2 x_2
  • 地上建筑面积( x 3 x_3
  • 地下室面积( x 4 x_4
  • 房屋占地面积( x 5 x_5
  • 楼层数( x 6 x_6
  • 景观( x 7 x_7 (0 - 5 打分, 5分为最好,0分为最差)
  • 房屋情况( x 8 x_8 ( 0 - 5 打分, 5分为最好,0分为最差)
  • 建造年限( x 9 x_9

权重参数 w w

对应每一组输入参数 x i x_i 都分配一个权重参数记做 w i w_i ,共有9个权重参数。app

输出 p r e d i c t _ p r i c e predict\_price

p r e d i c t _ p r i c e predict\_price = i = 1 9 w i x i \sum_{i=1}^9w_i * x_i 机器学习

最优权重参数

此时,咱们并不知道输入参数中哪些比较重要,权重值应当比较大,哪些比较次要, 数值应当比较小。那么要如何来得到这个最优权重参数呢?
在这里咱们必须注意到“最优”两个字,最优就是意味着衡量评估的正确率达到最佳。实际上,评估价格很难彻底等同于实际成交价格,可是咱们能够衡量评估价格和实际成交价格的差距。
咱们将 x x y y 放到二维平面里,能够这样来理解线性回归,下图左中的空心点是房屋的实际成交价格,紫色小点则是咱们的预测价格,空心点到实心点的距离就是咱们预测的误差值,而咱们的任务就是求一组权重值 W W 使得整个误差值最小。但 x x 的个数增长到2个,则线性函数就是个平面,如右图所示,实际上但 x x 大于2个以上则就没法再用图像来表示了。
在这里插入图片描述
很天然的,咱们会想到用方差来衡量。考虑所有的样本数据,咱们能够经过如下算式求得均方差。svg

a v g _ e r r o r = 1 N j = 1 N ( i = 1 9 w i x i ( n ) y ( n ) ) 2 avg\_error = \frac1N\sum_{j=1}^N(\sum_{i=1}^9w_i * x_i^{(n)}- y^{(n)})^2 函数

此处,咱们能够把最优化权重参数这个问题归结为对所有的样本,如何得到最小化方差。为了解决这个问题,咱们首先要矢量化参数。学习

矢量化参数

为了方便计算,咱们将以上参数矢量化。在机器学习中,咱们须要进行大量的数值计算,好比累加,乘积等,相比使用循环语句,矢量化能够大大提升计算效率。

输入参数矢量化

  • 每组输入参数构建成列矢量形式以下:
    x = x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x = (x_1,x_2 ,x_3,x_4,x_5,x_6,x_7,x_8,x_9)
    假设共有N组这样的训练数据, 每一组输出参数记为 x ( i ) x^{(i)}
    构建输入矩阵(N x 9): X = { x ( 1 ) x ( 2 ) . . . x ( N ) } = { x 1 ( 1 ) x 2 ( 1 ) . . . x 9 ( 1 ) x 1 ( 2 ) x 2 ( 2 ) . . . x 9 ( 2 ) . . . . . . . . . . . . x 1 ( N ) x 2 ( N ) . . . x 9 ( N ) } X = \left\{ \begin{matrix} -x^{(1)} -\\ -x^{(2)}- \\ ...\\ -x^{(N)}- \end{matrix} \right\} = \left\{\begin{matrix} x_1^{(1)} & x_2^{(1)}&...&x_9^{(1)}\\ x_1^{(2)} & x_2^{(2)}&...&x_9^{(2)}\\ ...&...&...&...\\ x_1^{(N)} & x_2^{(N)}&...&x_9^{(N)}\\ \end{matrix}\right\}

权重参数矢量化

  • 咱们将 w 1 w_1 w 9 w_9 权重参数也构建成列矢量 (9 x 1)
    W = { w 1 w 2 . . . w 9 } W = \left\{\begin{matrix} w_1\\ w_2 \\ ...\\ w_9\end{matrix} \right\}

样本标签矢量化

  • 咱们把输入样本的标签也构形成列矢量 (N x 1)
    Y = { y ( 1 ) y ( 2 ) . . . y ( N ) } Y = \left\{ \begin{matrix} y^{(1)}\\ y^{(2)}\\ ...\\ y^{(N)}\end{matrix} \right\}

计算最优权重参数

若是咱们把全部样本评估价格的方差加在一块儿,再除以样本个数,就能够求得该样本的平均方差。那咱们矢量化后的均方差计算公式,则可表示以下。

a v g _ e r r o r avg\_error = E ( W ) = 1 N ( X W Y ) 2 E(W) =\frac1N (X*W - Y)^2

咱们要得到正确率最大,也就是要最小化这个均方差,咱们能够用求极点的方法来得到,即对该计算公式求 W W 的导数,并令其为0。

d E d W = 2 N X T ( X W Y ) = 0 \frac{dE}{dW}=\frac2NX^T*(X*W-Y)=0

此处,咱们发现 W W 能够经过简单的矩阵变化来获得。

X T X W = X Y X^T*X*W=X*Y

W = ( X T X ) 1 X Y W=(X^{T} *X)^{-1}*X*Y

X + = ( X T X ) 1 X X^+ = (X^{T} *X)^{-1}*X

W = X + Y W = X^+ *Y

此处 X + X^+ 被称为伪逆矩阵。咱们知道逆矩阵的存在条件是比较苛刻的,可是线性代数的知识告诉咱们任何矩阵必存在其相应的伪逆矩阵
线性回归是一个很是简单朴素的算法,只要一步运算咱们就能够获得咱们须要的权重参数。

线性回归算法总结

  • 构造输入参数矩阵 X X 和 输入样本标签矢量 Y Y ( x ( 1 ) y ( 1 ) ) ( x^{(1)},y^{(1)}) , ( x ( 2 ) y ( 2 ) ) ( x^{(2)},y^{(2)}) ,…, ( x ( N ) y ( N ) ) ( x^{(N)},y^{(N)}) 以下:
    X = { x ( 1 ) x ( 2 ) . . . x ( N ) } 输入矩阵 X = \left\{ \begin{matrix} -x^{(1)} -\\ -x^{(2)}- \\ ...\\ -x^{(N)}- \end{matrix} \right\}
    Y = { y ( 1 ) y ( 2 ) . . . y ( N ) } 样本标签矢量 Y = \left\{ \begin{matrix} y^{(1)}\\ y^{(2)}\\ ...\\ y^{(N)}\end{matrix} \right\}
  • 计算伪逆矩阵 X + = ( X T X ) 1 X X^+ = (X^{T} *X)^{-1}*X
  • 返回 W = X + Y W = X^+ *Y

线性回归做为一个简单而高效的算法,经常被用于一些复杂模型的一个学习单元,或者权重初始化。

github代码下载地址:
https://github.com/deechean/MachineLearningSample