# 波士顿房价预测（TensorFlow2.9实践）

（1）准备数据

（2）构建模型

（3）训练模型

（4）进行预测

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import pandas as pd
from sklearn.utils import shuffle
from sklearn.preprocessing import scale
print("Tensorflow版本是:",tf.__version__)


Tensorflow版本是: 2.9.1

df=pd.read_csv("boston.csv",header=0)
print(df.describe())


df.head(3)


df.tail(3)



ds=df.values
print(ds.shape)


(506, 13)

print(ds)


[En]

Third, divide feature data and label data


x_data = ds[:,:12]

y_data = ds[:,12]
print('x_data shape=',x_data.shape)
print('y_data shape=',y_data.shape)


x_data shape= (506, 12)
y_data shape= (506,)

[En]

Considering the influence of the range of different eigenvalues, the feature data need to be normalized.


for i in range(12):
x_data[:,i]=(x_data[:,i]-x_data[:,i].min())/(x_data[:,i].max()-x_data[:,i].min())
x_data


[En]

The purpose of building and training machine learning models is to make good predictions for new data. How to ensure the effectiveness of the training and deal with data that have never been seen before? Is it really good for all tagged data to participate in model training?

[En]

One way is to divide the dataset into two subsets:

• 训练集 – 用于训练模型的子集
• 测试集 – 用于测试模型的子集

[En]

In general, good performance on test sets is a useful indicator of whether or not to perform well on new data, provided that:

[En]

The test set is large enough not to use the same test set repeatedly to cheat.

[En]

Split a single dataset into a training set and a test set

[En]

Ensure that the test set meets the following two conditions:

（1）规模足够大，可产生具有统计意义的结果
（2）能代表整个数据集，测试集的特征应该与训练集的特征相同

[En]

Use test sets and training sets to drive the iterative process of model development.

[En]

In each iteration, the training data are trained and the test data are evaluated, and under the guidance of the evaluation results based on the test data, various model hyperparameters, such as learning rates and characteristics, are selected and changed. Is there a problem with this method?

[En]

The problem is that repeated execution of the process may cause the model to unwittingly fit the characteristics of a particular test set.

[En]

By dividing the dataset into three subsets, the probability of overfitting can be greatly reduced:

[En]

Use the validation set to evaluate the effectiveness of the training set.

[En]

Divide the training set, verification set, and test set:

train_num = 300
valid_num = 100
test_num = len(x_data) - train_num - valid_num

x_train = x_data[:train_num]
y_train = y_data[:train_num]

x_valid = x_data[train_num:train_num+valid_num]
y_valid = y_data[train_num:train_num+valid_num]

x_test = x_data[train_num+valid_num:train_num+valid_num+test_num]
y_test = y_data[train_num+valid_num:train_num+valid_num+test_num]


x_train = tf.cast(x_train,dtype=tf.float32)
x_valid = tf.cast(x_valid,dtype=tf.float32)
x_test = tf.cast(x_test,dtype=tf.float32)


def model(x,w,b):
return tf.matmul(x,w)+b


W = tf.Variable(tf.random.normal([12,1],mean=0.0,stddev=1.0,dtype=tf.float32))
B= tf.Variable(tf.zeros(1),dtype = tf.float32)
print(W)
print(B)


## 9.1 设置超参数

training_epochs = 50  #&#x8FED;&#x4EE3;&#x6B21;&#x6570;
learning_rate = 0.001  #&#x5B66;&#x4E60;&#x7387;


## 9.2 定义损失函数

#&#x91C7;&#x7528;&#x5747;&#x65B9;&#x5DEE;&#x4F5C;&#x4E3A;&#x635F;&#x5931;&#x51FD;&#x6570;

def loss(x,y,w,b):
err = model(x, w,b) - y       #&#x8BA1;&#x7B97;&#x6A21;&#x578B;&#x9884;&#x6D4B;&#x503C;&#x548C;&#x6807;&#x7B7E;&#x503C;&#x7684;&#x5DEE;&#x5F02;
squared_err = tf.square(err)  #&#x6C42;&#x5E73;&#x65B9;&#xFF0C;&#x5F97;&#x51FA;&#x65B9;&#x5DEE;
return tf.reduce_mean(squared_err) #&#x6C42;&#x5747;&#x503C;&#xFF0C;&#x5F97;&#x51FA;&#x5747;&#x65B9;&#x5DEE;.



## 9.3 定义梯度函数

