目录

引言

一、 数据的特征处理

二、导入XGBoost模型

三、 使用其他模型于XGBoost进行对比


引言

在XGBoost基本原理博文中我们介绍了XGBoost的基本原理,本篇博文我们将介绍XGBoost的基本使用方法,作为新手的学习参考。

本文使用kaggle上的泰坦尼克数据集,只是对XGBoost的使用做一个简单的描述,若想知道Kaggle的整个竞赛流程以及在竞赛中如何使用XGBoost进行预测的话,关注本博客,以后会陆续推出与竞赛内容相关的博客及代码。kaggle的泰坦尼克的数据集分为训练数据和测试数据,测试数据与训练数据的区别在于测试数据缺少‘survival’列,即为我们需要预测的列,数据集中的每列描述如下:
    survival------表示乘客是否存活;0=No,1=Yes
    pclass------表示票的等级;1=1st,2=2nd,3=3rd
    sex------表示乘客性别;
    Age------表示乘客年龄
    sibsp------表示在船上的兄弟姐妹加上配偶的数量
    parch------表示在船上的父母加上子女的数量
    ticket------表示票的编号
    fare------表示票价
   cabin------表示船舱编号
   embarked------表示乘客登录的港口;C = Cherbourg, Q = Queenstown, S = Southampton
       接下来就是如何进行简单的特征处理,以及如何用XGBoost对测试集进行预测,同时也会使用其他的模型与XGBoost进行比较。

一、 数据的特征处理

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn import cross_validation
from sklearn.preprocessing import LabelEncoderimport warnings
warnings.filterwarnings('ignore')
train = pd.read_csv('data/train.csv')
test = pd.read_csv('data/test.csv')
train.info()  # 打印训练数据的信息
输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB

从输出信息中可以看出训练集一共有891个样本,12个特征,所有数据所占的内存大小为83.6K;所有的特征中有两个特征缺失情况较为严重,一个是Age,一个是Cabin;一个缺失不严重Embarked;数据一共有三种类型,float64(2), int64(5), object(5)。

接下来就是对数据的缺失值进行处理,这里采用的方法是对连续值用该列的平均值进行填充,非连续值用该列的众数进行填充,还可以使用机器学习的模型对缺失值进行预测,用预测的值来填充缺失值,该方法这里不做介绍:

def handle_na(train, test):  # 将Cabin特征删除fare_mean = train['Fare'].mean()  # 测试集的fare特征有缺失值,用训练数据的均值填充test.loc[pd.isnull(test.Fare), 'Fare'] = fare_meanembarked_mode = train['Embarked'].mode()  # 用众数填充train.loc[pd.isnull(train.Embarked), 'Embarked'] = embarked_mode[0]train.loc[pd.isnull(train.Age), 'Age'] = train['Age'].mean()  # 用均值填充年龄test.loc[pd.isnull(test.Age), 'Age'] = train['Age'].mean()return train, testnew_train, new_test = handle_na(train, test)  # 填充缺失值

由于Embarked,Sex,Pclass特征是离散特征,所以对其进行one-hot/get_dummies编码

# 对Embarked和male特征进行one-hot/get_dummies编码
new_train = pd.get_dummies(new_train, columns=['Embarked', 'Sex', 'Pclass'])
new_test = pd.get_dummies(new_test, columns=['Embarked', 'Sex', 'Pclass'])

然后再去除掉PassengerId,Name,Ticket,Cabin, Survived列,这里不使用这些特征做预测

target = new_train['Survived'].values
# 删除PassengerId,Name,Ticket,Cabin, Survived列
df_train = new_train.drop(['PassengerId','Name','Ticket','Cabin','Survived'], axis=1).values
df_test = new_test.drop(['PassengerId','Name','Ticket','Cabin'], axis=1).values

二、导入XGBoost模型

因为XGBoost是使用的是一堆CART树进行集成的,而CART(Classification And Regression Tree)树即可用作分类也可用作回归,这里仅仅介绍XGBoost的分类,回归问题类似,有需要请访问XGBoost API的官网进行查看。

