python sklearn 梯度下降法_探索Tensorflow2.2线性回归和梯度下降法

0f1f5442df7721a78b72f326f84d6f7b.png

本文阅读预计用时:15分钟

主要阐述如何运用Tensorflow2.2进行线性回归处理


这个专栏主要对64位mac上的Tensorflow2.2的使用进行探索。在本专栏的第一篇文章中,笔者列举了几个对于Tensorflow使用者而言比较清晰的学习网站,有兴趣的学习者可以去自行探索。不同角度学习Tensorflow的途径还有很多,笔者在此就不一一详述。

  • 引语

在本专栏的上篇文章中讲述了如何运用Tensorflow2对于多变量函数

进行求导,这个自动求导的意义就是为本篇中提到的对数据进行
线性回归(Linear Regression)处理打下了算法上的基础。
  • 深入

1.1 线性回归的概念

对连续型变量做预测叫回归,线性回归即找到一个从特征空间X到输出空间Y的最优的线性映射的函数。

1.2 线性回归的算法

换言之,我们对数据做线性回归处理的意义是为了找到函数

这里我们可以使用均方误差确定w和b。作为一种损失函数(Loss Function),均方误差是回归任务中最常用的性能度量。

因此,我们试图找到参数

让均方误差最小化,即

在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧式距离之和最小。求解w和b使上面公式最小化的过程,称为线性回归模型的最小二乘“参数估计”(parameter estimation)。为了得出达到

,我们用
Chain rule分别对w和b求导可得:

得出

即为w和b最优解,使得均方误差

最小化,得出线性拟合函数。

1.3 Tensorflow中的线性回归

我们希望通过对该数据集进行线性回归,即使用线性模型

来拟合数据,此处
是待求的参数。

对于多元函数

求局部极小值,我们运用梯度下降法对其进行自动演算,过程如下:
  1. 初始化自变量为
  2. 迭代进行下列步骤直到满足收敛条件:
  • 求函数
    关于自变量的梯度
  • 更新自变量:
    。这里
    是学习率(即梯度下降一次迈出的 “步子” 大小)

接下来我们考虑使用程序来实现梯度下降,求线性回归

的解

1.3.1 线性回归的运用

考虑一个实际问题,某城市在 2016 年 - 2020 年的房价如下表所示:

e45cbdd9a041f35cac66fd127583c08a.png
图1.某城市在 2016 年 - 2020 年间的房价

现在,我们希望通过对该数据进行线性回归,设对上述数据有线性拟合函数

首先,为了提升模型的收敛速度,我们对数据进行归一化(Normalization)处理

import 

接下来,我们使用梯度下降方法来求线性模型中两个参数

的值得出线性回归
的解
X = tf.constant(X)
y = tf.constant(y)

a = tf.Variable(initial_value=0.)
b = tf.Variable(initial_value=0.)
variables = [a, b]

num_epoch = 10000  
optimizer = tf.keras.optimizers.SGD(learning_rate=5e-4)        
# 定义随机梯度下降法中的优化器和学习率
for e in range(num_epoch):
    # 使用tf.GradientTape()记录损失函数的梯度信息
    with tf.GradientTape() as tape:
        y_pred = a * X + b
        loss = tf.reduce_sum(tf.square(y_pred - y))
    # TensorFlow自动计算损失函数关于自变量(模型参数)的梯度
    grads = tape.gradient(loss, variables)
    # TensorFlow自动根据梯度更新参数
    optimizer.apply_gradients(grads_and_vars=zip(grads, variables))

print(a, b)

使用梯度下降法反复迭代后,我们得到线性模型中两个参数

的值:
<tf.Variable 'Variable:0' shape=() dtype=float32, numpy=0.9324755> <tf.Variable 'Variable:0' shape=() dtype=float32, numpy=-0.102291904>

因此,

最后,我们使用matplotlib把归一化的数据集和得到的线性拟合函数绘制在图2中的坐标系里

ea35a0190fbb75066015b5088cf0a0c7.png
图2.对于房价的线性回归模型

通过对于某城市房价的变化进行线性回归,我们不仅可以了解某城市之前的房价变化,也可以根据这个趋势预测某城市未来的房价变化。

  • 结语

这篇主要对于对于Tensorflow的线性回归和梯度下降法进行了介绍,将最小二乘法从理论表达上转化到代码中的实现。

使用tape.gradient(ys, xs)自动计算梯度并使用optimizer.apply_gradients(grads_and_vars)自动更新模型参数是梯度下降法的两个重点,优化器可以帮助我们根据计算出的求导结果更新模型参数,从而最小化某个特定的损失函数。此外,我会在我的另外一个专栏里的下篇文章具体介绍损失函数,如果对损失函数有兴趣的同学欢迎关注我的另一个专栏。

  • 参考资料:

https://tf.wiki/zh_hans/basic/basic.html#zh-hans-automatic-derivation

PS:鄙人不才,欢迎各位大佬指正!如果觉得本篇本章对您有所帮助,欢迎关注、评论、赞!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值