#&#x8BA1;&#x7B97;&#x6837;&#x672C;&#x6570;&#x636E;[x,y]&#x5728;&#x53C2;&#x6570;[w, b]&#x70B9;&#x4E0A;&#x7684;&#x68AF;&#x5EA6;

loss_= loss(x,y,w,b)


## 9.4 选择优化器

optimizer = tf.keras.optimizers.SGD(learning_rate) #&#x521B;&#x5EFA;&#x4F18;&#x5316;&#x5668;&#xFF0C;&#x6307;&#x5B9A;&#x5B66;&#x4E60;&#x7387;


## 9.5 迭代训练

loss_list_train = []  #&#x7528;&#x4E8E;&#x4FDD;&#x5B58;&#x8BAD;&#x7EC3;&#x96C6;1oss&#x503C;&#x7684;&#x5217;&#x8868;
loss_list_valid = []  #&#x7528;&#x4E8E;&#x4FDD;&#x5B58;&#x9A8C;&#x8BC1;&#x96C6;loss&#x503C;&#x7684;&#x5217;&#x8868;
total_step = int(train_num/batch_size)

for epoch in range(training_epochs):
for step in range(total_step):
xs = x_train[step*batch_size:(step+1)*batch_size,:]
ys = y_train[step*batch_size:(step+1)*batch_size]

loss_valid = loss(x_valid,y_valid,W,B).numpy()   #&#x8BA1;&#x7B97;&#x5F53;&#x524D;&#x8F6E;&#x9A8C;&#x8BC1;&#x635F;&#x5931;
loss_list_train.append(loss_train)
loss_list_valid.append(loss_valid)
print("epoch={:3d},train_loss={:.4f},valid_loss={:.4f}".format(epoch+1,loss_train,loss_valid))


epoch= 1,train_loss=587.1567,valid_loss=414.5585
epoch= 2,train_loss=461.1470,valid_loss=304.6138
epoch= 3,train_loss=366.7652,valid_loss=227.8302
epoch= 4,train_loss=296.0490,valid_loss=175.0670
epoch= 5,train_loss=243.0432,valid_loss=139.5983
epoch= 6,train_loss=203.2935,valid_loss=116.4885
epoch= 7,train_loss=173.4678,valid_loss=102.1276
epoch= 8,train_loss=151.0732,valid_loss=93.8853
epoch= 9,train_loss=134.2448,valid_loss=89.8543
epoch= 10,train_loss=121.5869,valid_loss=88.6597
epoch= 11,train_loss=112.0550,valid_loss=89.3172
epoch= 12,train_loss=104.8675,valid_loss=91.1287
epoch= 13,train_loss=99.4389,valid_loss=93.6048
epoch= 14,train_loss=95.3310,valid_loss=96.4073
epoch= 15,train_loss=92.2155,valid_loss=99.3077
epoch= 16,train_loss=89.8464,valid_loss=102.1555
epoch= 17,train_loss=88.0393,valid_loss=104.8561
epoch= 18,train_loss=86.6560,valid_loss=107.3541
epoch= 19,train_loss=85.5927,valid_loss=109.6212
epoch= 20,train_loss=84.7715,valid_loss=111.6475
epoch= 21,train_loss=84.1340,valid_loss=113.4355
epoch= 22,train_loss=83.6362,valid_loss=114.9954
epoch= 23,train_loss=83.2449,valid_loss=116.3418
epoch= 24,train_loss=82.9353,valid_loss=117.4922
epoch= 25,train_loss=82.6886,valid_loss=118.4646
epoch= 26,train_loss=82.4904,valid_loss=119.2775
epoch= 27,train_loss=82.3301,valid_loss=119.9482
epoch= 28,train_loss=82.1996,valid_loss=120.4934
epoch= 29,train_loss=82.0925,valid_loss=120.9283
epoch= 30,train_loss=82.0043,valid_loss=121.2668
epoch= 31,train_loss=81.9312,valid_loss=121.5214
epoch= 32,train_loss=81.8704,valid_loss=121.7035
epoch= 33,train_loss=81.8199,valid_loss=121.8229
epoch= 34,train_loss=81.7781,valid_loss=121.8884
epoch= 35,train_loss=81.7434,valid_loss=121.9079
epoch= 36,train_loss=81.7151,valid_loss=121.8881
epoch= 37,train_loss=81.6921,valid_loss=121.8350
epoch= 38,train_loss=81.6740,valid_loss=121.7537
epoch= 39,train_loss=81.6602,valid_loss=121.6488
epoch= 40,train_loss=81.6503,valid_loss=121.5241
epoch= 41,train_loss=81.6439,valid_loss=121.3830
epoch= 42,train_loss=81.6407,valid_loss=121.2285
epoch= 43,train_loss=81.6406,valid_loss=121.0630
epoch= 44,train_loss=81.6432,valid_loss=120.8886
epoch= 45,train_loss=81.6484,valid_loss=120.7074
epoch= 46,train_loss=81.6561,valid_loss=120.5208
epoch= 47,train_loss=81.6661,valid_loss=120.3301
epoch= 48,train_loss=81.6783,valid_loss=120.1367
epoch= 49,train_loss=81.6926,valid_loss=119.9414
epoch= 50,train_loss=81.7088,valid_loss=119.7451


