通过一元线性回归模型理解梯度下降法

关于线性回归相信各位都不会陌生,当我们有一组数据(譬如房价和面积),我们输入到excel,spss等软件,我们很快就会得到一个拟合函数:

但我们有没有去想过,这个函数是如何得到的? 如果数学底子还不错的同学应该知道,当维数不多的时候,是可以通过正规方程法求得的,但如果维数过多的话,像图像识别/自然语言处理等领域,正规方程法就没法满足需求了,这时候便需要梯度下降法来实现了。

梯度下降法

首先我们需要知道一个概念

  • 损失函数(loss function)

损失函数是用来测量你的预测值

与实际值之间的不一致程度,我们需要做的就是找到一组

使得

最小,这组

便叫做全局最优解

图1

我们需要定义一个损失函数,在线性回归问题中我们一般选择平方误差代价函数

我们的目标是

如果不好理解的话我们通过图形来理解:

图2

假设上图是我们的

,那我们需要找到的就是左边箭头指向的那个点,这个点对应的

便是我们找的全局最优解,当然对于其他模型可能会存在局部最优解,譬如右边箭头指向的点,但是对于线性模型,只会存在全局最优解,真正的图像模型如下图所示,是个碗状的,我们要做的是找到碗底,这样是不是很好理解了。

图3

那么如何到达最底呢,我们再看一张图。

图四

我们需要从绿点到达红点,我们需要确定的有两件事情

  • 朝哪个方向走;
  • 走多远。

第一个问题,我们需要回忆下高中的数学知识——导数,在二维空间里面,导数是能代表函数上升下降快慢及方向的,这个各位在脑子里面想一个就明白,函数上升,导数为正,上升越快,导数越大,下降反之。扩展到多维空间,便是偏导数(

)。 第二个问题,走多远或者说步长,这里便需要我们自己定义,在梯度下降法中叫做学习率

。 接下来放公式:

这边就不推导了,偏导数自己也快忘记的差不多了,直接放结果:

接下来迭代去更新

直至收敛就好了。

python实现

我们通过

生成一些随机点,注意

并不是我们的最优解:

# 以y= 2x+1为原型生成一个散点图
# 此时最优解并不是y = 2x+1
X0 = np.ones((100, 1))
X1 = np.random.random(100).reshape(100,1)
X = np.hstack((X0,X1))
y = np.zeros(100).reshape(100,1)
for i , x in enumerate(X1):
    val = x*2+1+random.uniform(-0.2,0.2)
    y[i] = val

plt.figure(figsize=(8,6))
plt.scatter(X1,y,color='g')
plt.plot(X1,X1*2+1,color='r',linewidth=2.5,linestyle='-')
plt.show()

out

图5

迭代部分:

# 梯度下降法求最优解
def gradientDescent(X,Y,times = 1000, alpha=0.01):
    '''
    alpha:学习率,默认0.01
    times:迭代次数,默认1000次
    '''
    m = len(y)
    theta = np.array([1,1]).reshape(2, 1)
    loss = {}
    for i in range(times):
        diff = np.dot(X,theta)- y
        cost = (diff**2).sum()/(2.0*m)
        loss[i] = cost
        theta = theta - alpha*(np.dot(np.transpose(X), diff)/m)
    plt.figure(figsize=(8,6))
    plt.scatter(loss.keys(),loss.values(),color='r')
    plt.show()
    return theta

theta = gradientDescent(X,Y)

默认设置的迭代1000次,学习率为0.01,最后结果如下:

  • 损失函数

loss function

= 1.03229637, 1.95156735

我不是图5?

最后

网上介绍梯度下降法的文章很多,但很多的都是一脸懵逼?的点进去,然后一脸懵逼?的退出来,相比于那些copycopy去的文章,我还是尽量的加入了自己的理解,还是希望能各位带来点帮助?????? 还有尼玛数学公式真难打❗️❗️❗️

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网大杂烩

支持向量机(SVM)

支持向量机(support vector machine)是一种分类算法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在...

8020
来自专栏机器学习、深度学习

车牌检测识别--Towards End-to-End Car License Plates Detection and Recognition with Deep Neural Networks

Towards End-to-End Car License Plates Detection and Recognition with Deep Neural...

51490
来自专栏AI科技大本营的专栏

深度学习系列:卷积神经网络结构变化——可变形卷积网络deformable convolutional

作者 | 大饼博士X 上一篇我们介绍了:深度学习方法(十二):卷积神经网络结构变化——Spatial Transformer Networks,STN创造性地...

481100
来自专栏marsggbo

DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week1深度学习的实用层面

更多笔记请火速前往 DeepLearning.ai学习笔记汇总 本周我们将学习如何配置训练/验证/测试集,如何分析方差&偏差,如何处理高偏差、高方差或者二者...

26150
来自专栏企鹅号快讯

基于tensorflow的手写数字识别

一、前言 本文主要介绍了tensorflow手写数字识别相关的理论,包括卷积,池化,全连接,梯度下降法。 二、手写数字识别相关理论 2.1 手写数字识别运算方法...

29570
来自专栏磐创AI技术团队的专栏

Ian Goodfellow等提出自注意力GAN,ImageNet图像合成获最优结果!

12430
来自专栏人工智能LeadAI

TensorFlow从0到1丨第4篇:第一个机器学习问题

上一篇机器人类学习的启示借鉴人类学习的模式,描绘了数据驱动的机器学习方法论:通过大量数据来确定模型,从而让模型具有预测价值。本篇提出第一个机器学习问题,进一步看...

41080
来自专栏目标检测和深度学习

李飞飞等提出新的迭代视觉推理框架,在ADE上实现8.4 %的绝对提升

译者 | 梁红丽 张蔚敏 编辑 | 明 明 出品 | AI科技大本营 【AI科技大本营导读】近日,李飞飞等提出了一种新的迭代视觉推理框架。该框架超越了目前缺乏推...

396110
来自专栏SIGAI学习与实践平台

理解Spatial Transformer Networks

随着深度学习的不断发展,卷积神经网络(CNN)作为计算机视觉领域的杀手锏,在几乎所有视觉相关任务中都展现出了超越传统机器学习算法甚至超越人类的能力。一系列CNN...

31220
来自专栏磐创AI技术团队的专栏

多核学习方法介绍

【磐创AI导读】:本文为SVM多核学习方法简介的续篇。想要学习更多的机器学习知识,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。SVM多核学习方法简介

12110

扫码关注云+社区

领取腾讯云代金券