利用tensorflowflow解决多元线性回归问题
1.实例-波士顿问题为例
#利用tensorflow解决多元线性回归问题--波士顿房价
#导入需要的第三方库
%matplotlib inline
import tensorflow as tf
import numpy as np
import pandas as pd
import matplotlib.pyplot as ply
from sklearn.utils import shuffle
#读取数据并对数据进行预处理
z_data=pd.read_csv("data/boston.csv")
#将数据集转变为numpy的array数组格式,方便处理
z_data=np.array(z_data)
#对特征数据进行归一化处理(0,1),避免个别特征对预测结果影响过大
for i in range(12):
z_data[:,i]=(z_data[:,i]-z_data[:,i].min())/(z_data[:,i].max()-z_data[:,i].min())
#将特征与标签分离(即将输入与输出分离)
xdata=z_data[:,:12]
ydata=z_data[:,12]
#创建模型
#定义特征与标签的占位符
X=tf.placeholder(tf.float32,[None,12],name="X")
Y=tf.placeholder(tf.float32,[None,1],name="Y")
#定义一个命名空间,方便可视化
with tf.name_scope("m1"):
#定义变量w,b
W=tf.Variable(tf.random_normal([12,1]),name="W")
b=tf.Variable(0.0,name="b")
#定义模型函数
def model1(X,W,b):
return tf.matmul(X,W)+b
#定义预测值
pre=model1(X,W,b)
#创建会话
sess=tf.Session()
init=tf.global_variables_initializer()
sess.run(init)
#训练模型
#设置训练超参数与损失数组
train_num=60
learn_rate=0.01
loss_list=[]
#定义损失函数:MSE
loss_func=tf.reduce_mean(tf.pow((Y-pre),2))
#设置训练优化器
optimizer=tf.train.GradientDescentOptimizer(learn_rate).minimize(loss_func)
#迭代训练
for epoch in range(train_num):
loss_sum=0.0
for xs,ys in zip(xdata,ydata):
xs=xs.reshape(1,12)
ys=ys.reshape(1,1)
_,loss=sess.run([optimizer,loss_func],feed_dict={X:xs,Y:ys})
loss_sum=loss_sum+loss
loss_aver=loss_sum/len(ydata)
loss_list.append(loss_aver)
xdata,ydata=shuffle(xdata,ydata)
#损失曲线
ply.plot(loss_list)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200607115935851.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L29nZWlvag==,size_16,color_FFFFFF,t_70)
#利用训练好模型进行预测
n=np.random.randint(506)
#预测结果
xtest=xdata[n]
xtest=xtest.reshape(1,12)
p=sess.run(pre,feed_dict={X:xtest})
print("预测结果:%f"% p)
print("实际结果:%f"% ydata[n])
预测结果:16.796743
实际结果:17.400000