请到后台主题设置添加
首页 / 房产工具箱资讯

神经网络房价预测-PyTorch实现

  本文将学习一下如何使用PyTorch创建一个前馈神经网络(或者叫做多层感知机,Multiple-Layer Perceptron,MLP),文中会使用PyTorch提供的自动求导功能,训练一个神经网络。   本文的数据集来自Kaggle竞赛:房价预测。这份数据分为训练数据集和测试数据集。两个数据集都包括每栋房子的特征,如建造年份、地下室状况等特征值。这些特征中,有连续的数值型(Numerical)特征,有离散的分类(Categorical)特征。这些特征中,有些特征值是缺失值“na”。训练数据集包括了每栋房子的价格,也就是需要预测的目标值(Label)。我们应该用训练数据集训练一个模型,并对测试数据集进行预测,然后将结果提交到Kaggle。   首先,我们下载并加载数据集:   训练数据集共1460个样本,81个维度,其中,是每个样本的唯一编号,是房价,也是我们要拟合的目标值。其他维度(列)有数值类特征,也有非数值列,或者叫分类特征。   先查看训练数据集的维度:   输出为:   或者通过来查看整个数据集各个特征的一些统计情况。   接着,我们要把训练数据集和测试数据集合并。将训练数据集和测试数据集合并主要是为了统一特征处理的流程,或者说对训练数据集和测试数据集使用同样的方法,进行同样的特征工程处理。   接着就要开始进行特征工程了。本文没有进行任何复杂的特征工程,只做了两件事:1、过滤掉了含有缺失值的列;2、对分类特征进行了One-Hot编码。缺失值会在一定程度上影响算法的预测效果,一般可以使用一些默认值或者一些临近值来填充缺失值。对于MLP模型,分类特征必须经过编码,转换成数值才能进行模型训练,One-Hot编码是一种最常见的分类特征处理的方法。   我们用下面的函数过滤非空列:   分别对数值特征和分类特征进行处理:   经过过滤,数值特征共有25列,分类特征共有20列,共45列。   对于分类特征,还需要进行One-Hot编码,可以帮我们自动完成One-Hot编码过程。经过One-Hot编码后,数据增加了很多列,共有149列。   至此,我们完成了一次非常简单的特征工程,将这些数据转化为PyTorch模型所能接受的Tensor形式:   接着,我们开始构建神经网络。   在PyTorch中构建神经网络有两种方式。比较简单的前馈网络,可以使用。是一个存放神经网络的容器,直接在里面添加我们需要的层即可。整个模型的输入为特征数,输出为一个标量。模型的隐藏层使用了ReLU激活函数,最后一层是一个线性层,得到的是一个预测的房价值。   另一种构建神经网络的方式是继承类,我们将子类起名为类。方法为类的构造函数,用来初始化神经网络各层的参数;也是我们必须实现的方法,主要用来实现神经网络的前向传播过程。   我们已经定义好了一个神经网络的类,还要初始化一个类的对象实例,表示某个具体的模型。然后定义损失函数,这里使用,使用了均方误差(Mean Square Error)来衡量损失函数。对于模型的训练过程,这里使用Adam算法。Adam是优化算法中的一种,在很多场景中效率要优于SGD。   接着,我们使用Adam算法进行多轮的迭代,更新模型中的参数。这里对模型进行500轮的迭代。   每次迭代使用训练数据集中的所有样本。实际是执行的,即方法中定义的前向传播逻辑,输入数据在神经网络模型中前向传播,得到预测值。方法计算了预测值和目标值之间的损失。   每次迭代时,我们要先对模型中各参数的梯度清零:。PyTorch中的默认是把本次计算的梯度和缓存中已有的梯度加和,因此必须在反向传播前先将梯度清零。接着执行方法,完成反向传播过程,PyTorch会帮我们计算各参数对于损失函数的梯度。会根据刚刚反向传播得到的梯度,更新模型参数。   至此,一个简单的预测房价的模型就训练好了。   我们可以使用模型对测试数据集进行预测,将得到的预测值保存成文件,提交到Kaggle上。   参考资料https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter03_DL-basics/3.16_kaggle-house-price
版权说明:
1.版权归本网站或原作者所有;
2.未经本网或原作者允许不得转载本文内容,否则将视为侵权;
3.转载或者引用本文内容请注明来源及原作者;
4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。
你可能感兴趣的文章
搜索
最新留言
关注我们
关注我们
微信
关注我们
微博
请到后台主题设置添加

Powered ByZ-Blog.