基于keras实现房价预测 (神经网络入门)

1 数据准备

1.1下载数据

需要提前安装  TensorFlow,keras ,numpy,matplot

import tensorflow as tf
#从TensorFlow导入keras
from tensorflow import keras
import numpy as np
#加载数据集
train_data,train_label,test_data,test_label=\
keras.datasets.boston_housing.load_data()

执行后如图1

图1

1.2 数据预处理

数据打乱-->数据归一化

(1)数据打乱

使用 argsort(a, axis=-1, kind=None, order=None) 函数对数组进行排序的索引。

order=np.argsort(np.random.random(train_label.shape))
print(order)
train_data=train_data[order]
train_label=train_label[order]

(2)归一化

mean=train_data.mean(axis=0)
std=train_data.std(axis=0)

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

print("train_data.shape:{},train_label.shape:{}."\
      .format(train_data.shape,train_label.shape))
print("test_data.shape:{},test_label.shape:{}."\
      .format(test_data.shape,test_label.shape))

2.创建神经网路模型

定义模型

#创建模型
def buildmodel():
    model=keras.Sequential()
    model.add(keras.layers.Dense(64,activation=tf.nn.relu,
                                 input_shape=(train_data.shape[1],)))
    model.add(keras.layers.Dense(64,activation=tf.nn.relu))
    model.add(keras.layers.Dense(1))
    #print(tf.train.RMSPropOptimizer.__doc__)
    optimizer=tf.train.RMSPropOptimizer(learning_rate=1e-3)
    model.compile(optimizer,loss='mse',metrics=['mae'])
    return model

model=buildmodel()
model.summary()

使用summery 输出模型结构

3.模型训练

#训练模型
#回调函数
class PrintDot(keras.callbacks.Callback):
    def on_epoch_end(self,epoch,logs):
        if (epoch+1)%100==0:
            print("\nepoch:",epoch+1)
        print('.',end="")

EPOCH=500
early_stop=keras.callbacks.EarlyStopping( monitor='val_loss',
               min_delta=0,
               patience=20,
               verbose=0,
               mode='auto',
               baseline=None,
               restore_best_weights=False)


history=model.fit(train_data,train_label,batch_size=50,epochs=EPOCH,
                  callbacks=[PrintDot(),early_stop],verbose=0,
                  validation_split=0.2)

#可视化结果

 绘制history图形

#可视化结果

import matplotlib.pyplot as plt
def plot_history(history):
    plt.figure()
    plt.xlabel('Epoch')
    plt.ylabel('MAE')
    
    
    plt.plot(history.epoch,np.array(history.history['mean_absolute_error']),
             label='Train loss')
    plt.plot(history.epoch,np.array(history.history['val_mean_absolute_error']),
             label='val loss')
    plt.ylim([0,10])
    plt.legend()
    plt.show()
plot_history(history)

没有使用early——stop 

 

使用早停

4.模型预测

4.1绘制散点图

#模型评估和预测
test_predict=model.predict(test_data).flatten()
print(list(zip(test_label,test_predict)))
#print(test_predict)

#预测散点图绘图
plt.scatter(test_label,test_predict)
plt.xlabel("True label")
plt.ylabel("Prediction")
plt.axis('equal')
plt.show()

 

4.2绘制预测误差直方图

#预测可视化绘图
error=test_predict-test_label
plt.hist(error,bins=50)
plt.xlabel("prediction error")
plt.ylabel('count')
plt.show()
plt.show()

 

4.3绘制实际房价和预测房价对比图

#对比图
def plotVersusFinguer(y_true,y_predict):
    plt.figure(figsize=(10,7))
    
    plt.plot(y_true,'o-',color='c')
    plt.plot(y_predict,'o-',color='m')
    #添加图例
    plt.legend(loc='lower right',labels=["True price","predict Price"])
    plt.show()
plotVersusFinguer(test_label,test_predict)

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
神经网络是一种非常强大的机器学习方法,可以用于房价预测。与线性回归模型相比,神经网络可以更好地处理非线性关系,提高预测的准确性。以下是一个基于Python语言的基于神经网络房价预测实现示例: ```python import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.utils import to_categorical # 读取数据 data = pd.read_csv('house_price.csv') # 数据预处理 data = data.dropna() # 去除缺失值 data = data[data['price'] > 0] # 去除异常值,价格必须大于0 data = data[data['room_num'] > 0] # 去除异常值,房间数必须大于0 # 特征选择 features = ['area', 'room_num', 'hall_num', 'floor', 'total_floor', 'year', 'district', 'subway'] data = pd.get_dummies(data, columns=['district', 'subway']) # 对分类变量进行独热编码 X = data[features] y = data['price'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 模型建立 model = Sequential() model.add(Dense(64, input_dim=X_train.shape[1], activation='relu')) model.add(Dense(32, activation='relu')) model.add(Dense(1, activation='linear')) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, y_test)) # 模型评估 mse = model.evaluate(X_test, y_test) rmse = np.sqrt(mse) print('均方误差:', mse) print('均方根误差:', rmse) # 模型应用 new_house = [[100, 2, 1, 8, 20, 2010, '浦东', '有']] new_house = pd.DataFrame(new_house, columns=['area', 'room_num', 'hall_num', 'floor', 'total_floor', 'year', 'district', 'subway']) new_house = pd.get_dummies(new_house, columns=['district', 'subway']) predict_price = model.predict(new_house[features]) print('新房价预测值:', predict_price[0][0]) ``` 需要注意的是,神经网络的建立和训练需要较长时间,同时需要适当地调整神经网络的结构和参数,以达到最优的预测效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v1shuimo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值