本例使用kaggle的”House Sales in King County, USA”数据集,共有21613笔房屋数据,每一笔数据有21个不同的信息,如图所示:
下载地址:
链接: 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%。
Original: https://blog.csdn.net/heze09/article/details/123645036
Author: heze09
Title: 使用tensorflow神经网络预测房价模型
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/497298/
转载文章受原作者版权保护。转载请注明原作者出处!