plt.xlabel("Epochs")
plt.ylabel("Loss")
plt.plot(loss_list_train,'blue',label="Train Loss")
plt.plot(loss_list_valid,'red',label="Valid Loss")
plt.legend(loc=1)


print("Test_loss:{:.4f}".format(loss(x_test,y_test,W,B).numpy()))


Test_loss:114.1834

test_house_id = np.random.randint(0,test_num)
y = y_test[test_house_id]
y_pred = model(x_test,W,B)[test_house_id]
y_predit=tf.reshape(y_pred,()).numpy()
print("House id",test_house_id, "Actual value",y,"Predicted value ",y_predit)


House id 70 Actual value 19.9 Predicted value 25.09165

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline
import pandas as pd
from sklearn.utils import shuffle
from sklearn.preprocessing import scale

def model(x,w,b):
return tf.matmul(x,w)+b

def loss(x,y,w,b):
err = model(x, w,b) - y
squared_err = tf.square(err)
return tf.reduce_mean(squared_err)

loss_= loss(x,y,w,b)

ds=df.values

x_data = ds[:,:12]

y_data = ds[:,12]

for i in range(12):
x_data[:,i]=(x_data[:,i]-x_data[:,i].min())/(x_data[:,i].max()-x_data[:,i].min())

train_num = 300
valid_num = 100
test_num = len(x_data) - train_num - valid_num

x_train = x_data[:train_num]
y_train = y_data[:train_num]

x_valid = x_data[train_num:train_num+valid_num]
y_valid = y_data[train_num:train_num+valid_num]

x_test = x_data[train_num+valid_num:train_num+valid_num+test_num]
y_test = y_data[train_num+valid_num:train_num+valid_num+test_num]

x_train = tf.cast(x_train,dtype=tf.float32)
x_valid = tf.cast(x_valid,dtype=tf.float32)
x_test = tf.cast(x_test,dtype=tf.float32)

W = tf.Variable(tf.random.normal([12,1],mean=0.0,stddev=1.0,dtype=tf.float32))
B= tf.Variable(tf.zeros(1),dtype = tf.float32)

training_epochs = 50
learning_rate = 0.001
batch_size = 10

optimizer = tf.keras.optimizers.SGD(learning_rate)

loss_list_train = []
loss_list_valid = []
total_step = int(train_num/batch_size)

for epoch in range(training_epochs):
for step in range(total_step):
xs = x_train[step*batch_size:(step+1)*batch_size,:]
ys = y_train[step*batch_size:(step+1)*batch_size]

loss_train = loss(x_train,y_train,W,B).numpy()
loss_valid = loss(x_valid,y_valid,W,B).numpy()
loss_list_train.append(loss_train)
loss_list_valid.append(loss_valid)
print("epoch={:3d},train_loss={:.4f},valid_loss={:.4f}".format(epoch+1,loss_train,loss_valid))


Original: https://blog.csdn.net/baidu/article/details/125272411
Author: 果州做题家
Title: 波士顿房价预测（TensorFlow2.9实践）

(0)

### 大家都在看

• #### 为什么越来越多的程序员选择了Golang？

人工智能以令人难以置信的应用为 21 世纪增光添彩，让人们的生活更轻松。无论是生活方式、人际关系，还是我们的工作和经营方式，人工智能已经改变了一切，例如规划、互动、医疗健康等。 在…

人工智能 2023年6月10日
0127
• #### Hands-on data analysis学习分享：数据加载及探索性数据分析

