Transformer 实现 Kaggle 房价预测竞赛

        Kaggle 房价预测竞赛是典型的机器学习中的回归问题,需要在训练集上对于房间的 N 个特征和房价之间的关系进行拟合,在测试集上,模型即可根据房间特征对房价作出预测。考虑到需要拟合多种特征之间的关系,我尝试设计了一个轻量化的Transformer模型来处理房间特征的自相关性,并对这种关系进行建模,产生预测结果。

目前代码已经开源,网址:GitHub - Evergreen0929/Kaggle_House_Prices_Transformer_Pytorch: A light-weight transformer model for Kaggle House Prices Regression Competition

  • 初步分析:

默认的训练与测试数据提供了 79 栏信息,我们对其中 36 栏进行标准化,并对非数值 ’NA’ 进行数值填充,然后将处理好的信息转化为 one-hot 编码特征,总共 331 个维度。

对于训练集上的特征,我们可视化了不同栏目之间的自相关性,heat map如下:

 其中颜色越深代表属性间的相关性越强,可以看到有些栏目间存在很强的相关性(例如GarageCars 和 GarageArea),而有些类之间几乎没有相关性(例如 MSSubClass 和 LogFrontage),这种自相关性对于模型拟合而言是有帮助的,可以避免无关信息的干扰,对相关性强的信息的进行更充分的利用。自然的,采用 Transformer 对这种关系进行建模无疑是合适的。Transformer 可以通过 Self-Attention 获取全局的自相关性,并通过 MLP 对这一关系进行建模,因此从这一出发点,我尝试了 Transformer 架构进行测试。

  • 网络结构:

        设计的 Transformer 采用经典 Encoder-Decoder 的结构。由于我们处理的不是序列问题,而且输入输出向量长度是给定的,所以不需要 position embedding 和 output embedding,Encoder和 Decoder 采用相同的基本结构,不同之处在于 Decoder 最后一层直接产生预测结果。对于每一个输入向量,线性映射为 q, k, v 三个向量,q 和 k 用于计算其331个维度的Self-Attention map,经过 Softmax 后对 k 进行加权,然后输入三层感知机中进行拟合。

        由于 Kaggle 训练数据集很小,因此参数量大的网络很容易过拟合。因此我这里使用的 Transformer 在 Encoder 和 Decoder 部分分别只有一层,降低过拟合风险;同时由于 Self-Attention 的计算加权,Transformer 相比起同等参数量的 MLP 泛化能力更强。

  • 实验效果:

        我们的模型在Kaggle 房价预测测试集取得了 rmse = 0.12760 的准确率,截至 2021.11.30 21:00 排名 1128。(这个实验结果并没有采用数据预处理和相关的分析,如降维等;可以尝试添加相关的数据预处理操作以取得更好的实验效果)

        训练的超参数为:lr = 0.002,weight decay = 2,total epoch = 100,batch size = 64.

我们也尝试了K折交叉验证,但由于测试集标注不公开,所以只能在训练集上进行划分。在训练集上K折交叉验证可以一定程度上反映模型的效果和泛化能力,但是仅供参考。实际的泛化性能还需要测试集的效果来证明。

  • 消融实验:

为了证明模型的有效性,我对模型中结构进行了消融实验。

Model

5-Fold Cross Validation

Test loss (rmse)

(on official test dataset)

Train loss (rmse)

Test loss (rmse)

MLP (1 Block)

0.127530

0.140763

0.15460

MLP (2 Blocks)

0.108675

0.163794

0.15125

Transformer

(2 Blocks)

0.017307

0.129986

0.12760

        我们分别尝试了去掉 Self-Attention 的计算(也就是 2 个基本的 3-layer MLP Block),和 1 个最基本的 3-layer MLP Block 在5 折交叉验证下和官方测试集的效果。

       结果表明,我们的模型有更好的测试效果。仅仅通过简单叠加 MLP 并不能提升模型的预测效果,通过 Block 之间 Self-Attention 的计算可以提升 MLP 的建模表达能力,也验证了我设计 Transformer 结构的初衷是正确的。

最后,如果觉得这篇文章对你有帮助的话,可不可以麻烦在 Github 上这篇 repo 下点一颗小星星呢?谢谢~~

  • 10
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值