1. 本节将针对波士顿房价数据集的房间数量(RM)采用简单一元线性回归,目标是预测在最后一列(MEDV)给出的房价。波士顿房价数据集可从http://lib.stat.cmu.edu/datasets/boston处获取。
  2. 在实现一元线性回归的基础上,可通过在权重和占位符的声明中稍作修改来对相同的数据进行多元线性回归。在多元线性回归的情况下,由于每个特征具有不同的值范围,归一化变得至关重要。这里是波士顿房价数据集的多重线性回归的代码,使用 13 个输入特征。

注意事项:代码实现注意:

  • 占位符X可特地申明shape=[m, n],也可以不申明。一般都是不申明的,例如Y就没有申明,后面的feed_dict依旧可以赋值,不会报错
  • 对于多元线性回归,即多项式,不用单独设置b,只设置w即可。w0=b,包含在w张量中,相对应的,需要向数据集X_train张量中额外在列初或列尾多加一列1(例如本例多加全为1的一列于第一列位置),因此可保证y=w0+w1*x1+w2*x2+....
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]))
X_train = np.reshape(np.c_[np.ones(m), X_train], [m, n + 1])

一元线性回归

本小节直接从TensorFlowcontrib 数据集加载数据。使用随机梯度下降优化器优化单个训练样本的系数。

# 针对波士顿房价数据集的房间数量(RM)采用简单线性回归,目标是预测在最后一列(MEDV)给出的房价。import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt# 1.在神经网络中,所有的输入都线性增加。为了使训练有效,输入应该被归一化,所以这里定义一个函数来归一化输入数据:
def normalize(X):# 实际这里是标准化,不是maxminscalemean = np.mean(X)std = np.std(X)X = (X - mean) / stdreturn X - mean# 2.现在使用 TensorFlow contrib 数据集加载波士顿房价数据集,并将其分解为 X_train 和 Y_train。可以对数据进行归一化处理:
boston = tf.contrib.learn.datasets.load_dataset('boston')
# boston includes boston.data and boston.target
# np.shape(boston.data)=(506, 13)   np.shape(boston.target)=(506,)
X_train, Y_train = boston.data[:, 5], boston.target
# X_train=normalize(X_train) #this step is optional here
n_samples = len(X_train)# 3.为训练数据声明 TensorFlow 占位符:
X = tf.placeholder(tf.float32, name='X')
Y = tf.placeholder(tf.float32, name='Y')
# 4.创建 TensorFlow 的权重和偏置变量且初始值为零
b = tf.Variable(0.0)
w = tf.Variable(0.0)
# 5.定义用于预测的线性回归模型
Y_hat = X * w + b
# 6.定义损失函数:
loss = tf.square(Y_hat - Y, name='loss')
# 7.选择梯度下降优化器:
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
# 8.声明初始化操作符
init_op = tf.global_variables_initializer()
#init_op = tf.initialize_all_variables()
total = []
# 9.现在,开始计算图,训练 100 次:
with tf.Session() as sess:sess.run(init_op)writer = tf.summary.FileWriter('Z:python_codeCBIANCHENG_relevant_codeGraphs', sess.graph)for i in range(100):total_loss = 0for x, y in zip(X_train, Y_train):_, l = sess.run([optimizer, loss], feed_dict={X: x, Y: y})total_loss += ltotal.append(total_loss / n_samples)print('epoch{0}:loss{1}'.format(i, total_loss / n_samples))writer.close()b_value, w_value = sess.run([b, w])# 10.查看解果
Y_pred = X_train * w_value + b_value
print('done')
plt.plot(X_train, Y_train, 'bo', label='real data')
plt.plot(X_train, Y_pred, 'r', label='predicted data')
plt.legend()
plt.show()
plt.plot(total)
plt.show()

解读分析

从下图中可以看到,简单线性回归器试图拟合给定数据集的线性线:

在下图中可以看到,随着模型不断学习数据,损失函数不断下降:

下图是简单线性回归器的 TensorBoard 图:

该图有两个名称范围节点 Variable 和 Variable_1,它们分别是表示偏置和权重的高级节点。以梯度命名的节点也是一个高级节点,展开节点,可以看到它需要 7 个输入并使用 GradientDescentOptimizer 计算梯度,对权重和偏置进行更新:

多元线性回归

