XGBoost调参技巧(二)Titanic实战Top9%
来源:互联网 发布:淘宝号在哪里看 编辑:程序博客网 时间:2024/06/03 09:12
学习Kaggle的第一个比赛就是Titanic,断断续续的半年时间,从小白到杀入9%。XGBoost果真是Kaggle杀器,帮我在Titanic中进入9%、zillow进入22%。
简介
Titanic是Kaggle竞赛里的入门比赛之一,要求参赛者根据乘客的属性来预测是否幸存,是典型的二分类(Binary Classifier)问题。解决二分类问题的算法有很多:决策树、随机森林、GBM,而XGBoost是GBM的优化实现。因此本文以Titanic幸存者预测竞赛为例,介绍XGBoost的调参技巧。
一、读取数据,清洗数据
1.读取数据
#coding:utf-8import numpy as npimport pandas as pdfrom xgboost import XGBClassifierfrom sklearn.cross_validation import KFoldfrom sklearn.grid_search import GridSearchCVfrom sklearn.metrics import accuracy_score#read datatrain = pd.read_csv("../data/train.csv")test = pd.read_csv("../data/test.csv")
导入需要用到的包,注意我导入的是xgboost下的XGBClassifier包,可以结合sciket-learn下的grid_search来对参数进行暴力猜解。
2.清洗数据
def clean_data(titanic):#填充空数据 和 把string数据转成integer表示 titanic["Age"] = titanic["Age"].fillna(titanic["Age"].median()) # child titanic["child"] = titanic["Age"].apply(lambda x: 1 if x < 15 else 0) # sex titanic["sex"] = titanic["Sex"].apply(lambda x: 1 if x == "male" else 0) titanic["Embarked"] = titanic["Embarked"].fillna("S") # embark def getEmbark(Embarked): if Embarked == "S": return 1 elif Embarked == "C": return 2 else: return 3 titanic["embark"] = titanic["Embarked"].apply(getEmbark) # familysize titanic["fimalysize"] = titanic["SibSp"] + titanic["Parch"] + 1 # cabin def getCabin(cabin): if cabin == "N": return 0 else: return 1 titanic["cabin"] = titanic["Cabin"].apply(getCabin) # name def getName(name): if "Mr" in str(name): return 1 elif "Mrs" in str(name): return 2 else: return 0 titanic["name"] = titanic["Name"].apply(getName) titanic["Fare"] = titanic["Fare"].fillna(titanic["Fare"].median()) return titanic# 对数据进行清洗train_data = clean_data(train)test_data = clean_data(test)
二、特征工程
Kaggle竞赛的三个核心步骤:特征工程、调参、模型融合。俗话说:数据和特征决定机器学习的上限,而算法只是用来逼近这个上限,所以特征工程是机器学习能否成功的关键。我们在每个比赛中需要花大量时间来反复完成这个工作。
features = ["Pclass", "sex", "child", "fimalysize", "Fare", "embark", "cabin"]
三、模型选择
1.构造模型
# 简单初始化xgb的分类器就可以clf =XGBClassifier(learning_rate=0.1, max_depth=2, silent=True, objective='binary:logistic')
2.交叉验证kfold
利用skean提供的grid_search来进行交叉验证选择参数。
# 设置boosting迭代计算次数param_test = { 'n_estimators': range(30, 50, 2), 'max_depth': range(2, 7, 1)}grid_search = GridSearchCV(estimator = clf, param_grid = param_test, scoring='accuracy', cv=5)grid_search.fit(train[features], train["Survived"])grid_search.grid_scores_, grid_search.best_params_, grid_search.best_score_
out:
后面是跑出来的结果。这里我也是非常意外,之前试过各种方法,都没有超过0.8,看来XGBoost的效果确实非常不错。
四、提交结果
进步还是非常大的,进入了9%。做到0.8的话对这个比较的数据集基本上算是比较好的了,再往上提高也没有太大的意义,Titanic暂时告一段落。
欢迎关注个人微信公众号:kaggle数据分析
阅读全文
0 0
- XGBoost调参技巧(二)Titanic实战Top9%
- Kaggle入门 (Titanic XGBoost)
- TensorFlow学习笔记二Titanic题目实战
- Titanic Xgboost版代码分析
- XGBoost实战与调优
- xgboost入门与实战(实战调参篇)
- xgboost入门与实战(实战调参篇)
- xgboost入门与实战(实战调参篇)
- xgboost入门与实战(实战调参篇)
- 机器学习实战(三)kaggle titanic随机森林
- xgboost入门与实战(原理篇)
- xgboost入门与实战(原理篇)
- xgboost入门与实战(原理篇)
- 史上最详细的XGBoost实战(上)
- 史上最详细的XGBoost实战(下)
- 实战人品预测之二_热门模型xgboost
- xgboost 调参经验
- xgboost使用调参
- web测试方法总结
- informix Locale not supported
- 纯css写单选,多选图片
- Struts2.2.3配置必须加载的类
- DevOps企业实践指南(8): 安全机制
- XGBoost调参技巧(二)Titanic实战Top9%
- Gym
- MySql中limit子查询的解决办法
- win下如何用cmd转换记事本的编码格式
- PHP获得指定日期的 星期的开始时间 结束时间
- mysql 批量插入、删除
- Zookeeper
- android 报错java.io.IOException: Permission denied .
- mysql事件(event)的简单使用