学习Kaggle的第一个比赛就是Titanic,断断续续的半年时间,从小白到杀入9%。XGBoost果真是Kaggle杀器,帮我在Titanic中进入9%、zillow进入22%。

简介

Titanic是Kaggle竞赛里的入门比赛之一,要求参赛者根据乘客的属性来预测是否幸存,是典型的二分类(Binary Classifier)问题。解决二分类问题的算法有很多:决策树、随机森林、GBM,而XGBoost是GBM的优化实现。因此本文以Titanic幸存者预测竞赛为例,介绍XGBoost的调参技巧。

一、读取数据,清洗数据

1.读取数据

#coding:utf-8
import numpy as np
import pandas as pd
from xgboost import XGBClassifier
from sklearn.cross_validation import KFold
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import accuracy_score#read data
train = 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())# childtitanic["child"] = titanic["Age"].apply(lambda x: 1 if x < 15 else 0)# sextitanic["sex"] = titanic["Sex"].apply(lambda x: 1 if x == "male" else 0)titanic["Embarked"] = titanic["Embarked"].fillna("S")# embarkdef getEmbark(Embarked):if Embarked == "S":return 1elif Embarked == "C":return 2else:return 3titanic["embark"] = titanic["Embarked"].apply(getEmbark)# familysizetitanic["fimalysize"] = titanic["SibSp"] + titanic["Parch"] + 1# cabindef getCabin(cabin):if cabin == "N":return 0else:return 1titanic["cabin"] = titanic["Cabin"].apply(getCabin)# namedef getName(name):if "Mr" in str(name):return 1elif "Mrs" in str(name):return 2else:return 0titanic["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数据分析

XGBoost调参技巧(二)Titanic实战Top9%相关推荐

  1. 视觉模型精度如何更上一层楼?百度技术专家实战演示调参技巧

    作者 | 王金许       责编 | 欧阳姝黎 出品 | CSDN(ID:CSDNnews) 随着计算机视觉的应用场景拓展得愈加广泛,与此同时,AI开发者对企业级视觉模型开发的精度与推理速度也更加关 ...

  2. xgboost调参指南

    python机器学习-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campa ...

  3. 棋牌游戏用户流失预测——Xgboost调参

    一.项目介绍 本项目通过对棋牌游戏数据的探索,通过python数据处理以及可视化,最后进行数据建模预测,整个项目分为项目目的的确定.数据的预处理.对数据的分析和项目总结这五个部分. 二.项目流程 项目 ...

  4. 漫谈机器学习的【泛化能力】【模型能力】【调参技巧】_CodingPark编程公园

    漫谈机器学习 完成第一幅初稿 完成终稿 1945年12月5日 1946年1月17日 前言 上面的画就是20世纪最著名的抽象派画家毕加索于1946年1月17日完稿的画作--公牛,寥寥几笔,勾勒出公牛的& ...

  5. 深度学习调参技巧总结

    深度学习调参技巧总结 做dl也有一段时间了,积累了一些经验,也在网上看到一些别人的经验.  为了面试,结合知乎上面的问答,我也总结了一下,欢迎大家补充. 知乎 深度学习调参有哪些技巧? 一. 初始化  ...

  6. 深度学习这么调参训练_聊一聊深度学习中的调参技巧?

    本期问题能否聊一聊深度学习中的调参技巧? 我们主要从以下几个方面来讲.1. 深度学习中有哪些参数需要调? 2. 深度学习在什么时候需要动用调参技巧?又如何调参? 3. 训练网络的一般过程是什么? 1. ...

  7. 手把手写深度学习(18):finetune微调CLIP模型的原理、代码、调参技巧

    前言:在前面的博客<手把手写深度学习(16):用CILP预训练模型搭建图文检索系统/以图搜图/关键词检索系统>中介绍了如何在图文检索.以图搜图.关键词检索等任务中使用CLIP.这篇博客重点 ...

  8. 深度学习网络调参技巧

    深度学习网络调参技巧 本文转载自[炼丹实验室],讲了一些深度学习训练的技巧,其中包含了部分调参心得:深度学习训练心得.不过由于一般深度学习实验,相比普通机器学习任务,时间较长,因此调参技巧就显得尤为重 ...

  9. 深度卷积神经网络(CNN tricks)调参技巧

    (53条消息) 深度卷积神经网络(CNN tricks)调参技巧(一)学习率调节_踏雪飞鸿的博客-CSDN博客https://blog.csdn.net/weixin_38957591/article ...

最新文章

  1. SAP MM 条件类型中PB00的‘Group Cond.‘标记的作用?
  2. 【CodeVS 1540】银河英雄传说 2002年NOI全国竞赛
  3. CEDD(Color and Edge Directivity Descriptor)学习篇
  4. pcl如何设置colorbar_突然加更 | 子图、colorbar和标题
  5. Java虚拟机--------JVM常见参数
  6. python的基础是java_Python基础学习
  7. 《C程序设计新思维》一第6章 玩转指针6.1 自动、静态和手工内存
  8. 键盘不能使用或者提示没有键盘开不了机的【解决办法】
  9. (转)栈与堆栈的区别
  10. Codeforces Round #381 (Div. 2) D. Alyona and a tree 树上二分+前缀和思想
  11. Java程序员不容错过的开发趋势
  12. 几个经典的递归小程序
  13. vue中播放消息提示音
  14. 中小板上市要走那些流程
  15. linux环境变量占位符,linuxea:go fmt简单用法和占位符使用(6)
  16. vue中使用echarts中国地图
  17. 2-5 K8s图形化管理界面dashboard
  18. 【Jetpack篇】LiveData取代EventBus,安卓面试项目
  19. 解决Virtua Box 中的XP系统虚拟机连不上网问题
  20. 人总要有奋斗目标的坚持

热门文章

  1. 使用指针输入输出一维数组
  2. python email模块详解_python模块之email: 电子邮件编码解码 (一、解码邮件)-阿里云开发者社区...
  3. iOS 开发中的多线程
  4. ORACLE中实现表变量的方法
  5. [leetcode]Multiply Strings @ Python
  6. jbpm4 org.hibernate.exception.ConstraintViolationException
  7. Linux大文件传输(转)
  8. java swing原理浅析
  9. ITSM四大管理工具的比较
  10. windows 域的一些概念