李宏毅机器学习-task2

本文已参与【新人创作礼】活动,一起开启掘金创作之路。

回归

1、回归的定义

回归分析是指一种预测性的建模技术,主要是研究自变量X和因变量Y的关系。通常使用线/曲线来拟合数据点,然后研究如何使曲线到数据点的距离差异最小。Regression 就是找到一个函数 function ,通过输入特征 x,输出一个数值 Scalar(标量)。

回归一词指的是,我们根据之前的数据预测出一个准确的输出值。

1.1 回归应用的例子

这里李宏毅老师举了几个例子如下:

  • 股市预测(Stock market forecast)

    • 输入:过去10年股票的变动、新闻咨询、公司并购咨询等
    • 输出:预测股市明天的平均值
  • 自动驾驶(Self-driving Car)

    • 输入:无人车上的各个sensor的数据,例如路况、测出的车距等
    • 输出:方向盘的角度
  • 商品推荐(Recommendation)

    • 输入:商品A的特性,商品B的特性
    • 输出:购买商品B的可能性
  • Pokemon精灵攻击力预测(Combat Power of a pokemon):

    • 输入:进化前的CP值、物种(Bulbasaur)、血量(HP)、重量(Weight)、高度(Height)
    • 输出:进化后的CP值

2、建立回归模型的步骤

  • step1:模型假设,选择模型框架(线性模型)
  • step2:模型评估,如何判断众多模型的好坏(损失函数)
  • step3:模型优化,如何筛选最优的模型(梯度下降)

step1:模型的假设-线性模型

线性回归的一般步骤

假设目标值(因变量)与特征值(自变量)之间线性相关(即满足一个多元一次方程,如:f(x)=w1x1+…+wnxn+b.)。

image.png 上面讲述了一元线性模型,在实际应用中,输入特征肯定不止一个。例如宝可梦CP值预测这个例子中,进化前的CP值、物种(Bulbasaur)、血量(HP)、重量(Weight)、高度(Height)等,特征会有很多。

image.png

step2:模型评估-损失函数

损失函数的作用:损失函数是用于衡量模型预测值与真实值之间差距的函数,损失函数的值越小越好。
复制代码

构建损失函数。 最后通过令损失函数最小来确定参数。(最关键的一步) 比如以欧氏距离加和作为量化预测结果和真实结果的误差的一个函数。即为损失函数

在回归问题中,我们一般采用的损失函数为平方损失函数: 平方损失函数用于测量机器学习模型的输出与实际结果之间的距离,光滑函数,能够使用梯度下降法优化。然而当预测值距离真是只越远时,平方损失函数的惩罚力度越大,因此对异常点比较敏感。

( y ^ n f ( x c p n ) ) 2 (\hat{y} ^n-f(x_{cp}^{n} ))^2

可以通过多种方法对损失函数进行求解。

step3:最佳模型-梯度下降

梯度下降(gradient descent) 在机器学习中应用十分的广泛,不论是在线性回归还是Logistic(逻辑)回归中,它的主要目的是通过迭代找到目标函数的最小值,或者收敛到最小值。

梯度下降数学表达式:

新的参数 = 旧的参数 学习率 X 变化率 新的参数=旧的参数-学习率X变化率
学习率: α ;变化率: g 学习率:\alpha ; 变化率:g
A n e w = A o l d α g A_{new} = A_{old} - \alpha * g

梯度前加一个负号,就意味着朝着梯度相反的方向前进!梯度的方向实际就是函数在此点上升最快的方向!而我们需要朝着下降最快的方向走,自然就是负的梯度的方向,所以此处需要加上负号;那么如果时上坡,也就是梯度上升算法,当然就不需要添加负号了。

我们已经基本了解了梯度下降算法的计算过程,那么我们就来看几个梯度下降算法的小实例,首先从单变量的函数开始,然后介绍多变量的函数。

单变量函数的梯度下降

我们假设有一个单变量的函数

J θ = θ 2 J(\theta ) = \theta ^{2}

函数的微分,直接求导就可以得到

J θ = 2 θ {J}'(\theta )=2\theta

初始化,也就是起点,起点可以随意的设置,这里设置为1

θ 0 = 1 \theta ^{0} =1

学习率也可以随意的设置,这里设置为0.4

α = 0.4 α = 0.4

根据梯度下降的计算公式

A n e w = A o l d α g A_{new} = A_{old} - \alpha * g

我们开始进行梯度下降的迭代计算过程:

θ 0 = 1 \theta ^{0}=1
θ 1 = θ 0 α J θ 0 = 1 0.4 2 = 0.2 \theta ^{1}=\theta ^{0}-\alpha*{J}'(\theta ^{0})= 1-0.4*2=0.2
θ 2 = θ 1 α J θ 1 = 0.2 0.4 0.4 = 0.04 \theta ^{2}=\theta ^{1}-\alpha*{J}'(\theta ^{1})=0.2-0.4*0.4=0.04
θ 3 = 0.008 \theta ^{3}=0.008
θ 4 = 0.0016 \theta ^{4}=0.0016

如图,经过四次的运算,也就是走了四步,基本就抵达了函数的最低点,也就是山底

image.png

多变量函数的梯度下降

我们假设有一个目标函数

