融合梯度提升和深度学习解决东京Airbnb问题
立即解锁
发布时间: 2025-09-10 01:24:45 阅读量: 3 订阅数: 12 AIGC 


表格数据机器学习实战
### 融合梯度提升和深度学习解决东京Airbnb问题
#### 1. XGBoost模型评估
首先,我们使用XGBoost模型对东京Airbnb数据集进行训练和预测,代码如下:
```python
xgb.fit(X_train, y_train)
y_pred = xgb.predict(X_test)
xgb_oof_preds[test_index] = y_pred
r2_scores.append(r2_score(y_test, y_pred))
rmse_scores.append(np.sqrt(mean_squared_error(y_test, y_pred)))
mae_scores.append(mean_absolute_error(y_test, y_pred))
print(f"Mean cv R-squared: {np.mean(r2_scores):.3f}")
print(f"Mean cv RMSE: {np.mean(rmse_scores):.3f}")
print(f"Mean cv MAE: {np.mean(mae_scores):.3f}")
```
通过优化后的XGBoost模型,其性能明显优于线性回归基线,具体指标对比如下:
| 指标 | 线性回归基线 | 优化后的XGBoost |
| ---- | ---- | ---- |
| R-squared | 0.320 | 0.729 |
| 均方根误差(RMSE) | 17197.323 | 10853.661 |
| 平均绝对误差(MAE) | 12568.371 | 6611.609 |
从表格数据可以看出,优化后的XGBoost模型在各项指标上都有显著提升。
#### 2. 选择深度学习解决方案
在之前的研究中,我们回顾了多种用于处理表格数据的深度学习框架,包括Keras、fastai和专门为表格数据设计的库(如TabNet)。为了与XGBoost模型进行公平比较,我们需要选择合适的深度学习框架。不同框架的优缺点如下表所示:
| 框架 | 优点 | 缺点 |
| ---- | ---- | ---- |
| Keras | 模型细节透明,社区大,易解决常见问题 | 无内置表格数据支持 |
| fastai | 显式支持表格数据模型,代码紧凑,有智能默认值 | 社区相对Keras较小 |
| Tabular数据库(如TabNet) | 专门处理表格数据集 | 社区碎片化,维护不一致,代码运行可靠性差 |
考虑到数据集的特点以及与XGBoost模型进行公平比较的需求,我们最终选择了fastai框架。因为fastai专为表格数据设计,具有智能默认值,能快速得到不错的结果,无需大量调优。
#### 3. fastai解决方案详细步骤
以下是使用fastai框架解决东京Airbnb问题的核心代码:
```python
from fastai.tabular.all import *
procs = [FillMissing, Normalize, Categorify]
cat_vars = [
col for col in airbnb_tokyo.columns
if "onehot_encoding__" in col
or "ordinal_encoding__" in col
or "binary__" in col
]
cont_vars = [
col for col in airbnb_tokyo.columns
if "numeric__" in col
or "target_encoding__" in col
]
dep_var = 'target'
cv_splits = cv.split(X, y=neighbourhood_more_than_30)
r2_scores = []
rmse_scores = []
mae_scores = []
dnn_oof_preds = np.zeros(len(X))
for k, (train_index, test_index) in enumerate(cv_splits):
X_train = airbnb_tokyo.set_index("listing_id").iloc[train_index].copy()
X_test = airbnb_tokyo.set_index("listing_id").iloc[test_index].copy()
y_test = airbnb_tokyo["target"].iloc[test_index].copy()
tab = TabularPandas(
X_train, procs, cat_vars, cont_vars,
dep_var, y_block=RegressionBlock(),
splits=RandomSplitter(
valid_pct=0.2, seed=0)(range_of(X_train)),
inplace=True,
reduce_memory=True
)
dls = tab.dataloaders(b
```
0
0
复制全文
相关推荐