class xgboost.XGBClassifier(max_depth=3, learning_rate=0.1, n_estimators=100, silent=True, objective='binary:logistic', booster='gbtree', n_jobs=1, nthread=None, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, base_score=0.5, random_state=0, seed=None, missing=None, **kwargs)

max_depth : int  表示基学习器的最大深度;
learning_rate : float  表示学习率,相当于原生版本的 "eta";
n_estimators: int  表示去拟合的boosted  tree数量;
silent:boolean  表示是否在运行boosting期间打印信息;
objective:string or callable  指定学习任务和相应的学习目标或者一个自定义的函数被使用,具体看原生版本的objective;
booster:string  指定要使用的booster,可选项为:gbtree,gblinear 或 dart;
n_jobs:int  在运行XGBoost时并行的线程数量。
gamma:float  在树的叶节点上进行进一步分区所需的最小损失的减少值,即加入新节点进入的复杂度的代价;
min_child_weight : int  在子节点中实例权重的最小的和;
max_delta_step : int  我们允许的每棵树的权重估计最大的delta步骤;
subsample :float  训练样本的子采样率;
colsample_bytree :float  构造每个树时列的子采样率。
colsample_bylevel :float  在每一层中的每次切分节点时的列采样率;
reg_alpha :float  相当于原生版本的alpha,表示L1正则化项的权重系数;
reg_lambda: float  相当于原生版本的lambda,表示L2正则化项的权重系数;
scale_pos_weight:float  用来平衡正负权重;
base_score:  所有实例的初始预测分数,全局偏差;
random_state:int  随机种子;
missing:float,optional  需要作为缺失值存在的数据中的值。 如果为None,则默认为np.nan。

XGBoost的sklearn的接口版本用法与sklearn中的模型的用法相同,这里简单的进行使用

X_train,X_test,y_train,y_test = train_test_split(df_train,target,test_size = 0.3,random_state = 1)model = xgb.XGBClassifier(max_depth=3, n_estimators=200, learn_rate=0.01)
model.fit(X_train, y_train)
test_score = model.score(X_test, y_test)
print('test_score: {0}'.format(test_score))

下面是XGBoost的sklearn接口版本对数据进行预测的结果:

三、 使用其他模型于XGBoost进行对比

# 应用模型进行预测
model_lr = LogisticRegression()
model_rf = RandomForestClassifier(n_estimators=200)
model_xgb = xgb.XGBClassifier(max_depth=5, n_estimators=200, learn_rate=0.01)
models = [model_lr, model_rf, model_xgb]
model_name = ['LogisticRegression', '随机森林', 'XGBoost']cv = ShuffleSplit(len(df_train), n_iter=3, test_size=0.3, random_state=1)
for i in range(3):print(model_name[i] + ":")model = models[i]for train, test in cv:    model.fit(df_train[train], target[train])train_score = model.score(df_train[train], target[train])test_score = model.score(df_train[test], target[test])print('train score: {0:.5f} \t test score: {0:.5f}'.format(train_score, test_score))

各个模型的运行结果如下:

从上面的结果可以看出,XGBoost的预测结果略好于LogisticRegression和随机森林分类,但是这都是可以继续调参的,调出好的参数会有更好的预测结果。

