基于xgboost的波士顿房价预测kaggle实战

2018年8月24日笔记 这是作者在波士顿房价预测项目的第3篇文章,在查看此篇文章之前,请确保已经阅读前2篇文章。 第2篇文章链接:https://www.jianshu.com/p/f34f22258a0a

0.打开jupyter notebook

不知道怎么打开jupyter notebook的朋友请查看我的入门指南文章:https://www.jianshu.com/p/bb0812a70246

1.准备数据

kaggle网站波士顿房价项目链接:https://www.kaggle.com/c/boston-housing 网页内容如下图所示:

image.png

查看项目评分标准,如下图所示:

image.png

从上图我们可以看出,该项目使用RMSE指标评估。 RMSE是root mean square error的简写,中文叫做均方根误差。 上图中的公式有错误,正确应该如下图所示:

image.png

2.作者的最高分

波士顿房价预测项目是2016年的项目,现在已经结束。 所以读者可以先熟悉提交答案的流程,作者提供自己的最高分文件。 提交文件下载链接: https://pan.baidu.com/s/1DxSEuysjOLCVuNlnw41-oQ 密码: b8jm 提交结果如下图所示:

image.png

从上图的结果可以看到,作者的最高分有3.02分,可以排到第5名。 后面的章节讲述提升模型回归效果,即降低RMSE的过程。

3.下载数据集

如下图所示,下载红色箭头标示的3个文件。 下载完成后,就可以开始编程。

image.png

4.加载数据集

train.csv文件中的表格有15个字段,第1个字段是ID,最后1个字段是预测目标值。 用df.iloc[:,1:-1]取除了第1个字段和最后1个字段的其他字段。

import pandas as pd

def dataProcessing(df):
    field_cut = {
    'crim' : [0,10,20, 100],
    'zn' : [-1, 5, 18, 20, 40, 80, 86, 100], 
    'indus' : [-1, 7, 15, 23, 40],
    'nox' : [0, 0.51, 0.6, 0.7, 0.8, 1],
    'rm' : [0, 4, 5, 6, 7, 8, 9],
    'age' : [0, 60, 80, 100],
    'dis' : [0, 2, 6, 14],
    'rad' : [0, 5, 10, 25],
    'tax' : [0, 200, 400, 500, 800],
    'ptratio' : [0, 14, 20, 23],
    'black' : [0, 100, 350, 450],
    'lstat' : [0, 5, 10, 20, 40]
    }
    cut_df = pd.DataFrame()
    for field in field_cut.keys():
        cut_series = pd.cut(df[field], field_cut[field], right=True)
        onehot_df = pd.get_dummies(cut_series, prefix=field)
        cut_df = pd.concat([cut_df, onehot_df], axis=1)
    new_df = pd.concat([df, cut_df], axis=1)
    return new_df

df = pd.read_csv('train.csv')
field_df = df.iloc[:,1:-1]
feature_df = dataProcessing(field_df)

根据网上的资料显示,有部分异常值的预测目标值为50。 清除异常值,代码如下:

X = feature_df
y = df['medv'].values
print(X.shape)
X = X[y!=50]
y = y[y!=50]
print(X.shape)

上面一段代码的运行结果如下:

(333, 61) (322, 61)

5.模型训练

from xgboost import XGBRegressor
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import ShuffleSplit


xgb_model = XGBRegressor(nthread=7)
cv_split = ShuffleSplit(n_splits=6, train_size=0.7, test_size=0.2)
grid_params = dict(
    max_depth = [4, 5, 6, 7],
    learning_rate = np.linspace(0.03, 0.3, 10),
    n_estimators = [100, 200]
)
grid = GridSearchCV(xgb_model, grid_params, cv=cv_split, scoring='neg_mean_squared_error')
grid.fit(X, y)

查看模型的最优参数和最优rmse指标,代码如下:

print(grid_model.best_params_)
print('rmse:', (-grid_model.best_score_) ** 0.5)

上面一段代码的运行结果如下:

{'learning_rate': 0.03, 'max_depth': 6, 'n_estimators': 200} rmse: 2.885408101511587

利用训练好的结果,对测试集做回归预测,代码如下:

predict_df = pd.read_csv('test.csv')
predict_X = dataProcessing(predict_df.iloc[:,1:]).values
predict_y = grid_model.predict(predict_X)
save_df = pd.DataFrame({
    'ID' : predict_df.ID,
    'medv' : predict_y
})
save_df.to_csv('xgb_boston_submission1.csv', index=False)

6.提交作答文件

点击下图红色箭头标示处,界面如下图所示。 分为2步:1.上传作答文件;2.对此次作答做简单的描述。

image.png

作者的作答文件命名为xgb_boston_submission1.csv,如下图所示。 重新运行的提交分数为3.10,分数略有下降,但是仍能进入前5。

image.png

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【最新TensorFlow1.4.0教程01】TF1.4.0介绍与动态图机制 Eager Execution使用

【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视...

3918
来自专栏河湾欢儿的专栏

05-图片优化合并

遵循的原则: 把同属于一个模块的图片进行合并 把大小相近的图片进行合并 把色彩相近的图片进行合并 综合以上凡是合并

1272
来自专栏PPV课数据科学社区

手把手教你用1行代码实现人脸识别 -- Python Face_recognition

环境要求: Ubuntu17.10 Python 2.7.14 环境搭建: 1. 安装 Ubuntu17.10 > 安装步骤在这里 2. 安装 Python2....

4318
来自专栏小巫技术博客

A008-drawable资源

关于drawable资源笔者之前有写过两篇文章: Android-自定义图像资源的使用(1) Android-自定义图像资源的使用(2) 这里笔者就不做过多的赘...

802
来自专栏ATYUN订阅号

Machine Box创始人教你快速建立一个ML图像分类器

AiTechYun 编辑:Yining Machine Box的创始人Mat Ryer在medium上分享了一篇博文,意在教你在硬盘上快速的建立一个机器学习图像...

3566
来自专栏专知

【前沿】Pytorch开源VQA神经网络模块,让你快速完成看图问答

【导读】近期,NLP专家Harsh Trivedi使用Pytorch实现了一个视觉问答的神经模块网络,想法是参考CVPR2016年的论文《Neural Modu...

2988
来自专栏小巫技术博客

Python 中文图片OCR

5403
来自专栏芋道源码1024

Dubbo 源码解析 —— LoadBalance

前言 终于到了集群容错中的最后一个关键词,也就是 LoadBalance(负载均衡),负载均衡必然会涉及一些算法.但是也不用太担心,算法这个词虽然高大上,但是算...

3954
来自专栏云计算认知升级

【腾讯云的1001种玩法】 Laravel 整合万向优图图片管理能力,打造高效图片处理服务

万象优图是腾讯云旗下的图片处理服务,能够帮助用户快速构建一个方便、快捷、处理性能强的图片处理服务,借助 万象优图 For Laravel 插件,我们可以轻松的在...

1.3K0
来自专栏嵌入式程序猿

运算放大器使用必须遵循的六条军规

运算放大器是作为最通用的模拟器件,广泛用于信号变换调理、ADC采样前端、电源电路等场合中。虽然运放外围电路简单,不过在使用过程中还是有很多需要注意的地方。 1...

3566

扫码关注云+社区

领取腾讯云代金券