Python-Tensorflow2.3.0-多元线性回归预测(学习笔记)

该博客介绍了如何在Windows 10环境下,利用Anaconda3和TensorFlow2.3.0进行线性回归模型的训练。首先,从给定链接下载数据并进行预处理,包括数据归一化。接着,构建模型,定义特征和标签的占位符,并初始化权重和偏置。然后,通过梯度下降优化器设置损失函数并进行训练。在50次迭代中,损失函数逐渐收敛。最后,展示了一个随机样例的预测过程,验证了模型的预测能力。
摘要由CSDN通过智能技术生成

编译器环境:win10-Anaconda3-python3.6-tensorflow2.3.0

预测数据下载地址:https://download.csdn.net/download/weixin_41788456/12902246

Tensorflow进行算法设计与训练的核心步骤:

目录

1.准备数据

2.构建模型

3.模型训练

4.模型预测


1.准备数据

多变量线性方程可以表达为

                                              Y=x_{1}*w_{1}+x_{2}*w_{2}+...+x_{n}*w_{n}+b = \sum_{k=0}^{n}x_{k}*w_{k}+b

总共:506行*13列,其中506为样本数,前12列为样本特征,最后1列为样本标签

%matplotlib inline
import tensorflow as tf 
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.utils import shuffle
//读取数据
df=pd.read_csv("E:/data/boston.csv",header=0)

print(df)

#获取df的值
df=df.values

#把df转换为np的数组格式
df=np.array(df)
#数据归一化
for i in range(12):
    df[:,i]=df[:,i]/(df[:,i].max()-df[:,i].min())
x_data=df[:,0:12]
y_data=df[:,12]

2.构建模型

#定义特征数据和标签数据的占位符
tf.compat.v1.disable_eager_execution()
x=tf.compat.v1.placeholder(tf.float32,[None,12],name="X")#12个特征数据
y=tf.compat.v1.placeholder(tf.float32,[None,1],name="Y")#1个标签数据
print(x)

#定义一个命名空间
with tf.name_scope("model"):
    #初始化值为shape=(12,1)的随机数
    w=tf.Variable(tf.compat.v1.random_normal([12,1],stddev=0.01),name="W")
    #初始化值为1.0
    b=tf.Variable(1.0,name="b")
    #w和x矩阵相乘,用matmul,mutiply为数乘
    def model(x,w,b):
        return tf.matmul(x,w)+b
    #预测计算操作,前向计算节点
    pred=model(x,w,b)

3.模型训练

#迭代次数
train_epochs=50

#学习率
learning_rate=0.01

#定义损失函数
with tf.name_scope("loss_Function"):
    loss_function=tf.reduce_mean(tf.pow(y-pred,2))#均方差

#创建优化器
optimizer=tf.compat.v1.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

#声明会话
sess=tf.compat.v1.Session()
#定义初始化变量的操作
init=tf.compat.v1.global_variables_initializer()
#启动会话
sess.run(init)
loss_list=[]
#迭代训练
for epoch in range(train_epochs):
    loss_sum=0.0
    for xs,ys in zip(x_data,y_data):
        
        xs=xs.reshape(1,12)
        ys=ys.reshape(1,1)
        
        _,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})

        loss_sum=loss_sum+loss
    #打乱数据顺序
    xvalues,yvalues=shuffle(x_data,y_data)
    
    b0temp=b.eval(session=sess)
    w0temp=w.eval(session=sess)
    loss_average=loss_sum/len(y_data)
    loss_list.append(loss_average)
    print("epoch=",epoch+1,"loss=",loss_average,"b=",b0temp,"w",w0temp)

输出结果:

损失函数收敛图:

4.模型预测

n=np.random.randint(506)
print(n)
x_test=x_data[n]
x_test=x_test.reshape(1,12)
predict=sess.run(pred,feed_dict={x:x_test})
print("预测值:%f"%predict)
target=y_data[n]
print("目标值:%f"%target)

预测结果:

301
预测值:23.178604
目标值:22.000000

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值