多元线性回归问题(Tensorflow 求解)
多元线性回归问题求解使用的数据集是经典的boston房价数据。一共506个数据,后面56个数据我将其划了出来作为测试集。比较的简单,主要是学习步骤与算法。
该数据集每一个样本包括12个特征变量和该地区的平均房价。
import tensorflow as tf import matplotlib.pyplot as plt import numpy as np import pandas as pd from sklearn.utils import shuffle # 读取数据文件 df=pd.read_csv("data/boston.csv",header=0) # 显示数据摘要描述信息 # print(df.describe()) # 获取df的值 df=df.values # 将df转化为np的数组格式 df=np.array(df) # 对特征数据【0到11】列做(0-1)归一化 for i in range(12): df[:,i]=(df[:,i]-df[:,i].min()/df[:,i].max()-df[:,i].min()) # x_data为前12列特征数据 x_data=df[:,:12] # y_data为最后一列标签数据 y_data=df[:,12] # 模型定义 # 定义占位符,None表示行的数量未知 x=tf.placeholder(tf.float32,[None,12]) #12个特征数据 y=tf.placeholder(tf.float32,[None,1]) #1个标签数据 # 定义一个命名空间 with tf.name_scope("Model"): # w初始值为shape=(12,1)的随机数 w=tf.Variable(tf.random_normal([12,1],stddev=0.01)) # b初始值为1.0 b=tf.Variable(1.0) # w和x矩阵相乘,用matmul,不能用mutiply或* def model(x,w,b): return tf.matmul(x,w)+b # 预测计算操作,前向计算结点 pred=model(x,w,b) # 模型训练 train_epochs=2 #迭代轮次 learning_rate=0.01 #学习率 # 定义均方差损失函数 with tf.name_scope("LossFunction"): loss_function=tf.reduce_mean(tf.pow(y-pred,2)) #均方误差 # 创建优化器 optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function) # 声明会话 sess=tf.Session() init=tf.global_variables_initializer() sess.run(init) # 迭代训练 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) #Feed数据必须和Placeholder的shape一致 _,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys}) loss_sum=loss_sum+loss # 打乱数据顺序 x_data,y_data=shuffle(x_data,y_data) b0=b.eval(session=sess) w0=w.eval(session=sess) loss_average=loss_sum/len(y_data) print("epoch=",epoch+1,"loss=",loss_average,"b=",b0,"w=",w0) # 导入测试集 # 通过pandas读取数据文件 df_test = pd.read_csv("D:\\boston1.csv", header=0) # 显示数据摘要描述信息 print(df_test.describe()) # 获得df的值 df_test=df_test.values # 将df转化为np的数组格式 df_test=np.array(df_test) # x_data是前面12列的特征数据 x_data_test=df[:,:12] # y是最后1列标签数据 y_data_test=df_test[:,12] print(y_data_test,y_data_test.shape) # 预测模型 # 选取测试集的第36个数据测试,也可以选择其他的。 n=36 x_data_test=x_data_test[36].reshape(1,12) predict=sess.run(pred,feed_dict={x:x_data_test}) print("预测值:%f"%predict) target=int(y_data_test[n]) print("标签值:%d"%target)
在迭代训练的输出有问题输出只有几个有效数据,剩下的都是nan,改变超参数学习率有效数据增多,望给出修改意见
相关推荐
haidaoxianzi 2020-04-18
81570790 2020-04-16
攻城师 2013-05-14
haohong 2020-01-17
JM 2019-12-22
cherry0 2019-12-13
拭血 2019-11-17
hnyzyty 2019-11-04
zyhui 2019-09-08
wcssdu 2017-11-01
jiedinghui 2018-04-03
zZoOoOJaVa 2018-02-19
MayMatrix 2015-01-09
hualala 2019-07-01
LiteHeaven 2019-06-30
mjbaishiyun 2019-06-30