Tensorflow实现单变量线性回归

版权说明:浙江财经大学专业实践深度学习-奇峰##波士顿房价预测目录实现单变量线性回归

** 详见示例:单变量线性回归.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)

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片