动手机器学习-实现线性回归

线性回归完整代码想抄作业的同学直接点这里

岭回归完整代码想抄作业的同学直接点这里

一、线性回归算法简介

线性回归是经典的回归算法

线性回归是通过属性的线性回归来进行预测的函数,一个具有n个特征的数据集的线性回归方程如下所示:

$$ f(x) = w_1 x_1 + w_2 x_2 + … + w_n x_n; $$

用向量表示为

$$ f(x) = w^T x + b $$

由于线性回归的w可以很直观的表示出来,假如“在西瓜数据中”学到的方程为$f_好瓜(x) = 0.2 x_{色泽} + 0.5 x_{根蒂} + 0.3 x_{敲声} + 1$,我们可以通过这个方程发现根蒂在判断西瓜好坏起着很重要的作用。

线性回归算法,主要有两部分:

  1. 参数的求解(核心)
  2. 参数的惩罚

二、参数的求解(最小二乘法)

考虑最简单只有一个属性时,这个属性如果是离散属性,那么应该要转换为连续属性。有序属性,例如身高的高矮,可以转换为{1.0, 0.0}。而三个无序数据例如西瓜,南瓜,黄瓜可以转化为(1,0,0),(0,1,0),(0,0,1)

确定w和b是最关键的,我们采用均方误差来衡量算法的性能,所以我们的目的就是让线性回归模型的均方误差最小化,数学公式表达为:

$$ (w^* , b^*) = argmin \sum_{i=1}^{m} ( f(x_i) - y_i )^2 $$

怎么求解参数使得均方误差最小呢?使用最小二乘法,可以直接求解出来。理论公式推倒略,最终公式如下所示:

$$ w^* = (X^T X)^{-1} X^T y $$

其中$X = (1,x)$,简单来说为在x矩阵前加上一列1,为X。满足能计算出w的前提是$X^T X$存在逆矩阵。

三、参数的惩罚

L2惩罚:

改变原始的目标函数为:

$$ (w^* , b^*) = argmin \sum_{i=1}^{m} ( (f(x_i) - y_i )^2 + a \sum w^2 ) $$

公式中的$a\sum w^2$ 成为L2惩罚项

使用L2惩罚的原因为:为了更好的拟合训练数据中,x的很小变化而y却变大许多,所以必须使用更大的w。最终会导致过度拟合的现象,所以在目标函数中加入$w^2$,来避免出现很大的w,最终减小模型的过拟合

其中$a$是一个可变参数,其中$a$越大惩罚越严重,模型越平缓。

引入L2的线性回归又称作:岭回归

L1惩罚:

改变原始的目标函数为:

$$ (w^* , b^*) = argmin \sum_{i=1}^{m} ( (f(x_i) - y_i )^2 + a \sum |w| ) $$

公式中的$a\sum |w|$ 成为L2惩罚项

使用L1惩罚的原因为:虽然L2惩罚可以解决回归参数过大的问题,但是很难达到零值,这样的后果为:虽然有很多特征对最终结果影响很小,但是还是要加入模型的计算中去,而L1惩罚比L2惩罚严厉很多,可以使模型许多回归参数变为零,最终达到压缩相关特征的目的

其中$a$是一个可变参数,其中$a$越大惩罚越严重,模型越平缓。

引入L1的线性回归又称作:Lasso回归

四、探索性问题

这即是探索性的问题,也是我自己的代办问题解答,如果有时间,我一定会完善下面的问题。

  1. 线性回归和对数线性回归的关系

对数线性回归的公式如下: $$ lny = w^T x + b $$ 它实际上是在试图让$e^{w^T x + b}$去逼近$y$。形式上仍是线性回归,但实质上在求取输入空间到输出空间的非线性函数映射,更一般地,考虑单调可微函数$g(x)$,令

$$ y = g^{-1} (w ^ T x + b) $$ 这样的模型称作广义线性模型,其中函数$g(x)$被成为联系函数。显然当联系函数$g(x) = ln(x)$时,便是对数线性回归。

  1. 线性回归对数据集有什么要求呢?