版权说明:浙江财经大学专业实践深度学习-奇峰##波士顿房价预测目录实现单变量线性回归
** 详见示例:单变量线性回归.ipynb **
实现多元线性回归
** 在上一节中,我们使用单变量线性回归构建了第一个完整模型。在本节中,我们将构建一个多元线性模型来实现对多维数据的回归。此外,我们将描述如何使用内置的可视化工具分析训练过程。 **
加载数据
** 导入相关库**
%matplotlib notebook
import matplotlib.pyplot as plt
import tensorflow as tf
import tensorflow.contrib.learn as skflow
from sklearn.utils import shuffle
import numpy as np
import pandas as pd
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
print(tf.__version__)
print(tf.test.is_gpu_available())
1.12.0
False
**数据集简介**
此数据集包含与波士顿房价相关的几个因素:
** CRIM **:城镇人均犯罪率
** ZN **:超过 25,000 平方英尺的住宅用地比例。
** INDUS ** : 城市非零售用地比例
** CHAS **:河流空变量(如果边界是河流,则为 1;否则,0)
** NOX **:一氧化氮浓度
** RM **:住宅的平均房间数
**AGE **:1940 年之前建造的自有住房比例
** DIS **:波士顿到中心区的加权距离为 5
** RAD **:辐射高速公路邻近指数
** 税 **:每 10,000 美元的全部财产税率
** **:城市师生比例
** LSTAT **:人口的低地位比率
** MEDV **:平均房价,以千美元为单位
** 数据集以 CSV 格式存储,可由库读取和格式化**
**库**可以帮助我们快速阅读常规大小的数据文件
可以读取 CVS 文件、文本文件、MS Excel、SQL 数据库和 HDF5 格式文件用于科学目的
自动转换为 Numpy 多维数组
** 通过导入数据**
df = pd.read_csv("data/boston.csv", header=0)
print (df.describe())
CRIM ZN INDUS CHAS NOX RM
count 506.000000 506.000000 506.000000 506.000000 506.000000 506.000000
mean 3.613524 11.363636 11.136779 0.069170 0.554695 6.284634
std 8.601545 23.322453 6.860353 0.253994 0.115878 0.702617
min 0.006320 0.000000 0.460000 0.000000 0.385000 3.561000
25% 0.082045 0.000000 5.190000 0.000000 0.449000 5.885500
50% 0.256510 0.000000 9.690000 0.000000 0.538000 6.208500
75% 3.677082 12.500000 18.100000 0.000000 0.624000 6.623500
max 88.976200 100.000000 27.740000 1.000000 0.871000 8.780000
AGE DIS RAD TAX PTRATIO LSTAT
count 506.000000 506.000000 506.000000 506.000000 506.000000 506.000000
mean 68.574901 3.795043 9.549407 408.237154 18.455534 12.653063
std 28.148861 2.105710 8.707259 168.537116 2.164946 7.141062
min 2.900000 1.129600 1.000000 187.000000 12.600000 1.730000
25% 45.025000 2.100175 4.000000 279.000000 17.400000 6.950000
50% 77.500000 3.207450 5.000000 330.000000 19.050000 11.360000
75% 94.075000 5.188425 24.000000 666.000000 20.200000 16.955000
max 100.000000 12.126500 24.000000 711.000000 22.000000 37.970000
MEDV
count 506.000000
mean 22.532806
std 9.197104
min 5.000000
25% 17.025000
50% 21.200000
75% 25.000000
max 50.000000
** 加载此示例所需数据**
df = np.array(df)
for i in range(12):
df[:,i] = (df[:,i]-df[:,i].min())/(df[:,i].max()-df[:,i].min())
#x_data = df[['CRIM', 'DIS', 'LSTAT']].values.astype(float) #选取其中3个比较重要的影响因素
x_data = df[:,:12]
#y_data = df['MEDV'].values.astype(float) #获取y
y_data = df[:,12]
构建模型
** 定义 (x) 和 (y) 的占位符 **
x = tf.placeholder(tf.float32, [None,12], name = "x") # 3个影响因素
y = tf.placeholder(tf.float32, [None,1], name = "y")
** 创建变量**
with tf.name_scope("Model"):
w = tf.Variable(tf.random_normal([12,1], stddev=0.01), name="w0")
b = tf.Variable(1., name="b0")
def model(x, w, b):
return tf.matmul(x, w) + b
pred= model(x, w, b)
可以看到**b0和w0在命名空间Model下**
**补充介绍-命名空间**
节点数以千计,在可视化过程中很难一次全部显示出来,所以可以用它来划分变量的范围,在可视化中,这代表了计算图中的一个层次。
@ >
训练模型
**设置训练参数**
train_epochs = 500 # 迭代次数
learning_rate = 0.01 #学习率
** 定义均方损失函数**
p>
with tf.name_scope("LossFunction"):
loss_function = tf.reduce_mean(tf.pow(y-pred, 2)) #均方误差MSE
同样,我们可以查看命名空间下的操作(op),包括:mean、pow和sub(减法),这和我们定义的=tf.(tf.pow(y-pred, 2))。
**选择优化器**
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss_function)
暂无评论内容