基于python的回归分析
利用python进行回归分析,首先要导入python的扩展程序库,包括numpy程序库、matplotlib.pyplot和tensorflow,因为下载的tensorflow版本较高,所以应当导入低版本的,同时要使用特定指令使得低版本的指令可以使用。在开始进行回归分析时,首先利用python生成按照公式y=0.1x+0.3y=0.1x+0.3y=0.1x+0.3进行随机偏移的100个点作为原始数
利用python进行回归分析,首先要导入python的扩展程序库,包括numpy程序库、matplotlib.pyplot和tensorflow,因为下载的tensorflow版本较高,所以应当导入低版本的,同时要使用特定指令使得低版本的指令可以使用。
在开始进行回归分析时,首先利用python生成按照公式
y = 0.1 x + 0.3 y=0.1x+0.3 y=0.1x+0.3
进行随机偏移的100个点作为原始数据进行回归分析,生成的数据点如图所示。
对上述数据点进行回归分析,首先按照公式
y = w x + b y=wx+b y=wx+b
定义参数w、b,并设定为处于区间[-1,1]的随机值,随后计算按照公式得出的预测值与真实值的误差,并使用梯度下降优化器对参数进行更新,其中步长为0.1,训练次数为100次,最终求得的拟合曲线为
y = 0.11182175 x + 0.30760804 y= 0.11182175 x+ 0.30760804 y=0.11182175x+0.30760804
误差为0.00095241575,拟合曲线和实际数值分布如图所示。
本程序的代码如下所示:
import numpy as np
import matplotlib.pyplot as plt #类似 MATLAB 中绘图函数的相关函数
import tensorflow.compat.v1 as tf #导入tensorflow,并且使用低版本
tf.compat.v1.disable_eager_execution() #确保Session中的run()函数可以正常运行
count=100
data=[]
for i in range(count):
x1=np.random.normal(0.00,0.55)
y1=x1*0.1+0.3+np.random.normal(0.00,0.03)
data.append([x1,y1])
x_data=[v[0] for v in data]
y_data=[v[1] for v in data]
plt.scatter(x_data,y_data,c='r')
plt.show()
w=tf.Variable(tf.random_uniform([1],-1.0,1.0),name='w')
b=tf.Variable(tf.zeros([1]),name='b')
y=w*x_data+b
loss=tf.reduce_mean(tf.square(y-y_data),name='loss')
train=tf.train.GradientDescentOptimizer(0.1).minimize(loss,name='train')
sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)
for step in range(100):
sess.run(train)
temp_1=sess.run(w)
temp_2=sess.run(b)
print("y=",temp_1[0],"x+",temp_2[0],",loss=",sess.run(loss))
plt.scatter(x_data,y_data,c='r')
plt.plot(x_data,sess.run(w)*x_data+sess.run(b))
plt.show()
注意:生成数据点的偏移量是随机的,即每次运行的数据点是不一样的,则每次运行求得的拟合曲线和误差值也是不完全一样的,但每次求得的拟合曲线和生成数据点公式的曲线相近。
参考内容: https://www.bilibili.com/video/BV1P4411f7hK?p=15
更多推荐
所有评论(0)