请到后台主题设置添加
首页 / 新房装修指南

房价预测 线性回归,完整代码实现以及详解

  目录   一:回顾   二:预测房价   下载和缓存数据集   三: 访问和读取数据集   ​编辑四:数据预处理   五:训练   六:K折交叉验证   ​编辑七:模型选择   八:预测   所有项目代码+UI界面   上一篇我们了解了另外一种处理过拟合的方法,丢弃法(dropout),它通过以一定的概率将神经元的输出设置为0,从而强制网络中的每个神经元都不会过度依赖于其他神经元,进而减少了过拟合的风险,实践中,dropout概率通常在0.2到0.5之间,这样可以有效地减轻过拟合问题,提升模型的泛化性能。之后用代码实现了dropout的效果,之后介绍了前向后向传播。这节课将从0实现一个线性模型——房价预测   此数据集由Bart de Cock于2011年收集 , 涵盖了2006-2010年期间亚利桑那州埃姆斯市的房价。   下载和缓存数据集   下面的函数用来下载数据集, 将数据集缓存在本地目录(默认情况下为)中, 并返回下载文件的名称。 如果缓存目录中已经存在此数据集文件,并且其sha-1与存储在中的相匹配, 我们将使用缓存的文件,以避免重复的下载。   我们还需实现两个实用函数: 一个将下载并解压缩一个zip或tar文件, 另一个是将使用的所有数据集从下载到缓存目录中。   输出:让我们看看前四个和最后两个特征,以及相应标签(房价)。   我们可以看到,在每个样本中,第一个特征是ID, 这有助于模型识别每个训练样本。 虽然这很方便,但它不携带任何用于预测的信息。 因此,在将数据提供给模型之前,我们将其从数据集中删除。   如上所述,我们有各种各样的数据类型。 在开始建模之前,我们需要对数据进行预处理。 首先,我们将所有缺失的值替换为相应特征的平均值。然后,为了将所有特征放在一个共同的尺度上, 我们通过将特征重新缩放到零均值和单位方差来标准化数据:      我们标准化数据有两个原因: 首先,它方便优化。 其次,因为我们不知道哪些特征是相关的, 所以我们不想让惩罚分配给一个特征的系数比分配给其他任何特征的系数更大。      用了 pd.get_dummies(all_features, dummy_na=True)方法后,将all_features的形状从79列变成了331列,将那些不是数字的值也当成一列。如,“MSZoning”包含值“RL”和“Rm”。 我们将创建两个新的指示器特征“MSZoning_RL”和“MSZoning_RM”,其值为0或1。 根据独热编码,如果“MSZoning”的原始值为“RL”, 则:“MSZoning_RL”为1,“MSZoning_RM”为0。 软件包会自动为我们实现这一点。         可以看到此转换会将特征的总数量从79个增加到331个。 最后,通过属性,我们可以 从格式中提取NumPy格式,并将其转换为张量表示用于训练。   首先,我们训练一个带有损失平方的线性模型。 显然线性模型很难让我们在竞赛中获胜,但线性模型提供了一种健全性检查, 以查看数据中是否存在有意义的信息。 如果我们在这里不能做得比随机猜测更好,那么我们很可能存在数据处理错误。 如果一切顺利,线性模型将作为基线(baseline)模型, 让我们直观地知道最好的模型有超出简单的模型多少。   房价就像股票价格一样,我们关心的是相对数量,而不是绝对数量。   例如,如果我们在俄亥俄州农村地区估计一栋房子的价格时, 假设我们的预测偏差了10万美元, 然而那里一栋典型的房子的价值是12.5万美元, 那么模型可能做得很糟糕。 另一方面,如果我们在加州豪宅区的预测出现同样的10万美元的偏差, (在那里,房价中位数超过400万美元) 这可能是一个不错的预测。      与前面的部分不同,我们的训练函数将借助Adam优化器 (我们将在后面章节更详细地描述它)。 Adam优化器的主要吸引力在于它对初始学习率不那么敏感。   K折交叉验证, 它有助于模型选择和超参数调整。 我们首先需要定义一个函数,在k折交叉验证过程中返回第i折的数据。 具体地说,它选择第i个切片作为验证数据,其余部分作为训练数据。 注意,这并不是处理数据的最有效方法,如果我们的数据集大得多,会有其他解决办法。   当我们在k折交叉验证中训练k次后,返回训练和验证误差的平均值   在本例中,我们选择了一组未调优的超参数,并将其留给读者来改进模型。 找到一组调优的超参数可能需要时间,这取决于一个人优化了多少变量。 有了足够大的数据集和合理设置的超参数,k折交叉验证往往对多次测试具有相当的稳定性。 然而,如果我们尝试了不合理的超参数,我们可能会发现验证效果不再代表真正的误差。      请注意,有时一组超参数的训练误差可能非常低,但k折交叉验证的误差要高得多, 这表明模型过拟合了。 在整个训练过程中,我们希望监控训练误差和验证误差这两个数字。 较少的过拟合可能表明现有数据可以支撑一个更强大的模型, 较大的过拟合可能意味着我们可以通过正则化技术来获益。      九:总结:   真实数据通常混合了不同的数据类型,需要进行预处理。   常用的预处理方法:将实值数据重新缩放为零均值和单位方法;用均值替换缺失值。   将类别特征转化为指标特征,可以使我们把这个特征当作一个独热向量来对待。   我们可以使用K折交叉验证来选择模型并调整超参数。   对数对于相对误差很有用。   视频,笔记和代码,以及注释都已经上传网盘,放在主页置顶文章
版权说明:
1.版权归本网站或原作者所有;
2.未经本网或原作者允许不得转载本文内容,否则将视为侵权;
3.转载或者引用本文内容请注明来源及原作者;
4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。
你可能感兴趣的文章
搜索
最新留言
关注我们
关注我们
微信
关注我们
微博
请到后台主题设置添加

Powered ByZ-Blog.