代码实现注意:

  • 占位符X可特地申明shape=[m, n],也可以不申明。一般都是不申明的,例如Y就没有申明,后面的feed_dict依旧可以赋值,不会报错
X = tf.placeholder(tf.float32, name='X', shape=[m, n])
Y = tf.placeholder(tf.float32, name='Y')

  • 对于多元线性回归,即多项式,不用单独设置b,只设置w即可。w0=b,包含在w张量中,相对应的,需要向数据集X_train张量中额外在列初或列尾多加一列1(例如本例多加全为1的一列于第一列位置),因此可保证y=w0+w1*x1+w2*x2+....
w = tf.Variable(tf.random_normal([n, 1]))
X_train = np.reshape(np.c_[np.ones(m), X_train], [m, n + 1])

完整代码

# 在 TensorFlow 实现简单线性回归的基础上,可通过在权重和占位符的声明中稍作修改来对相同的数据进行多元线性回归。
# 在多元线性回归的情况下,由于每个特征具有不同的值范围,归一化变得至关重要。这里是波士顿房价数据集的多重线性回归的代码,使用 13 个输入特征
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) / stdreturn X# 添加一个额外的固定输入值将权重和偏置结合起来。为此定义函数 append_bias_reshape()。
def append_bias_reshape(features, labels):m = features.shape[0]  # features 的行数n = features.shape[1]  # features 的列数# 其实都不用reshape,np.c_函数返回了[m, n+1]的数组,再使用reshape只是为了确保x = np.reshape(np.c_[np.ones(m), features], [m, n + 1])y = np.reshape(labels, [m, 1])return x, y# 使用 TensorFlow contrib 数据集加载波士顿房价数据集,并将其划分为 X_train 和 Y_train。
# 注意到 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)  # 即X_train的行数
# 注意append_bias_reshape函数中n=13, 这里n=14,因而后面占位符X和变量w都是合理的
n = 13 + 1# 为训练数据声明 TensorFlow 占位符。观测占位符 X 的形状变化
# X其实也不用特地申明shape=[m, n]。例如Y就没有申明,后面的feed_dict依旧可以赋值,不会报错
X = tf.placeholder(tf.float32, name='X', shape=[m, n])
Y = tf.placeholder(tf.float32, name='Y')# 为权重和偏置创建 TensorFlow 变量。通过随机数初始化权重:
# 多元线性回归,即多项式,不用单独设置b。w0=b,包含在w中,而X_train中第一列全为1,因此可保证y=w0+w1*x1+w2*x2+....
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')optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)init_op = tf.global_variables_initializer()
total = []# 执行环节
with tf.Session() as sess:sess.run(init_op)writer = tf.summary.FileWriter('graphs', sess.graph)for i in range(100):_, l = sess.run([optimizer, loss], feed_dict={X: X_train, Y: Y_train})total.append(l)print('Epoch{0}:Loss{1}'.format(i, l))writer.close()w_value = sess.run([w])plt.figure()
plt.plot(total)
plt.show()# 使用模型预测房价
N = 500
X_new = X_train[N, :]
Y_pred = (np.matmul(X_new, w_value)).round(1)
print('predicted value: ${0}   actual value: ${1}'.format(Y_pred[0] * 1000, Y_train[N] * 1000), 'done')

我们发现损失随着训练过程的进行而减少:

本节使用了 13 个特征来训练模型。简单线性回归和多元线性回归的主要不同在于权重,且系数的数量始终等于输入特征的数量。下图为所构建的多元线性回归模型的 TensorBoard 图:

