TensorFlow的keras实现线性回归(梯度下降法进行优化)

一、初步拟合

 首先看下数据集,是受教育程度与收入之间的关系,绘制出图可看出,近似于一个线性关系
在这里插入图片描述
在这里插入图片描述

 我们来使用 tf.keras 实现一个简单的线性回归
 单变量线性回归算法(比如,x代表学历,f(x)代表收入):f(x) = ax + b,我们使用f(x)这个函数来映射输入特征和输出值预测目标与损失函数
目标:
预测函数f(x)与真实值之间的整体误差最小,如何定义误差最小呢?

  • 损失函数:
    使用均方差作为作为成本函数
    也就是 预测值和真实值之间差的平方取均值
    成本函数与损失函数
    优化的目标(y代表实际的收入):
    找到合适的 a 和 b ,使得 (f(x) - y)²越小越好
    注意:现在求解的是参数 a 和 b

用代码拟合运算五千次后loss值减少到100左右,刚开始是3900

model.compile(optimizer='adam',
              loss='mse'
)
history = model.fit(x, y, epochs=5000)

在这里插入图片描述

完整代码如下

import tensorflow as tf
import pandas as pd
data = pd.read_csv('Income1.csv')
data
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')
plt.scatter(data.Education, data.Income)
x = data.Education
y = data.Income
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(1, input_shape=(1,)))
model.summary()
model.compile(optimizer='adam',
              loss='mse'
)
history = model.fit(x, y, epochs=5000)
model.predict(x)
model.predict(pd.Series([20]))

二、梯度下降法优化

梯度下降法是一种致力于找到函数极值点的算法。

 简单来说,梯度下降法就是在找一个局部最优解(因为我们只能找一直往上走,找到一个无论哪个方向都是下降的点,这个点可能只是一个小山峰但并不是山顶),想象一下一个人蒙着眼睛往山顶走,他该怎么知道哪边是山顶呢?他只能往朝上的地方前行,而他的步长就是学习率,如果步长太大,一不小心错过了整个山最高的地方,如果步长太小,寻找的速度又很慢。

前面介绍过,所谓“学习”便是改进模型参数,以便通过大
量训练步骤将损失最小化。有了这个概念,将梯度下降法应
用于寻找损失函数的极值点便构成了依据输入数据的模型学
习。

梯度的输出是一个由若干偏导数构成的向量,它的每个分量
对应于函数对输入向量的相应分量的偏导:
在这里插入图片描述
梯度的输出向量表明了在每个位置损失函数增长最快的方向,
可将它视为表示了在函数的每个位置向哪个方向移动函数值
可以增长。
在这里插入图片描述
沿着损失函数减小的方向移动,并再次计算梯度值,并重复
上述过程,直至梯度的模为0,将到达损失函数的极小值点。
这正是我们的目标
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Dlihctcefrep/article/details/115416897