手把手带你入门机器学习1——线性回归

机器学习已经越来越普及,渐渐的被应用到各行各业中。作为一个程序员,如何学习机器学习呢?在本系列文章中,我根据我学习的经验带大家了解一下机器学习的基础知识。

我原本是一名嵌入式开发工程师,2018年开始自学机器学习的知识,目前主要从事深度学习CV方向的工作。最初刚接触机器学习,我也是苦于如何入门。在搜索了很多资料后,找到了coursera上的Machine Learning课程,通过学习了完整的课程,最后掌握了机器学习的基础知识,为以后学习深度学习打下了基础。所以本系列文章,我将以Machine Learning课程和练习为基础,带大家了解什么是机器学习。今天我们先来了解一下线性回归。本篇文章是希望大家都能看懂,可以对线性回归有一个初步的了解,所以这里不会深入的做一些原理的推导。

1.线性回归简介

什么是线性回归呢?我们以房价的数据作为例子,来描述什么是线性回归。先看以下表格中的数据。

面积(㎡) 价格(万元)
210 460
141 232
153 315
85 178

观察上面的数据,同时结合日常生活的中的常识,我们可以得出一个结论,面积与价格之间存在的某种关系,但是目前这种关系是什么我们还不能确定,但我们可以先用公式表示它们的关系:

H = θ 0 + x θ 1 H=θ_0 + xθ_1 H=θ0+xθ1 (1)

其中H为价格,x为面积。那么如果我们确定了 θ 0 θ_0 θ0 θ 1 θ_1 θ1的值,就可以了确定了面积和价格之间的关系了。H和x都是表格中的数据是已知的,可以使用大量的数据来确定这个两个值,这样面积和价格之间就可以使用一个线性函数表示,那么确定这两个值的过程就称为线性回归。

我们也知道房价不仅仅和面积有关,还可能跟其他很多因素有关。观察下表,表中除了面积之外,又增加了几个其他特征。

面积(㎡) 卧室数量 楼层 房龄 价格(万元)
210 5 1 45 460
141 3 2 40 232
153 3 2 30 315
85 2 1 36 178

这时我们的公式1更新为以下公式:

H = θ 0 + x 1 θ 1 + x 2 θ 2 + … … + x n θ n H=θ_0+x_1θ_1+x_2θ_2+ ……+x_nθ_n H=θ0+x1θ1+x2θ2++xnθn (2)

如果 θ 0 θ_0 θ0 θ n θ_n θn的值初始化为随机值,那么通过公式2计算出的房价H与真实值一定会存在误差。如果调整参数 θ 0 θ_0 θ0 θ n θ_n θn的值使H的值尽量解决真实的价格,那么是不是能确定面积和价格之间的关系,从而可以根据面积来预测房屋的大致价格。

2.损失函数

既然使用公式2计算出房价H与真实值存在一定的误差,那么我们首先需要用一个公式来描述这个误差,这个公式就叫做损失函数,用J来表示。定义如下:

J = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J=\frac{1}{2m} \sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2 J=2m1i=1m(h(x(i))y(i))2 (3)

在上面公式3中, θ θ θ是需要求的未知变量,x与y是上面表格中的已知量,那么我们如何计算 θ θ θ呢,这里我们就会用到机器学习里常用的一种方法梯度下降法。

3.梯度下降

梯度下降通过不断的迭代去更新 θ \theta θ的值来降低损失函数的值,公式如下:

reapeat{

θ j : = θ j − α ∂ ∂ θ j J ( θ 0 , θ 1 , . . . , θ n ) \theta_j := \theta_j - \alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1,...,\theta_n) θj:=θjαθjJ(θ0,θ1,...,θn) (4)

}

公式4中 α \alpha α代表着学习率,一般是0.1、0.01等这样小于1的实数,是需要根据实际情况进行调整的。
θ j \theta_j θj代表着本次迭代需要更新的参数。 ∂ ∂ θ j J ( θ 0 , θ 1 , . . . , θ n ) \frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1,...,\theta_n) θjJ(θ0,θ1,...,θn)这部分是J对 θ j \theta_j θj的偏导,求出来的值是当前 θ j \theta_j θj的梯度值,是一个向量,所以是有方向的。它的方向就是变化率最快的方向,也是该方向的最大值。通俗点说就是求当前 θ j \theta_j θj值对误差做出的贡献。所以可以通过迭代的方式用 θ j \theta_j θj减去学习率乘以 θ j \theta_j θj对误差做出的贡献更新参数 θ j \theta_j θj的值。更新后的 θ j \theta_j θj计算出的损失值会比原来小。通过若干次迭代,损失函数就会收敛到一个比较小的值,就可以停止迭代,这个过程也可称为训练。注意,这里只是简述了一下梯度下降的过程,也就是训练过程,在实际中还需考虑很多问题,比如局部最优解,过拟合和欠拟合等,不过这些问题都会有解决办法,后面的文章会讲到。