XGBoost 、逻辑回归、随机森林 模型实战对比相关推荐

  1. 【数据分析与挖掘】基于LightGBM,XGBoost,逻辑回归的分类预测实战:英雄联盟数据(有数据集和代码)

    机器学习-LightGBM 一.LightGBM的介绍与应用 1.1 LightGBM的介绍 1.2 LightGBM的应用 二.数据集来源 三.基于英雄联盟数据集的LightGBM分类实战 Step ...

  2. 大数据预测实战-随机森林预测实战(四)-模型微调

    接下来介绍下一位参赛选手--GridSearchCV(),它要做的事情就跟其名字一样,进行网络搜索,也就是一个一个地遍历,不能放过任何一个可能的参数组合.就像之前说的组合有多少种,就全部走一遍,使用方 ...

  3. R语言使用caret包构建随机森林模型(random forest)构建回归模型、通过method参数指定算法名称、通过ntree参数指定随机森林中树的个数

    R语言使用caret包构建随机森林模型(random forest)构建回归模型.通过method参数指定算法名称.通过ntree参数指定随机森林中树的个数 目录

  4. R语言决策树、bagging、随机森林模型在训练集以及测试集的预测结果(accuray、F1、偏差Deviance)对比分析、计算训练集和测试集的预测结果的差值来分析模型的过拟合(overfit)情况

    R语言决策树.bagging.随机森林模型在训练集以及测试集的预测结果(accuray.F1.偏差Deviance)对比分析.计算训练集和测试集的预测结果的差值来分析模型的过拟合(overfit)情况 ...

  5. R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型

    R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型 目录 R语言xgboost包:使用xgboost算法实现随机森林(random forest)模型

  6. 大数据预测实战-随机森林预测实战(四)-模型调参

    之前对比分析的主要是数据和特征层面,还有另一部分非常重要的工作等着大家去做,就是模型调参问题,在实验的最后,看一下对于树模型来说,应当如何进行参数调节. 调参是机器学习必经的一步,很多方法和经验并不是 ...

  7. 机器学习笔记 十九:由浅入深的随机森林模型之分类

    随机森林学习内容 1. 集成学习 2.sklearn中的集成算法 2.1 sklearn中的集成算法模块ensemble 2.2 RandomForestClassifier 2.2.1 参数 2.2 ...

  8. 随机森林模型sklearn_Sklearn_随机森林

    一.集成算法概述 集成学习(ensemble learning)是时下非常流行的机器学习算法,它本身不是一个单独的机器学习算法,而是通 过在数据上构建多个模型,集成所有模型的建模结果.基本上所有的机器 ...

  9. python数据项目分析实战技法_《Python数据分析与机器学习实战-唐宇迪》读书笔记第9章--随机森林项目实战——气温预测(1/2)...

    第9章--随机森林项目实战--气温预测(1/2) 第8章已经讲解过随机森林的基本原理,本章将从实战的角度出发,借助Python工具包完成气温预测任务,其中涉及多个模块,主要包含随机森林建模.特征选择. ...

最新文章

  1. html代码闪烁的文字怎么打,HTML最简单的文字闪烁代码
  2. 计算机专业英语文章翻译,计算机专业英语英汉双语文章翻译
  3. Nginx访问控制_IP访问控制(http_access_module)原理、局限性、解决方法讲解
  4. graphcut 用于最优缝合先寻找_Image Stitching
  5. vue 登录模板_不用自己搭建后台模板,使用这个就够了
  6. 从架构到代码:软件开发最新趋势解析
  7. 八、Flume的构架,安装和基本使用
  8. 使用VNC远程安装CentOS 7操作系统
  9. php实现无限级树型菜单(函数递归算法)
  10. C# 、.NET、ASP.NET MVC积累
  11. 7.2.5 dps 测试软件,7.2.5冰DK萨墓六大DPS饰品测试:属性机制及分析
  12. 《商务与经济统计》(三)
  13. ArcGIS多种面积计算方法的区别
  14. Daz3d:如何使用景深
  15. 关于Latex学习网站推荐
  16. 用Android手机远程桌面连接登陆Windows10(用微软账号登陆),Microsoft账户登陆的计算机远程桌面连接问题
  17. 没有捷径!没有捷径!没有捷径!
  18. Mac制作U盘安装盘和安装系统
  19. 基于自适应权重和Levy飞行的改进鲸鱼优化算法
  20. 【06月04日】A股滚动市盈率PE历史新低排名

热门文章

  1. 网络安全高级从业者应该掌握哪些知识
  2. 晓莲说-何不原创:java 实现二维数组冒泡排序
  3. 通电后第一次开机黑屏_为什么我的电脑第一次开机是黑屏,要开第二次才可以...
  4. 仅仅9行代码 爬取教务处成绩 仅用2个模块 正方教务系统
  5. BootStrap网上书城首页布局
  6. 传统家居行业阵痛,美乐乐家居们该何去何从?
  7. js公历日期转为农历日期
  8. 根据来电号码显示人名
  9. mysql数据库插入表情包emoji表情,出错解决方案
  10. (附源码)ssm日语学习系统 毕业设计 271621