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

1,811 阅读5分钟

本文收录在:blog.aistudyclub.com 公众号:人工智能研习社

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

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

1.线性回归简介

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

面积(㎡)价格(万元)
210460
141232
153315
85178
......

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

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

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

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

面积(㎡)卧室数量楼层房龄价格(万元)
2105145460
1413240232
1533230315
852136178

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

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

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

2.损失函数

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

J(θ0,θ1,θ1,,θn)=12mi=1m(h(x(i))y(i))2J(θ_0,θ_1,θ_1,……,θ_n)=\frac{1}{2m} \sum_{i=1}^m(h(x^{(i)})-y^{(i)})^2 (3)

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

3.梯度下降

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

reapeat{

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

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

4.总结

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