纽约市Airbnb价格预测:XGBoost与Keras深度对比
立即解锁
发布时间: 2025-09-10 01:24:39 阅读量: 5 订阅数: 18 AIGC 


表格数据机器学习实战
### 纽约市Airbnb价格预测:XGBoost与Keras深度对比
#### 1. 代码概述
在介绍完纽约市Airbnb数据集后,我们来看看解决该问题的代码。这里不会详细介绍代码的每一个细节,但了解各部分代码如何协同工作是很重要的。
下面是构成解决方案的文件总结:
```mermaid
graph LR
A[Input CSV] --> B[Data cleanup notebook]
B --> C[Cleaned-up pickle file]
B --> D[Cleanup config file]
C --> E[XGBoost training notebook]
C --> F[Keras training notebook]
E --> G[Training config file for XGBoost]
F --> H[Training config file for Keras]
```
具体文件信息如下:
- **输入CSV文件**:[https://mng.bz/avJ7](https://mng.bz/avJ7)
- **数据清理笔记本**:[https://mng.bz/gawV](https://mng.bz/gawV)。虽然XGBoost和Keras版本的代码使用相同的清理笔记本,但XGBoost有内置处理缺失值等功能,所以仅用于XGBoost的清理笔记本可能比通用版本更简单。
- **清理配置文件**:[https://mng.bz/ey7Q](https://mng.bz/ey7Q)
- **XGBoost训练配置文件**:[https://mng.bz/pKOz](https://mng.bz/pKOz)
- **Keras训练配置文件**:[https://mng.bz/vKpr](https://mng.bz/vKpr)
- **XGBoost训练笔记本**:[https://mng.bz/YDGA](https://mng.bz/YDGA)。在梯度提升解决方案中选择XGBoost是因为它很流行,且网上有很多相关指导。
- **Keras训练笔记本**:[https://mng.bz/JYwP](https://mng.bz/JYwP)。选择Keras作为深度学习的代表方法,是因为它和原生TensorFlow一样,在商业应用中最常用。
为方便起见,XGBoost和Keras解决方案分别放在两个文件夹中,但大部分代码是通用的:
- XGBoost解决方案代码:[https://mng.bz/GeEO](https://mng.bz/GeEO)
- Keras解决方案代码:[https://mng.bz/zZ4Q](https://mng.bz/zZ4Q)
这两个仓库的差异仅在于训练笔记本和训练配置文件。
#### 2. 使用Keras的深度学习解决方案
在深入研究Airbnb数据集和解决方案代码的细节之前,我们先了解一下Keras解决方案的软件栈。
```mermaid
graph LR
A[Airbnb NYC solution] --> B[TensorFlow]
B --> C[Keras]
C --> D[get_model() function]
```
Keras是用于实现深度学习解决方案的高级API,本章的深度学习解决方案依赖于TensorFlow这个底层框架,因为Keras是基于TensorFlow构建的。
#### 3. 训练特征
两个解决方案的目标都是预测给定Airbnb房源的价格是高于还是低于输入数据集中的平均价格。为实现这一目标,两个模型都在相同的特征集上进行训练。训练模型使用的特征子集在模型训练配置文件中定义:[https://mng.bz/OBoE](https://mng.bz/OBoE)。
以下是配置文件中指定的训练特征部分:
```plaintext
categorical: # 分类列
- 'neighbourhood_group'
- 'neighbourhood'
- 'room_type'
continuous: # 连续列
- 'minimum_nights'
- 'number_of_reviews'
- 'reviews_per_month'
- 'calculated_host_listings_count'
```
配置文件还列出了明确从训练过程中排除的特征:
```plaintext
excluded: # 不用于训练输入特征的列
- 'price'
- 'id'
- 'latitude'
- 'longitude'
- 'host_id'
- 'last_review'
- 'name'
- 'host_name'
- 'availability_365'
```
不将这些列用作训练特征的原因如下:
- **价格**:不将其作为训练特征,因为它是模型的目标,即判断房源价格是否高于或低于平均价格。
- **ID列**:不包含在内是因为它们只是分配给房源和房东的数字ID,不携带关于房源价格的任何信息。
- **经纬度**:不使用经纬度作为特征,因为房源的地理位置已经编码在用于训练模型的`neighbourhood_group`和`neighbourhood`特征中。如果没有这些特征,我们可以使用经纬度值(或从它们派生的极坐标)来根据位置对房源进行聚类或将其转换为极坐标。但使用每个房源的原始经纬度作为特征可能会导致过拟合,因为每个房源的经纬度对都是唯一的。
- **名称和房东名称**:不包含在内是因为它们是一些任意的标记集,用于人类识别房源。一个有趣的实验是将`host_name`作为特征,看看它是否能提供与同一房东的房源价格相关的信息。
- **`availability_365`**:不将其包含在特征集中是因为该列难以解释。
#### 4. 梯度提升和深度学习解决方案对比
两个解决方案仅在少数几个文件上存在差异。下面是不同方面代码复杂度的对比表格:
| 代码复杂度方面 | XGBoost | Keras深度学习模型 |
| --- | --- | --- |
| 数据准备 | 需要代码块将numpy数组列表转换为列表的numpy数组 | NA - 数据准备是为Keras深度学习解决方案设计的 |
| 模型定义 | 单条语句,符合Scikit-learn模式 | 需要代码块定义模型的层,每种列类型(连续、
0
0
复制全文
相关推荐










