使用TensorFlow预测NYC AirBnB租赁价格
Airbnb是一个在线市场,人们可以将其房屋出租或备用房间出租给客人。对于房东,Airbnb收取每笔预订的3%佣金,而客人则收取6%至12%的佣金。
自2009年成立以来,公司已从每年帮助21
在本文中,我将使用Kaggle纽约市Airbnb开放数据数据集,并尝试使用TensorFlow建立神经网络模型进行预测。
目标是建立一个合适的机器学习模型,该模型将能够预测更多住宿数据的价格。
在整个本文中,我将展示我创建的Jupyter笔记本的见解。您可以在GitHub上找到它。
加载数据
首先,让我们看一下加载数据。我们使用wget直接从Kaggle网站提取数据。注意-o标志指示文件名。
数据集应如下所示。它总共有48
数据分析和预处理
Seaborn有一个非常简洁的API,可为各种数据绘制各种图形。如果您对语法不满意,请随时阅读本文。
在熊猫数据帧上使用了相关性之后,我们将其传递给了一个热图函数。结果如下:
由于我们同时具有经度和经度以及邻域数据,因此我们创建一个散点图:
此外,我删除了重复项和一些不必要的列,并填充了“ reviews_per_month”列,因为它缺少太多值。数据看起来像这样。它有10列,没有零值:
太好了吧?
首先,计算机做数字。这就是为什么我们必须将分类列转换为一键编码的向量。这是使用熊猫的分解方法完成的。您可能为此使用了许多其他工具:
为了将损失函数保持在稳定的范围内,让我们对一些数据进行归一化,以使平均值为0,标准偏差为1。
功能交叉
我们必须进行一次更改,这是必不可少的。为了使经度和纬度与模型输出相关联,我们必须创建一个特征交叉。以下链接应为您提供足够的上下文,以使您对要素交叉有适当的了解:
https://developers.google.com/machine-learning/crash-course/feature-crosses/video-lecture
https://www.kaggle.com/vikramtiwari/feature-crosses-tensorflow-mlcc
我们的目标是采用经度和纬度,这是本书中最古老的技巧之一。如果仅将这两列作为模型的值,它将假定这些值与输出逐渐相关。
取而代之的是,我们将使用要素十字,这意味着我们将经度*角度图拆分为一个网格。相当微妙的小问题。对我们来说幸运的是,TensorFlow使它变得容易。
我正在通过(max-min)/ 100的迭代从最小值到最大值来制作均匀分布的帧的网格。
我正在使用100×100的网格:
本质上,我们在这里要做的是定义一个带有较早定义的边界的存储桶列,并创建一个DenseFeatures层,该层稍后将传递给Sequential API。
如果您不熟悉Tensorflow语法,请检查以下文档:https ://www.tensorflow.org/api_docs/python/tf/feature_column/
现在,终于,我们可以进行模型训练了。也就是说,除了拆分数据部分。
显然,我们必须创建两个数据集,一个包含所有数据,另一个包含预测分数。由于数据大小不匹配,并且可能代表我们模型的问题,因此我决定截断太长的数据。
建立模型
最后,创建Keras顺序模型。
我们正在使用Adam优化器,均方误差损失和两个指标来编译模型。在模型训练时跟踪这些。
此外,我们使用了两个回调:
EarlyStopping,这是不言自明的,但是请检查文档
降低高原地区的学习率。当然检查文档就这一个
在训练了50个时期(批处理大小为64个)之后,我们的模型非常成功。
题库