python操作 关于拿到数据后该如何着手进行初步分析 文是学习开源项目’hands-on data analysis’之后的个人总结，总结内容为平时学习的…

人工智能 2023年7月9日
0125
• #### 机器学习整理（神经网络）

神经元 神经网络由多个神经元组成，其中神经元由几个部分组成：输入、输入权重、输出和激活函数组成，类似于生物神经元的树突、轴突的组成。 神经元的输入由左边的神经元输出 xxx 乘以权…

人工智能 2023年7月14日
098
• #### 机器学习强基计划5-1：概率图开篇，机器学习中的图论总结(附思维导图)

机器学习强基计划聚焦深度和广度，加深对机器学习模型的理解与应用。”深”在详细推导算法模型背后的数学原理；”广”在分析多个机器学习模型…

人工智能 2023年6月16日
0104
• #### 新手树莓派3B——人脸识别门禁管理系统

文章目录 前言 一、怎么用树莓派设计人脸识别门禁系统？ 二、树莓派系统的安装 三、远程连接 四、人脸识别 总结 前言 树莓派，自问世以来，其”麻雀虽小，五脏俱全&#82…

人工智能 2023年7月18日
0156
• #### c#WinForm用OpencvSharp实现ROI区域提取

已经自学OpencvSharp一段时间了(目前工作用的是C#，就学了Opencvsharp了,vs2015，opencvsharp3)，收获也有一些，现在就将我在学习过程中的收获分…

人工智能 2023年7月18日
0208
• #### OpenCV 图片尺寸缩放——resize函数

文章目录 * – OpenCV中的缩放： – resize函数 – 代码案例 OpenCV中的缩放： 如果要放大或缩小图片的尺寸，可以使用Ope…

人工智能 2023年6月19日
0189
• #### 4. R语言数据的排序、转换、汇总

R学习笔记4_初级 数据排序 * sort函数 rank函数 order函数 数据转换 * 长宽型数据转换 – stack函数 tapply函数 reshape函数 r…

人工智能 2023年7月15日
0113
• #### 决策树（Decision Tree）

一、理论介绍 决策树(Decision Tree，DT)，亦称”判定树”，是以实例为基础的归纳学习算法，它根据样本的特征，按照一定规则将无序的样本分裂成不同…

人工智能 2023年7月27日
0144
• #### Unity技术手册-UGUI零基础详细教程-ScrollBar和ScrollView

往期文章分享 点击跳转=>《导航贴》- Unity手册，系统实战学习 点击跳转=>《导航贴》- Android手册，重温移动开发 本文约8千字，新手阅读需要20分钟，复…

人工智能 2023年7月30日
0145
• #### pandas中如何提取DataFrame的某些列

在处理表格型数据时，一行数据是一个 sample，列就是待提取的特征。怎么选取其中的一些列呢？本文分享一些方法。 使用如下的数据作为例子： import pandas as pd …

人工智能 2023年7月6日
091
• #### ORBSLAM3整体框架

一、前言 笔者认真学习了一年半有余的SLAM，期间学习过V-SLAM、VI-SLAM、激光SLAM和激光+IMU的SLAM，在看论文和代码的闲暇之余，会时常逛知乎和CSDN等博客膜…

人工智能 2023年6月2日
0150
• #### 东北大学大数据班机器学习大作业——印度房价预测

目录 1 、项目背景. 3 2 、实验描述. 3 3 、实验目的. 3 4 、实验环境. 3 5、实验原理. 4 5.1 决策树. 4 5.2 随机森林. 4 5.3 数据预处理与…

人工智能 2023年7月28日
0112
• #### 机器学习入门：Kaggle -titanic(泰坦尼克)生存预测

作为kaggle最最入门的新手村长期比赛之一，通过参考大佬们的作业，自己尝试了一下这个demo，可以很好的让萌新体验一次传统机器学习的大体流程。 首先附上这篇博客参考大佬的原文地址…

人工智能 2023年7月14日
0110
• #### python语音识别设置失败_Python语音识别错误通道数无效

作为项目的一部分，我正在python上运行一个语音识别代码。我面临着一个非常奇怪的问题 当我把语音识别代码放在一个函数中时，比如：def loop(): r=sr.Recogniz…

人工智能 2023年5月25日
0136
• #### sns.countplot() 画条形图

sns.countplot() 用于画类别特征的 频数条形图。函数中的参数如图所示： sns.countplot(x=None, y=None, hue=None, data=No…

人工智能 2023年6月19日
0222