tensorflow2一元线性回归(根据父母身高预测孩子身高)

需要掌握

高尔顿与回归分析的起源

概述

线性回归是

线性公式:f(x)=ax+b

预测目标

预测函数f(x)与真实值之间的整体误差最小

为了让误差最小,就需要求解最合理的a和b

损失函数

使用 均方误差 作为损失函数

https://www.malaoshi.top/show_1EF3qTvZH2yB.html

优化

为了找到合适的a和b,让均方误差尽可能的小,需要使用梯度下降算法

https://www.malaoshi.top/show_1EF44cFgc3QB.html

tf.keras实现线性回归

生成数据

参见 根据高尔顿的父母与孩子身高规律生成测试数据

import numpy as np
import matplotlib.pyplot as plt
# 记录的总数
count=1000
# 父母平均身高
parent_height=np.linspace(1.65,1.85,count)
# 根据高尔顿的规律,生成孩子的身高
y= 0.8567+0.516*parent_height
# 以上面孩子的身高为基础,生成正态分布的随机身高
son_height=np.random.normal(loc=y, scale=0.03, size=count)
# print(son_height)
# 画成图像,便于理解
plt.plot(parent_height,y,color='red')
plt.scatter(parent_height,son_height)
plt.show()

实现线性回归

import tensorflow as tf


# 使用顺序模型
model=tf.keras.Sequential()
# 添加Dense层,该层实现y=wx+b
model.add(tf.keras.layers.Dense(1,input_shape=(1,)))
# 显示摘要信息
model.summary()
# 指定梯度下降,损失函数是均方误差
model.compile(optimizer='adam',loss='mse')
# 
history=model.fit(parent_height,son_height,epochs=500)
# 打印预测的w和b的值,观察与真实的w和b的值
w,b=model.layers[0].get_weights()
print('w:',w,',   b=',b)

# 预测
model.predict(parent_height)

原文出处:/show_1EF3oteiMAoW.html