月度归档:2016年10月

线性回归——最小二乘法_实例(二)

  上篇文章介绍了最小二乘法矩阵形式的理论与证明、计算过程,这里使用程序代码的方式计算出矩阵形式的解,并给出线性拟合;

Octave代码

 clear all;close all;
 % 拟合的数据集
 x = [1,2;1,6;1,9;1,13];
 y = [4;8;12;21]; 
 % 根据公式 w = (x'*x)^-1  * x' * y
 % 与上篇文章一样一步步分解如下,其实这里可以不用分解,上篇文章分解时为了好计算
 x_t =x'*x;   

 %% (x'*x)^-1或inv(x' * x)
 x_i = x_t^-1; 

 x_i_t = x_i*x'; 

% 求出w
 w = x_i_t * y;   

 %% 在画板上绘制出数据集的点
 figure(1);hold off
 plot(x(:,2),y,'bo','markersize',5,'linewidth',2)
 set(gca,'xtick',0:1:25)  

 % 画布大小为25*25
 xplot = [0 25];
 yplot = [0 25];
 xlim(xplot)
 ylim(yplot)
 hold on
 % 打印出拟合的线段
 plot(xplot,w(1,:)+w(2,:)*xplot,'r','linewidth',2)
 set(gca,'yTick',1:1:25) 
 set(gca,'xTick',1:1:25) 
 xlabel('x');
 ylabel('y');

运行结果

enter image description here

线性回归——最小二乘法(二)

  上篇文章中介绍了单变量线性回归,为什么说时单变量呢,因为它只有单个特征,其实在很多场景中只有单各特征时远远不够的,当存在多个特征时,我们再使用之前的方法来求特征系数时是非常麻烦的,需要一个特征系数一个偏导式,而却最要命的时特性的增长时及其迅猛的,几十、几百、几千……

单变量线性回归:1
多变量线性回归:2

  所以从这里我们开始将介绍线性回归的另一种更方便求解多变量线性回归的方式:最小二乘法矩阵形式

模型变换

  线性回归的标量形式:3
  这里把上诉式子中的系数m与误差c转换为向量(为了统一从下面开始使用4表示c与m),把式子中c看成是1c,把1与特征x也转换为向量;
5

所以有: 6

损失函数

  损失函数也可以变为:
7
  根据矩阵乘积转置规则损失函数可以进一步化简为:
8
9
10

偏导数

  还是和之前一样求损失函数L的极小值,所以求上式L关于W的偏导数;
11

向量微分常用等式
12

求L关于W的偏导数:

13
因为

14

则有:
15

W则是通过矩阵形式求出来的最小乘法的解;

示例

  下面还是先使用上次的那组数据进行线性拟合,然后再使用多变量数据再次进行线性拟合已验证上诉算法:

单变量线性回归示例:

这里使用上面得到的最小二乘法矩阵形式公式对以下数据集进行线性拟合:

n x y
1 2 4
2 6 8
3 9 12
4 13 21

x、y的矩阵为:

16

根据公式求w
17
以下子求整个式子不好求,我们可以先分解该公式;
18
19
20
21

所以,也就是c=-0.23092,m=1.53092

线性回归函数可以写成:y = 1.53092x -0.23092

预测y的值:

y = 1.53092 * 2 – 0.23092=2.83092
y = 1.53092 * 6 – 0.23092=8.9546
y = 1.53092 * 9 – 0.23092=13.54736
y = 1.53092 * 13- 0.23092=19.67104

  与上偏文章直接求关于m与c的偏导得出来的结果几乎一样(因为小数点不同所以精度有所差异);下篇文章我们将使用本篇文章里的最小二乘法矩阵形式处理多变量的情况;

参考资料:
https://zh.wikipedia.org/zh/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95
a first course in machine learning