一、根据波士顿房价信息进行预测,多元线性回归+特征数据归一化
#读取数据
%matplotlib notebook
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd #能快速读取常规大小的文件。Pandas能提供高性能、易用的数据结构和数据分析工具
from sklearn.utils import shuffle #随机打乱工具,将原有序列打乱,返回一个全新的顺序错乱的值
#读取数据文件
df = pd.read_csv("data/boston.csv",header=0)
#显示数据描述信息
# print(df.describe())
# print(df)
#数据准备
#获取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为最后1列标签数据
y_data = df[:,12]
#模型定义
#定义特征数据和标签数据的占位符
#shape中None表示行的数量未知,在实际训练时决定一次带入多少行样本,从一个样本的随机SDG到批量SDG都可以
x = tf.placeholder(tf.float32,[None,12],name = "X") #12个特征数据(12列)
y = tf.placeholder(tf.float32,[None,1],name = "Y") #1个标签数据(1列)
#定义模型函数
#定义了一个命名空间.
#命名空间name_scope,Tensoflow计算图模型中常有数以千计节点,在可视化过程中很难一下子全部展示出来/
#因此可用name_scope为变量划分范围,在可视化中,这表示在计算图中的一个层级
with tf.name_scope("Model"):
# w 初始化值为shape=(12,1)的随机数
w = tf.Variable(tf.random_normal([12,1],stddev=0.01),name="W")
# b 初始化值为1.0
b = tf.Variable(1.0,name="b")
# w和x是矩阵相乘,用matmul,不能用mutiply或者*
def model(x,w,b):
return tf.matmul(x,w) + b
#预测计算操作,前向计算节点
pred = model(x,w,b)
#模型训练
#设置训练超参数
#迭代轮次
train_epochs = 50
#学习率
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()
#启动会话
se