3.16 实战Kaggle比赛:房价预测
作为深度学习基础篇章的总结,我们将对本章内容学以致用。下面,让我们动手实战一个Kaggle比赛:房价预测。本节将提供未经调优的数据的预处理、模型的设计和超参数的选择。我们希望读者通过动手操作、仔细观察实验现象、认真分析实验结果并不断调整方法,得到令自己满意的结果。
3.16.1 Kaggle比赛
Kaggle是一个著名的供机器学习爱好者交流的平台。图3.7展示了Kaggle网站的首页。为了便于提交结果,需要注册Kaggle账号。
我们可以在房价预测比赛的网页上了解比赛信息和参赛者成绩,也可以下载数据集并提交自己的预测结果。该比赛的网页地址是 https://www.kaggle.com/c/house-prices-advanced-regression-techniques 。
3.16.2 获取和读取数据集
比赛数据分为训练数据集和测试数据集。两个数据集都包括每栋房子的特征,如街道类型、建造年份、房顶类型、地下室状况等特征值。这些特征值有连续的数字、离散的标签甚至是缺失值“na”。只有训练数据集包括了每栋房子的价格,也就是标签。我们可以访问比赛网页,点击图3.8中的“Data”标签,并下载这些数据集。
我们将通过pandas
库读入并处理数据。在导入本节需要的包前请确保已安装pandas
库,否则请参考下面的代码注释。
# 如果没有安装pandas,则反注释下面一行
# !pip install pandas
%matplotlib inline
import torch
import torch.nn as nn
import numpy as np
import pandas as pd
import sys
sys.path.append("…")
import d2lzh_pytorch as d2l
print(torch.version)
torch.set_default_tensor_type(torch.FloatTensor)Copy to clipboardErrorCopied
假设解压后的数据位于…/…/data/kaggle_house/
目录,它包括两个csv文件。下面使用pandas
读取这两个文件。
train_data = pd.read_csv(’…/…/data/kaggle_house/train.csv’)
test_data = pd.read_csv(’…/…/data/kaggle_house/test.csv’)
Copy to clipboardErrorCopied
训练数据集包括1460个样本、80个特征和1个标签。
train_data.shape # 输出 (1460, 81)
Copy to clipboardErrorCopied
测试数据集包括1459个样本和80个特征。我们需要将测试数据集中每个样本的标签预测出来。
test_data.shape # 输出 (1459, 80)
Copy to clipboardErrorCopied
让我们来查看前4个样本的前4个特征、后2个特征和标签(SalePrice):
train_data.iloc[0:4, [0, 1, 2, 3, -3, -2, -1]]
Copy to clipboardErrorCopied
可以看到第一个特征是Id,它能帮助模型记住每个训练样本,但难以推广到测试样本,所以我们不使用它来训练。我们将所有的训练数据和测试数据的79个特征按样本连结。
all_features = pd.concat(