我举个简单的梯度下降的例子帮助大家理解一下。假设有简化一点的损失函数如下:

J = θ 2 J=\theta^2 J=θ2 (5)

其实很容易可以看出这个是一个开口向上的抛物线,而且它只有一个最低点,也就是当 θ \theta θ为0时, J = 0 J=0 J=0

  • 首先假设 θ \theta θ的初始值为1。

    θ 0 = 1 \theta^0=1 θ0=1 得出 J = 1 J=1 J=1

  • 然后做一次梯度下降的迭代,这里我们选择学习率 α = 0.4 \alpha=0.4 α=0.4

    θ 1 = θ 0 − α ∂ ∂ θ 0 J \theta^1 = \theta^0 -\alpha\frac{\partial}{\partial\theta^0}J θ1=θ0αθ0J

    θ 1 = 1 − 0.4 × 2 θ 0 = 1 − 0.8 = 0.2 \theta^1=1-0.4\times2\theta^0=1-0.8=0.2 θ1=10.4×2θ0=10.8=0.2

    J = ( θ 1 ) 2 = 0.04 J=(\theta^1)^2 = 0.04 J=(θ1)2=0.04

  • 使用更新后的 θ 1 \theta^1 θ1的值继续迭代。

    θ 2 = θ 1 − α ∂ ∂ θ 1 J \theta^2 = \theta^1 -\alpha\frac{\partial}{\partial\theta^1}J θ2=θ1αθ1J

    θ 2 = 0.2 − 0.4 × 2 θ 1 = 0.2 − 0.4 × 0.4 = 0.04 \theta^2=0.2-0.4\times2\theta^1=0.2-0.4\times0.4=0.04 θ2=0.20.4×2θ1=0.20.4×0.4=0.04

    J = ( θ 2 ) 2 = 0.0016 J=(\theta^2)^2 = 0.0016 J=(θ2)2=0.0016


    θ 3 = θ 2 − α ∂ ∂ θ 2 J \theta^3 = \theta^2 -\alpha\frac{\partial}{\partial\theta^2}J θ3=θ2αθ2J

    θ 3 = 0.04 − 0.4 × 2 θ 2 = 0.04 − 0.4 × 0.08 = 0.008 \theta^3=0.04-0.4\times2\theta^2=0.04-0.4\times0.08=0.008 θ3=0.040.4×2θ2=0.040.4×0.08=0.008

    J = ( θ 3 ) 2 = 6.4 × 1 0 − 5 J=(\theta^3)^2=6.4\times10^{-5} J=(θ3)2=6.4×105


    θ 4 = θ 3 − α ∂ ∂ θ 3 J \theta^4 = \theta^3 -\alpha\frac{\partial}{\partial\theta^3}J θ4=θ3αθ3J

    θ 4 = 0.008 − 0.4 × 2 θ 3 = 0.008 − 0.4 × 0.016 = 0.0016 \theta^4=0.008-0.4\times2\theta^3=0.008-0.4\times0.016=0.0016 θ4=0.0080.4×2θ3=0.0080.4×0.016=0.0016

    J = ( θ 4 ) 2 = 2.56 × 1 0 − 6 J=(\theta^4)^2 = 2.56\times10^{-6} J=(θ4)2=2.56×106

可以看到在第四次迭代的时候我们的损失函数 J J J的值就已经很小了,如果继续迭代下去 J J J的值会趋近于0。这时我们可以停止训练,得到了一个合适的参数 θ = 0.0016 \theta=0.0016 θ=0.0016,梯度下降的过程大致如下图。

4.总结

我们从数据入手,简单描述了一下什么是线性回归。学习了一元线性回归的公式和多元线性回归公式。同时,利用线性回归的公式构造出一个损失函数的公式。损失函数是在训练过程中需要用到的,训练的前提是需要有大量的数据,这里以房价数据为例,我们可以通过梯度下降来计算 θ \theta θ参数,来描述房屋特征值与房价直接的关系,这样就完成了线性回归的过程。

猜你喜欢

转载自blog.csdn.net/txyugood/article/details/113249486