动手学深度学习(4)-实战Kaggle房价预测
代码描述
下面的代码主要工作是完成房价的预测。数据集的准备可以参考对应文章,这里假设已经可以拿到数据,数据以csv的格式存储在对应的目录下。
1 |
|
之后我们需要完成数据预处理的操作。数据中包括数字特征和离散特征。
对于数字特征,我们对其进行标准化处理,意在缩小不同量纲之间的差距,将所有的特征都放在一个共同的尺度上。代码如下:
1 |
|
对于离散特征,我们将其转化为one-hot编码,代码如下:
1 |
|
数据处理完成之后,我们可以将DataFrame格式的数据转化成torch中的Tensor:
1 |
|
接下来就是训练相关的步骤,首先定义损失函数和网络结构,这里网络结构采用了最简单的线性模型。在应对一个全新的问题时,我们通常的做法是将线性模型作为一个baseline,后续的优化可以对比这个baseline模型。
1 |
|
实际上,这里使用标准的MSE是不太合适的,因为房价之间相差可能非常大,我们关心的应该是相对数量而不是绝对数量,即我们更加关心相对误差。一种方式是计算价格对数的均方差,即: \[ \sqrt{\frac{1}{n}\sum_{i=1}^n(\log y_i - \log \hat{y_i})^2} \] 代码实现如下:
1 |
|
接下来,可以完成模型训练的方法,按照基本流程即可。这里将每一轮的训练和测试损失记录在一个列表中:
1 |
|
这里的load_array
函数的作用是将一个由tensor组成的array转化为DataLoader并进行返回:
1 |
|
除此之外,我们还会使用K折交叉验证。该方法有助于模型选择和超参数调整。下面是相关代码:
1 |
|
至此准备工作已经完成,之后就可以调整超参数,进行训练(炼丹)。同时根据不同超参数带来的效果,选定最优的模型和参数。下面是一个例子:
1 |
|
参考文章
动手学深度学习(4)-实战Kaggle房价预测
http://example.com/2023/09/14/动手学深度学习-4-实战Kaggle房价预测/