基于简单MLP模型的加州房价预测
摘要
机器学习是当前热度非常高的领域,可以对房价数据进行预测,具有很高的研究价值。为了更好地学习机器学习,将理论付诸于实践,本文从加州房价预测实验入手,提出了基于简单MLP的房价预测模型方法研究。
本文的主要研究内容为基于简单MLP模型的方法,提出了加州房价预测的模型。本文首先介绍了研究背景和意义,实验选取了来源于Kaggle上的一次竞赛California House Prices。在实验中,首先观察了训练数据以及测试数据,分析了自变量Sold Price与因变量的相关性,选取了用来训练的特征。接着,对数据进行预处理,对数值类型的特征进行特征归一化和缺失值的补充,使用了独热编码处理了离散值,最终得到了用于训练的特征。构建了一个简单MLP模型,共三个线性层,并对前两层使用了Relu()。训练函数借助了Adam优化器,其优点是它对初始学习率敏感度不强。使用了网格搜索结合K折交叉验证对超参数进行了调整。训练结束后将获得的模型应用于测试集,并将预测保存在CSV文件中提交到Kaggle查看结果。最终我在Kaggle上获得的score为。
将我的预测结果与简单线性模型的预测结果进行对比,结果显示在这次竞赛的数据上,所提出的模型预测精度更好,具有稳健性,适合用于加州房价预测。
关键词
房价预测;机器学习;
1. 数据指标说明及处理
1.1 数据来源
为了验证模型的普适性,本文选择的数据是Kaggle竞赛California House Prices的数据。该竞赛的任务是根据房子的信息,如卧室数量、居住面积、位置、附近的学校和卖家的摘要,预测房子的销售价格。数据包括2020年在加州售出的房屋,测试数据集中的房屋在训练数据集中的房屋之后售出。此外,私人排行榜上的房子也是在公共排行榜上的房子之后出售的。
1.2 数据指标说明
> 读入数据集之后首先对数据进行观察,代码和结果如下。
print(train_data.shape)
print(test_data.shape)
图1-1
可以观察到训练集共有47439个数据,40个特征,多出的一列是标签Sold Price。测试集有31626个数据,40个特征。
将训练集和测试集合并之后对数据进行总览,结果如下。
图1-2
1.2.1 影响因素特征
通过分析自变量Sold Price与因变量的相关性,得到的结果如下图。
#查看自变量与因变量的相关性
fig = plt.figure(figsize=(14,8))
abs(train_data.corr()['Sold Price']).sort_values(ascending=False).plot.bar()
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
图1-3
结合上面两步,可以看到相关性大于0.5有这些:Annual tax amount,Tax assessed value,Last Sold
Price,Listed Price,Full bathrooms,Bathrooms。它们全是数值类型,将被加入用于训练的特征列。
1.3 数据预处理
在开始建模前,需要对特征进行预处理。
1.3.1 异常值处理
通过画出上一节中分析出的相关性高的特征的值的分布,通过分析剔除异常的值。
#异常值处理
figure=plt.figure()
sns.pairplot(x_vars=['Annual tax amount','Tax assessed value','Last Sold Price','Listed Price','Full bathrooms','Bathrooms'],
y_vars=['Sold Price'],data=train_data,dropna=True)
plt.show()
运行结果:
图1-4
分析第三个坐标轴,存在Last Sold Price大于8,但Sold
Price只有41e7的数据,删除。分析第五个坐标轴,存在Full bathrooms大于15,但Sold
Price小于51e7的数据,删除。分析第六个坐标轴,存在Bathrooms大于20,但Sold Price小于2*1e7的数据,删除。
删除异常值后重新打印出特征值的分布图,代码和运行结果如下。
#删除异常值
train_data = train_data.drop(train_data[(train_data['Last Sold Price']>8*1e7) &
(train_data['Sold Price']<4*1e7)].index)
train_data = train_data.drop(train_data