使用tensorflow神经网络预测房价模型

本例使用kaggle的”House Sales in King County, USA”数据集,共有21613笔房屋数据,每一笔数据有21个不同的信息,如图所示:

使用tensorflow神经网络预测房价模型

下载地址:

链接: https://pan.baidu.com/s/15OjQ5YHpooDaxkhFHfTpjg

提取码: tcg9

第1步,导入必要套件:

import os
import numpy as np
import pandas as pd
import tensorflow as tf
import matplotlib.pyplot as plt

from tensorflow import keras
from tensorflow.keras import layers

第2步,读取数据并进行数据预处理

根据列表中第2列date数据提取”年、月、日”这3个有效信息,并放在列表最后,尔后丢弃id与date这2个无用信息。

data = pd.read_csv("kc_house_data.csv")

data['year'] = pd.to_numeric(data['date'].str.slice(0, 4))
data['month'] = pd.to_numeric(data['date'].str.slice(4, 6))
data['day'] = pd.to_numeric(data['date'].str.slice(6, 8))

data.drop(['id'], axis="columns", inplace=True)
data.drop(['date'], axis="columns", inplace=True)

第3步,分割数据集

按照6:2:2的比例将数据集分割为训练(train_data)、验证(val_data)、测试(test_data)3部分。

data_num = data.shape[0]
indexes = np.random.permutation(data_num)
train_indexes = indexes[:int(data_num * 0.6)]
val_indexes = indexes[int(data_num * 0.6):int(data_num * 0.8)]
test_indexes = indexes[int(data_num * 0.8):]

train_data = data.loc[train_indexes]
val_data = data.loc[val_indexes]
test_data = data.loc[test_indexes]

第4步,将数据归一化并建立Numpy array格式的训练数据

数据集中部分数据量较大,如房屋居住面积为1500~2500,与其它数据在一起不好进行训练,因此采用减去平均值再除以均方差的方式,将所有数据化分在[0,1]之间。

train_validation_data = pd.concat([train_data,val_data])
mean = train_validation_data.mean()
std = train_validation_data.std()

train_data = (train_data - mean) / std
val_data = (val_data - mean) / std

x_train = np.array(train_data.drop('price', axis='columns'))
y_train = np.array(train_data['price'])
x_val = np.array(val_data.drop('price', axis='columns'))
y_val = np.array(val_data['price'])

第5步,搭建神经网络模型

model = keras.Sequential(name = 'model-1')
model.add(layers.Dense(64, activation='relu', input_shape=(21,)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(1))
model.summary()

第6步,设置模型优化器、损失函数、评价指标

model.compile(keras.optimizers.Adam(0.001),
                loss=keras.losses.MeanSquaredError(),
                metrics=[keras.metrics.MeanAbsoluteError()])

第7步,创建模型存储目录并设置回调函数

model_dir = 'lab-house/models'
os.makedirs(model_dir)

log_dir = os.path.join('lab2-logs', 'model-1')
model_cbk = keras.callbacks.TensorBoard(log_dir=log_dir)
model_mckp = keras.callbacks.ModelCheckpoint(model_dir + 'Best-model-1.h5',
                                            monitor='val_mean_absolute_error',
                                            save_best_only = True,
                                            mode = 'min')

第8步,开始训练

history = model.fit(x_train, y_train,
                    batch_size = 64,
                    epochs = 300,
                    validation_data = (x_val, y_val),
                    callbacks = [model_cbk, model_mckp])

第9步,用测试数据进行房屋价格预测,并与实际价格进行误差百分比的计算

model = keras.models.load_model('lab2-logs/models/Best-model-1.h5')
y_test = np.array(test_data['price'])
test_data = (test_data - mean) / std
x_test = np.array(test_data.drop('price', axis='columns'))
y_pred = model.predict(x_test)
y_pred = np.reshape(y_pred * std['price'] + mean['price'], y_test.shape)
percentage_error = np.mean(np.abs(y_test - y_pred)) / np.mean(y_test)  * 100

print("model_1 Percentage Error: {:.2f}%".format(percentage_error))

结果如下:

证明错误率只有11.84%。

使用tensorflow神经网络预测房价模型

Original: https://blog.csdn.net/heze09/article/details/123645036
Author: heze09
Title: 使用tensorflow神经网络预测房价模型

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/497298/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球