利用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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