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

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

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

目录

1.准备数据

2.构建模型

3.训练模型

4.结果可视化

5.利用模型进行预测


1.准备数据

单变量的线性方程可以表示为:

                                                       y=w*x+b

生成人工数据集,随机生成一个近似采样随机分布,使得W=2.0,b=1,并加入一个振幅为0.4的噪声。

#在Jupter中,使用matplotlib显示图像需要设置为inline
%matplotlib inline

import tensorflow as tf #载入库函数 tensorflow 
import numpy as #npnumpy 
import matplotlib.pyplot as plt   #matplotlib.pyplot

#设置随机数种子
np.random.seed(5)

#直接采用np生成等差数列的方法,生成100个(-1,1)点
x_data=np.linspace(-1,1,100)

#y=2x+1+噪声
y_data=2*x_data+1.0+np.random.randn(*x_data.shape)*0.4

#显示散点
plt.scatter(x_data,y_data)
#显示直线
plt.plot(x_data,2*x_data+1.0,color='red',linewidth=3)

 

2.构建模型

#定义训练数据的占位符,x为特征值(变量),y是标签值(函数值)
tf.compat.v1.disable_eager_execution()#用tf.compat.v1.来兼容tensorflow版本1的方法。
x=tf.compat.v1.placeholder("float",name="x")
y=tf.compat.v1.placeholder("float",name="y")
#定义模型函数
def model(x,w,b):
    return tf.multiply(x,w)+b

#构建线性函数的斜率和截距,都为变量,tf.Variable为变量声明函数
w=tf.Variable(1.0,name="w0")
b=tf.Variable(0.0,name="b0")

#预测值,向前计算
pred=model(x,w,b)

3.训练模型

#设置训练参数:迭代次数、学习率
train_epochs=10
learning_rate=0.05

#采用均方差为损失函数
loss_function=tf.reduce_mean(tf.square(y-pred))
#定义优化器Optimizer
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)

#开始学习
for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
        b0temp=b.eval(session=sess)
        w0temp=w.eval(session=sess)
        plt.plot(x_data,w0temp*x_data+b0temp)
print("w:",sess.run(w))
print("b:",sess.run(b))

输出结果:

从结果可以看出,随着迭代次数的增加,训练模型越接近y=2x+1。

4.结果可视化

plt.scatter(x_data,y_data,label='Original data')
plt.plot(x_data,x_data*sess.run(w)+sess.run(b),\
        label='Fitted line',color='r',linewidth=3)
plt.legend(loc=2)#通过参数loc指定图例的位置

5.利用模型进行预测

x_test=3.21

predict=sess.run(pred,feed_dict={x:x_test})
print("预测值:%f"%predict)
target=2*x_test+1
print("目标值:%f"%target)

输出结果:

预测值:7.405184
目标值:7.420000

python源代码

#在Jupter中,使用matplotlib显示图像需要设置为inline
%matplotlib inline

import tensorflow as tf #载入库函数 tensorflow 
import numpy as np#numpy 
import matplotlib.pyplot as plt   #matplotlib.pyplot

#设置随机数种子
np.random.seed(5)

#直接采用np生成等差数列的方法,生成100个(-1,1)点
x_data=np.linspace(-1,1,100)

#y=2x+1+噪声
y_data=2*x_data+1.0+np.random.randn(*x_data.shape)*0.4

plt.scatter(x_data,y_data)
plt.plot(x_data,2*x_data+1.0,color='red',linewidth=3)

#定义训练数据的占位符,x为特征值(变量),y是标签值(函数值)
tf.compat.v1.disable_eager_execution()#用tf.compat.v1.来兼容tensorflow版本1的方法。
x=tf.compat.v1.placeholder("float",name="x")
y=tf.compat.v1.placeholder("float",name="y")
#定义模型函数
def model(x,w,b):
    return tf.multiply(x,w)+b

#构建线性函数的斜率和截距,都为变量,tf.Variable为变量声明函数
w=tf.Variable(1.0,name="w0")
b=tf.Variable(0.0,name="b0")

#预测值,向前计算
pred=model(x,w,b)

#设置训练参数:迭代次数、学习率
train_epochs=10
learning_rate=0.05

#采用均方差为损失函数
loss_function=tf.reduce_mean(tf.square(y-pred))
#定义优化器Optimizer
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)

#开始学习
for epoch in range(train_epochs):
    for xs,ys in zip(x_data,y_data):
        _,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
        b0temp=b.eval(session=sess)
        w0temp=w.eval(session=sess)
        plt.plot(x_data,w0temp*x_data+b0temp)
print("w:",sess.run(w))
print("b:",sess.run(b))

plt.scatter(x_data,y_data,label='Original data')
plt.plot(x_data,x_data*sess.run(w)+sess.run(b),\
        label='Fitted line',color='r',linewidth=3)
plt.legend(loc=2)#通过参数loc指定图例的位置

x_test=3.21

predict=sess.run(pred,feed_dict={x:x_test})
print("预测值:%f"%predict)
target=2*x_test+1
print("目标值:%f"%target)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多元线性回归是指依据多个自变量来预测因变量的一种回归分析方法。在Python中,使用Tensorflow2.3.0可以很方便地实现多元线性回归预测。 以下是一个简单的示例代码: ```python import tensorflow as tf import numpy as np # 设置训练数据 x_train = np.array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.], [10., 11., 12.]]) y_train = np.array([[6.], [15.], [24.], [33.]]) # 定义模型 model = tf.keras.Sequential([ tf.keras.layers.Dense(units=1, input_shape=[3]) ]) # 编译模型 model.compile(optimizer=tf.keras.optimizers.Adam(0.1), loss='mean_squared_error') # 训练模型 model.fit(x_train, y_train, epochs=1000) # 使用模型进行预测 x_test = np.array([[2., 3., 4.]]) y_predict = model.predict(x_test) print(y_predict) ``` 在这个示例中,首先定义了训练数据x_train和y_train,其中x_train包含了4组3个自变量的数据,y_train包含了对应的4组因变量的数据。 接着定义了一个模型,使用Tensorflow中的Sequential模型,其中只有一个Dense层,它的输入维度为3(与自变量个数相同),输出维度为1(因变量个数)。 在模型编译时,使用了Adam优化器和均方误差作为损失函数。 接下来进行了1000次的训练,最后使用训练好的模型对一个新的测试数据进行预测,并打印出预测结果。 需要注意的是,在实际应用中,训练数据和测试数据的数量应该远远大于这个示例中的数量,同时还要考虑特征的选择和处理、模型的优化等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值