Tensorflow实现多元线性回归

TensorFlow实现多元线性回归

在实现简单线性回归的基础上,可通过在权重和占位符的声明中稍作修改来对相同的数据进行多元线性回归。
简单线性回归和多元线性回归的主要不同在于权重,且系数的数量始终等于输入特征的数量。
这里是波士顿房价数据集的多重线性回归的代码,使用 3 个输入特征。由于每个特征具有不同的值范围,归一化变得至关重要。

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt #绘图
 
#为了使训练有效,输入应该被归一化,所以定义一个函数来归一化输入数据.
def normalize(X)
 mean=np.mean(X)#计算全局平均值
 std=np.std(X) #计算全局标准差
 X=(X-mean)/std#标准化:对原始数据进行变换到均值为0,标准差为1范围内
 return X
 
#这里添加一个额外的固定输入值将权重和偏置结合起来。(最好写几个矩阵看一下每行加一然后转置)
def append_bias_reshape(festures,lables):
 m=features.shape[0] #获取feature的行数
 n=features.sahpe[1] #获取feature的列数
 x=np.reshape(np.c_[np.ones(m),features],[m,n+1])#重新组合成新的行列数目
 y=np.reshape(lables,[m,1])#重新组合成新的行列数目
 return x,y
 
#注意到X_train包含所需要的特征,可以在这里对数据进行归一化处理,也可以添加偏置并对数据重构:
boston=tf.contrib.learn.datasets.load_dataset('boston')
X_train,Y_train=boston.data,boston.target #全部数据
X_train=normalize(X_train)
X_train,Y_train=append_bias_reshape(X_train,Y_train)
m=len(X_train)#返回列表元素的个数
n=3+1
 
#为训练数据声明 TensorFlow 占位符。观测占位符 X 的形状变化
X=tf.placeholder(tf.float32,name='X',shape=[m,n])
Y=tf.placeholder(tf.float32,name='Y')
 
#通过随机数初始化权重:
w=tf.Variable(tf.random_normal([n,1]))
 
#定义要用于预测的线性回归模型。现在需要矩阵乘法来完成这个任务:
Y_hat=tf.matmul(X,w)
 
#为了更好地求微分,定义损失函数
loss=tf.reduce_mean(tf.square(Y-Y_hat,name='loss'))
 
#选择正确的优化器:
tf.train.GredientDescentOptimizer(learing_rate=0.01).minimize(loss)
 
#初始化操作符:
init_op=tf.globle_variables_initializer()
total=[]
 
#计算图
with tf.Session() as sess:
 sess.run(init_op)
 writer=tf.summary.FileWriter('graphs',sess.graph)
 for i in range(100):
   total_loss=0
   for x,y in zip(X_Train,Y_train) 
     _,l=sess.run([optimizer,loss],feed_dict={X:X_train,Y=Y_train}) 
     total_loss+=l #total_loss为总的loss值
     total.append(total_loss/len) #len为一个epoch的总的迭代次数
     print('Epoch{0}:Loss{1}'.format(i,total_loss/len))  
writer.close()
b_value,w_value=sess.run([b,w])
 
#绘制损失函数
plt.plot(total)
plt.show()

posted @ 2022-04-11 13:07  Gazikel  阅读(112)  评论(0编辑  收藏  举报