多元线性回归数据集_TensorFlow学习Program1——13.实现一元、多元线性回归(基于房价数据集)...相关推荐

  1. ML之LiR:利用LiR线性回归算法(自定义目标函数MSE和优化器GD)对Boston房价数据集(两特征+归一化)进行回归预测

    ML之LiR:利用LiR线性回归算法(自定义目标函数MSE和优化器GD)对Boston房价数据集(两特征+归一化)进行回归预测 目录 利用LiR线性回归算法(自定义目标函数MSE和优化器GD)对Bos ...

  2. 正则不能全为某个值_TensorFlow学习Program1——补充附录(7)线性回归、逻辑回归与正则化...

    本文整理总结自<机器学习 - 线性回归.逻辑回归与正则化><逻辑回归与正则化><逻辑回归及正则化> 线性回归/逻辑回归/正则化 数学推导汇总 逻辑回归详细解释 逻辑 ...

  3. 【深度学习】近几年,关于基于Imagenet数据集图像分类的模型总结

    「@Author:Runsen」 在过去的几年里,许多深度学习模型涌现出来,例如层的类型.超参数等.在本系列中,我将回顾几个最显着的 deeplearn 图像分类的模型. AlexNet (2012 ...

  4. 【小白学习Keras教程】四、Keras基于数字数据集建立基础的CNN模型

    @Author:Runsen 文章目录 基本卷积神经网络(CNN) 加载数据集 1.创建模型 2.卷积层 3. 激活层 4. 池化层 5. Dense(全连接层) 6. Model compile & ...

  5. 华南理工深度学习与神经网络期末考试_深度学习基础:单层神经网络之线性回归...

    3.1 线性回归 线性回归输出是一个连续值,因此适用于回归问题.回归问题在实际中很常见,如预测房屋价格.气温.销售额等连续值的问题.与回归问题不同,分类问题中模型的最终输出是一个离散值.我们所说的图像 ...

  6. 《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测

    <异常检测--从经典算法到深度学习> 0 概论 1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法 3 基于One-Class SVM的异常检测算法 4 基于高斯概率密度异常检测 ...

  7. 精选 Github 近期13款开源工具包!(附数据集、链接)

    来源:PaperWeekly 本文共1700字,建议阅读6分钟. 本文为你精选近期Github上的13款深度学习开源工具包和数据集,一起Star和Fork吧- 01 #Swift for Tensor ...

  8. ML之回归预测:利用Lasso、ElasticNet、GBDT等算法构建集成学习算法AvgModelsR对国内某平台上海2020年6月份房价数据集【12+1】进行回归预测(模型评估、模型推理)

    ML之回归预测:利用Lasso.ElasticNet.GBDT等算法构建集成学习算法AvgModelsR对国内某平台上海2020年6月份房价数据集[12+1]进行回归预测(模型评估.模型推理) 目录 ...

  9. [深度学习-实践]GAN入门例子-利用Tensorflow Keras与数据集CIFAR10生成新图片

    系列文章目录 深度学习GAN(一)之简单介绍 深度学习GAN(二)之基于CIFAR10数据集的例子; 深度学习GAN(三)之基于手写体Mnist数据集的例子; 深度学习GAN(四)之PIX2PIX G ...

最新文章

  1. 挖矿木马的战略战术分析
  2. Ubuntu虚拟机JeOS安装-2016.08.28
  3. 中国人民大学《组织行为学》_12怎样让员工快速融入群体?
  4. Image Pro Plus测量组织平均厚度
  5. HTML5 audio 标签-在html中定义声音的标签
  6. movzbl和movsbl
  7. 机器人彩铅画_彩铅画嗔
  8. mysql 值为0 但却被认为null_MySQL介于普通读和锁定读的加锁方式
  9. TIOBE 4月编程语言排行榜:C++重回前三,PHP下降明显
  10. vue-cli的webpack模板项目配置文件说明
  11. 【Oracle】修改参数的同时添加注释
  12. 汇编语言-学习笔记(一)
  13. DotNet开发的微商分销系统源码,微信三级分销系统源码
  14. CISSP考试过程,备考过程巨详细!
  15. dcmtk编译 android,Win10编译Android可用的DCMTK-SO库
  16. mysql2008安装失败_sql server 2008为什么会安装失败 sql2008安装失败解决办法
  17. 手风琴效果案例(jQuery)
  18. mysql,php,redis,jq小记
  19. 减少代码重复率的方法
  20. 《薛兆丰经济学讲义》阅读笔记|第一节-真实世界 经济学的视角

热门文章

  1. python tkinter grid布局
  2. python字符串format格式化
  3. bagging算法_集成学习(Ensemble Learning)——Bagging与Random Forest(1)
  4. win7 oracle数据库删除用户名,图文帮你win7系统删除Oracle数据库中的用户的具体方法...
  5. PAT (Basic Level) Practice (中文)答案合集
  6. 操作系统 第四章 文件管理
  7. 计算机组成原理 第七章 输入输出系统
  8. 计蒜客2019蓝桥杯省赛 B 组模拟赛(一)轻重搭配|
  9. Matlab语音倍速播放
  10. 【超直白】leetcode 279 完全平方数