J ( Θ ) = θ 1 2 + θ 2 2 J(\Theta ) = \theta_{1}^{2}+\theta_{2}^{2}

现在要通过梯度下降法计算这个函数的最小值。我们通过观察就能发现最小值其实就是 (0,0)点。但是接下来,我们会从梯度下降算法开始一步步计算到这个最小值!
我们假设初始的起点为:

Θ 0 = 1 3 \Theta^{0} =(1,3)

初始的学习率为:

α = 0.1 \alpha =0.1

函数的梯度为:

J Θ = < 2 θ 1 , 2 θ 2 > \bigtriangledown J(\Theta )= <2\theta_ {1},2\theta_ {2} >

进行多次迭代计算:

Θ 0 = 1 3 \Theta^{0} =(1,3)

Θ 1 = Θ 0 α J Θ = 1 3 0.1 2 6 = 0.8 2.4 \Theta^{1} =\Theta^{0} - \alpha *\bigtriangledown J(\Theta )=(1,3)-0.1*(2,6)=(0.8,2.4)

Θ 2 = ( 0.8 , 2.4 ) 0.1 ( 1.6 , 4.8 ) = ( 0.64 , 1.92 ) \Theta^{2} =(0.8,2.4)-0.1*(1.6,4.8)=(0.64,1.92)

Θ 3 = ( 0.5124 , 1.536 ) \Theta^{3}=(0.5124,1.536)

Θ 4 = ( 0.4096 , 1.228800000000001 ) \Theta^{4}=(0.4096,1.228800000000001)

. . . \begin{matrix} \\. \\. \\. \end{matrix}

Θ 50 = ( 1.1141798154164342 e 5 , 3.42539442494306 e 5 ) \Theta^{50}=(1.1141798154164342e^{-5},3.42539442494306e^{-5})

. . . \begin{matrix} \\. \\. \\. \end{matrix}

Θ 100 = ( 1.6296287810675902 e 10 , 4.8888886343202771 e 10 ) \Theta^{100}=(1.6296287810675902e^{-10},4.8888886343202771e^{-10})

我们发现,已经基本靠近函数的最小值点

image.png

3、如何验证训练好的模型的好坏

使用训练集和测试集的平均误差来验证模型的好坏 我们使用将10组原始数据,训练集求得平均误差为31.9,如图所示:

image.png 然后再使用10组Pokemons测试模型,测试集求得平均误差为35.0 如图所示:

image.png

4、过拟合问题

我们在使用回归模型过程中可能会不自觉采用的一些错误方式,从而导致模型的过拟合。 在模型上,我们再可以进一部优化,使用更高次方的模型,如图所示

  • 训练集平均误差【15.4】【15.3】【14.9】【12.8】
  • 测试集平均误差【18.4】【18.1】【28.8】【232.1】

image.png

image.png

image.png 在训练集上面表现更为优秀的模型,为什么在测试集上效果反而变差了?这就是模型在训练集上过拟合的问题。

如图所示,每一个模型结果都是一个集合,5次模型包 \supseteq 4次模型 \supseteq 3次模型所以在4次模型里面找到的最佳模型,肯定不会比5次模型里面找到更差

image.png 将错误率结果图形化展示,发现3次方以上的模型,已经出现了过拟合的现象:

image.png

5、如何优化过拟合现象

  • 方法1:一种比较有效的方法是组合或提出相关性较高的自变量。例如在多因子模型中将相关性较高的多个估值类因子合成一个大类。就比如宝可梦CP值的预测的时候,我们把初始CP值和宝可梦的种类这两个input合并到一个线性模型中。

image.png

image.png

image.png

  • 方法2:我们可以希望模型更强大表现更好,我们可以找更多参数(input)也加入模型中;例如宝可梦CP值预测的model在最开始我们有很多特征,图形化分析特征,将血量(HP)、重量(Weight)、高度(Height)也加入到模型中

image.png

image.png 但是这里存在一个问题,那就是如果我们加入了更多的特征,但是我们data数据量没有明显的增加的话,依旧会导致overfitting过拟合。

  • 方法3:我们可以加入正则表达式进行正则化

更多特征,但是权重 w 可能会使某些特征权值过高,仍旧导致overfitting,所以加入正则化

image.png

  • w 越小,表示 function 较平滑的,function输出值与输入值相差不大
  • 在很多应用场景中,并不是 w 越小模型越平滑越好,但是经验值告诉我们 w 越小大部分情况下都是好的。
  • b 的值接近于0 ,对曲线平滑是没有影响

image.png

课后总结

回归可以大致分为两大类,线性回归和逻辑回归;但是目前只介绍了线性回归,后边会讲到逻辑回归的问题。线性回归的一般步骤

  1. 假设目标值(因变量)与特征值(自变量)之间线性相关(即满足一个多元一次方程,如:f(x)=w1x1+…+wnxn+b.)。
  2. 然后构建损失函数。
  3. 最后通过令损失函数最小来确定参数。(最关键的一步)

在寻找我们的最佳损失函数的时候我们最常见也是最好用的方法就是我们梯度下降法,优点是梯度下降法是通用的,包括更为复杂的逻辑回归算法中也可以使用,但是同样也有一些局限性,对于较小的数据量来说它的速度并没有优势。

猜你喜欢

转载自juejin.im/post/7109027610339835934