Tensorflow实现线性回归

该文详细介绍了如何使用Tensorflow进行线性回归的实现,包括定义预测函数$y=wx+b$,损失函数(均方误差MSE),并通过梯度下降法优化权重w和偏置b。通过训练,展示了模型参数的变化以及与sklearn线性回归模型的对比。
摘要由CSDN通过智能技术生成

2.Tensorflow实现线性回归

实现一个算法一般分为三个步骤:

1.找到这个算法的预测函数,比如线性回归的预测函数形式为$y = wx+b$

2.找到这个算法的损失函数,比如线性回归的损失函数是mse最小二乘法

3.找到让损失函数最小时的系数$w$和$b$,一般采用梯度下降法

使用tensorflow实现算法的基本步骤:

1.使用tensorflow中的变量将算法的预测函数、损失函数定义出来

2.使用梯度下降法优化器求解损失函数最小时的系数

3.分批次的将数据传给优化器,找到最佳参数

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tensorflow as tf
from sklearn.linear_model import LinearRegression
#生成线性数据
x = np.linspace(0,10,20)+ np.random.randn(20)
y = np.linspace(0,10,20)+ np.random.randn(20)
#初始化w和b
w = tf.Variable(np.random.randn()*0.02)
b = tf.Variable(0.)
#定义预测函数
def linear_regression(x):
    return w * x + b
#定义损失函数
def mean_square_loss(y_pred,y_true):
    return tf.reduce_mean(tf.square((y_true - y_pred)))
#优化器
optimizer = tf.optimizers.SGD()
#定义优化过程
def run_optimizer():
    #梯度带
    with tf.GradientTape() as g:
        pred = linear_regression(x)
        loss = mean_square_loss(pred,y)
    #计算梯度
    gradients = g.gradient(loss,[w,b])
    #更新w,b
    optimizer.apply_gradients(zip(gradients,[w,b]))
#训练函数
for i in range(5000):
    run_optimizer()
    
    #展示结果
    if i %100 == 0:
        pred = linear_regression(x)
        loss = mean_square_loss(pred,y)
        print(f'step:{i},loss:{loss},w:{w.numpy()},b:{b.numpy()}')

结果:

step:0,loss:1.4280287027359009,w:0.8572379350662231,b:0.11684638261795044
step:100,loss:1.257596731185913,w:0.9460423588752747,b:-0.12140487134456635
step:200,loss:1.230806589126587,w:0.9695827960968018,b:-0.28233101963996887
step:300,loss:1.2193398475646973,w:0.9849836230278015,b:-0.3876136839389801
step:400,loss:1.2144322395324707,w:0.9950593113899231,b:-0.45649266242980957
step:500,loss:1.2123314142227173,w:1.0016510486602783,b:-0.5015550851821899
step:600,loss:1.2114322185516357,w:1.005963683128357,b:-0.5310364365577698
...
...
step:4500,loss:1.2107594013214111,w:1.0141221284866333,b:-0.5868095755577087
step:4600,loss:1.2107594013214111,w:1.0141221284866333,b:-0.5868095755577087
step:4700,loss:1.2107594013214111,w:1.0141221284866333,b:-0.5868095755577087
step:4800,loss:1.2107594013214111,w:1.0141221284866333,b:-0.5868095755577087
step:4900,loss:1.2107594013214111,w:1.0141221284866333,b:-0.5868095755577087

与sklearn线性回归对比:

linear_model = LinearRegression()
linear_model.fit(x.reshape(-1,1),y)
#绘制图像
plt.scatter(x,y)
x_test = np.linspace(0, 10, 20).reshape(-1, 1)
plt.plot(x_test,w.numpy() * x_test + b.numpy(),c = 'r',lw = 10,alpha = 0.5,label = 'tensorflow')
plt.plot(x_test,linear_model.coef_ * x_test + linear_model.intercept_,c = 'g',label = 'sklearn')
plt.grid(True)
plt.legend()

结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值