线性回归

线性回归算法是最基础的机器学习算法之一是一个监督学习算法,也就是说我们有一些样本,根据这些样本我们对之后的进行预测。我们最早接触到的线性回归应该是中学的方程。例如:

h x = a X + b h_x = aX+b hx=aX+b

线性回归中,我们说Y是预测值,X是特征,A是X特征的权重,B是一个初始的值,这是一个最基础的线性回归方程,我们可以用它来预测单一变量的问题,比如说速度与加速度的关系,房价与面积的关系。

但是在现实情况下,影响一个预测值的特征不可能仅仅只有一个,房价还可能与地段,楼层,朝向等等有关。这时候我们的特征可能会有几十个上百个甚至更多,比如在kaggle的House Prices中,给出的特征达到了80个(不包含ID),所以我们也把线性回归叫做多元线性回归。
假设我们有 j j j个特征, m m m个训练集那么这时候的预测函数就是:

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 . . . . . . θ j x j h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2......\theta_jx_j hθ(x)=θ0+θ1x1+θ2x2......θjxj

为了计算的效率我们这里利用矩阵乘法的特征,令

θ T = [ θ 0 θ 1 θ 2 . . . θ j ] \theta^ \mathrm{T}=\left[\begin{matrix}\theta_0&\theta_1&\theta_2&...&\theta_j\end{matrix}\right] θT=[θ0θ1θ2...θj]

X T = [ 1 x 1 x 2 . . . x j ] X^ \mathrm{T}=\left[\begin{matrix}1&x_1&x_2&...&x_j\end{matrix}\right] XT=[1x1x2...xj]

计算 θ T X \theta^\mathrm{T}X θTX,就得到了 h θ ( x ) h_\theta(x) hθ(x)。这里我们默认 θ 0 \theta_0 θ0的参数为1。这里我们每一个 x x x都是一个向量,包含着这批数据中所有数据 x i x_i xi特征的值。所以 h θ ( x ) h_\theta(x) hθ(x)是一个
有了预测函数,那我们需要初始化一下 θ \theta θ,作为第一次预测的参数,一般我们初始化为

θ T = [ 0 0 0 . . . 0 ] \theta^ \mathrm{T}=\left[\begin{matrix}0&0&0&...&0\end{matrix}\right] θT=[000...0]

当然根据具体情况我们可以自己设置初始值。

那么有了初始的 θ \theta θ,我们计算当前 θ \theta θ的预测值,这时候的 h θ ( x ) = 0 h_\theta(x)=0 hθ(x)=0,那我们用真实的值减去预测的 h θ ( x ) h_\theta(x) hθ(x),得到当前 θ \theta θ的误差,我们将其称为代价函数(costFunction)。

作为预测,我们经可能的想要让预测值接近于我们所知道的真实值,我们要让所有 j j j个样本的误差接近一个最小值。所以代价函数为:

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ) − y i ) 2 = 1 2 m ( θ T X − Y ) T ( θ T X − Y ) J(\theta) =\frac{1}{2m} \sum\limits_{i=1}^{m}(h_\theta(x)-y_i)^2=\frac{1}{2m}(\theta^\mathrm{T}X-Y)^\mathrm{T}(\theta^\mathrm{T}X-Y) J(θ)=2m1i=1m(hθ(x)yi)2=2m1(θTXY)T(θTXY)

这里 θ T X − Y \theta^\mathrm{T}X-Y θTXY得出的是一个向量,存储了每一个训练集的误差,我们下一步就要用梯度下降算法来不断地迭代,使 J ( θ ) J(\theta) J(θ)最小化。

梯度下降算法是一个很经典的算法:

R e p e a t : \text Repeat: Repeat:

θ = θ − α ∂ ∂ θ j J ( θ ) \theta = \theta-\alpha\frac {\partial} {\partial\theta_j}J(\theta) θ=θαθjJ(θ)

这里的 α \alpha α是学习速率,可以理解为你没一次修改 θ i \theta_i θi的程度,太小了会使你的学习速率过慢,过大可能无法达到最小值。而且梯度下降算法容易落入局部最优解,我们可以通过随机的初始点或者方向来训练或者一些其他的方法来避免这个问题。

这里展开推导一下:

θ = θ − α ∂ ∂ θ j J ( θ ) \theta = \theta-\alpha\frac {\partial} {\partial\theta_j}J(\theta) θ=θαθjJ(θ)

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ) − y i ) 2 J(\theta) =\frac{1}{2m} \sum\limits_{i=1}^{m}(h_\theta(x)-y_i)^2 J(θ)=2m1i=1m(hθ(x)yi)2

J ( θ ) J(\theta) J(θ) θ j \theta_j θj求偏导就等于

∂ ∂ θ j J ( θ ) = 2 ⋅ 1 2 m ⋅ ∑ i = 1 m ( h θ ( x ) − y i ) ⋅ x j = 1 m ∑ i = 1 m ( h θ ( x ) − y i ) x j \frac {\partial} {\partial\theta_j}J(\theta)= 2\cdot\frac{1}{2m}\cdot\sum\limits_{i=1}^{m}(h_\theta(x)-y_i)\cdot x_j=\frac{1}{m}\sum\limits_{i=1}^{m}(h_\theta(x)-y_i)x_j θjJ(θ)=22m1i=1m(hθ(x)yi)xj=m1i=1m(hθ(x)yi)xj

对于只有一个特征的 θ \theta θ所以我们可以写成:

θ = θ − α 1 m ∑ i = 1 m ( h θ ( x ) − y i ) x i \theta = \theta-\alpha\frac{1}{m} \sum\limits_{i=1}^{m}(h_\theta(x)-y_i)x_i θ=θαm1i=1m(hθ(x)yi)xi

多个特征:

R e p e a t : \text Repeat: Repeat:
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i )    \theta_j := \theta_j - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} \; θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i) for j := 0...n \text{for j := 0...n}\newline for j := 0...n

我们选择好合适的学习速率,比如0.01/0.03/0.1,可以根据之前训练的结果来修改学习速率。

关于特征缩放:
一般来说把特征的大小控制在[-0.5,0.5]或者[-1,1],一般来说用:

x i = x i − μ i s i x_i = \frac{x_i-\mu_i}{s_i} xi=sixiμi

这里 μ i \mu_i μi是均值, s i s_i si是最大值与最小值的差。

关于如何判断收敛:
一般的,认为两次迭代的代价函数的差小于 1 0 − 3 10^ {-3} 103,就认为代价函数收敛了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值