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

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

## 1.准备数据

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

image.png

image.png

image.png

image.png

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

field_df = df.iloc[:,1:-1]
feature_df = dataProcessing(field_df)```

```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

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)```

```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.提交作答文件

image.png

image.png

0 条评论

• ### 房价数据转换和清洗

下载链接：https://pan.baidu.com/s/16D5hw-XBEQnwtsf4fDJ8xw 密码：e1fg

• ### 房价数据转换和清洗2

下载链接：https://pan.baidu.com/s/16D5hw-XBEQnwtsf4fDJ8xw 密码：e1fg

• ### 50道练习实践学习Pandas！

原文地址：https://www.kesci.com/home/project/5ddc974ef41512002cec1dca

• ### Python中字段抽取、字段拆分、记录抽取

1、字段抽取 字段抽取是根据已知列数据的开始和结束位置，抽取出新的列 字段截取函数：slice(start,stop) 注意：和数据结构的访问方式一样，开始位置...

• ### 13个Pandas奇技淫巧

先按Mt列进行分组，然后对分组之后的数据框使用idxmax函数取出Count最大值所在的列，再用iloc位置索引将行取出。有重复值的情况

• ### 13个Pandas实用技巧，有点香 ！

归纳整理了一些工作中常用到的pandas使用技巧，方便更高效地实现数据分析。文章很短，不用收藏就能Get~

• ### pandas数据清洗，排序，索引设置，数据选取

df.isnull() df的空值为True df.notnull() df的非空值为True

• ### 快速介绍Python数据分析库pandas的基础知识和代码示例

“软件工程师阅读教科书作为参考时不会记住所有的东西，但是要知道如何快速查找重·要的知识点。”

• ### 妈妈再也不用担心我忘记pandas操作了

pandas的操作上千种，但对于数据分析的使用掌握常用的操作就可以应付了，更多的操作可以参考pandas官网。