这里写目录标题

  • 目标:对比各种模型
  • 对比内容:
  • 最终对比结果:
  • 代码:

目标:对比各种模型

对比各种模型,XGBoost直接判了RandomForest、GBDT、决策树、SVM等死刑,XGB+LR精度还能提升。
XGBoost:目前树模型的天花板,所有决策树中,XGBoost的精度最高,运行速度也还不错,所以竞赛中,结构化数据的比赛,基本都是用它了。
另外,实验表明,XGBoost+LR精度还能进一步提升。


对比内容:

模型对比
具体:
1、 比较在测试集上的AUC表现
2、 比较模型完成端到端训练预测的时间
3、 了解算法的优缺点


最终对比结果:

结果如下:
40万条数据。

模型 测试精度AUC 运行时间(秒)
Xgboost 0.9688 7.5972
Xgboost + LR 0.9724 13.1655
RF+LR 0.92432 2.3115
GDBT+LR 0.96249 18.1669
LR 0.9337 0.3479
SVM 0.8703 1104.25

可以看到:

  • XGBoost模型的准确度高过GDBT等树模型,运行速度也尚可接受,另外如果想进一步提升XGBoost的准确度,可以采用XGBoost+LR的方式,还能进一步提升,在数据挖掘比赛中可以试试。
  • LR模型的训练和响应速度真实很不错,0.3秒就搞定了40万条数据,模型准确度不算高。
  • SVM最费时。所以目前估计慢慢也被淘汰了。

代码:

这里用到了一个装饰器,来统计每个函数的运行时间,装饰器这样避免了很多重复性代码

#!/usr/bin python
# -*- coding:utf-8 -*-import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import (RandomTreesEmbedding, RandomForestClassifier,GradientBoostingClassifier)
from sklearn.preprocessing import OneHotEncoder
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, roc_auc_score
from sklearn import svm
from sklearn.pipeline import make_pipeline
import xgboost as xgb
from xgboost.sklearn import XGBClassifier# 打印运行时间,装饰器
import functools
import time
def runtime_decorator(function):@functools.wraps(function)def wrapper(*args, **kwargs):start = time.time()result = function(*args, **kwargs)end = time.time()print("function runtime is", end - start ,'S')return resultreturn wrappernp.random.seed(10000)
n_estimator = 10X, y = make_classification(n_samples=400000, n_features=100, shuffle=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.8)
# To avoid overfitting
X_train, X_train_lr, y_train, y_train_lr = train_test_split(X_train, y_train, test_size=0.5)@runtime_decorator
def RandomForestLR():rf = RandomForestClassifier(max_depth=3, n_estimators=n_estimator)rf_enc = OneHotEncoder()rf_lr = LogisticRegression()rf.fit(X_train, y_train)rf_enc.fit(rf.apply(X_train))rf_lr.fit(rf_enc.transform(rf.apply(X_train_lr)), y_train_lr)y_pred_rf_lr = rf_lr.predict_proba(rf_enc.transform(rf.apply(X_test)))[:, 1]fpr_rf_lr, tpr_rf_lr, _ = roc_curve(y_test, y_pred_rf_lr)auc = roc_auc_score(y_test, y_pred_rf_lr)print("RF+LR:", auc)return fpr_rf_lr, tpr_rf_lr@runtime_decorator
def GdbtLR():grd = GradientBoostingClassifier(n_estimators=n_estimator)grd_enc = OneHotEncoder()grd_lr = LogisticRegression()grd.fit(X_train, y_train)grd_enc.fit(grd.apply(X_train)[:, :, 0])grd_lr.fit(grd_enc.transform(grd.apply(X_train_lr)[:, :, 0]), y_train_lr)y_pred_grd_lr = grd_lr.predict_proba(grd_enc.transform(grd.apply(X_test)[:, :, 0]))[:, 1]fpr_grd_lr, tpr_grd_lr, _ = roc_curve(y_test, y_pred_grd_lr)auc = roc_auc_score(y_test, y_pred_grd_lr)print("GDBT+LR:", auc)return fpr_grd_lr, tpr_grd_lr@runtime_decorator
def Gdbt():grd = GradientBoostingClassifier(n_estimators=n_estimator)grd.fit(X_train, y_train)y_pred_grd = grd.predict_proba(X_test)fpr_grd, tpr_grd, _ = roc_curve(y_test, y_pred_grd)auc = roc_auc_score(y_test, y_pred_grd)print("GDBT:", auc)return fpr_grd, tpr_grd@runtime_decorator
def Xgboost():xgboost = xgb.XGBClassifier(nthread=4, learning_rate=0.08, \n_estimators=50, max_depth=5, gamma=0, subsample=0.9, colsample_bytree=0.5)xgboost.fit(X_train, y_train)y_xgboost_test = xgboost.predict_proba(X_test)[:, 1]fpr_xgboost, tpr_xgboost, _ = roc_curve(y_test, y_xgboost_test)auc = roc_auc_score(y_test, y_xgboost_test)print("Xgboost:", auc)return fpr_xgboost, tpr_xgboost@runtime_decorator
def Lr():# lm = LogisticRegression(n_jobs=4, C=0.1, penalty='l2')lm = LogisticRegression()lm.fit(X_train, y_train)y_lr_test = lm.predict_proba(X_test)[:, 1]fpr_lr, tpr_lr, _ = roc_curve(y_test, y_lr_test)auc = roc_auc_score(y_test, y_lr_test)print("LR:", auc)return fpr_lr, tpr_lr@runtime_decorator
def XgboostLr():xgboost = xgb.XGBClassifier(nthread=4, learning_rate=0.08, \n_estimators=50, max_depth=5, gamma=0, subsample=0.9, colsample_bytree=0.5)xgb_enc = OneHotEncoder()xgb_lr = LogisticRegression(n_jobs=4, C=0.1, penalty='l2')   # Xgboost + LR: 0.973,function runtime is 8.22S# xgb_lr = LogisticRegression()    # Xgboost + LR: 0.9723809376004443,function runtime is 7.22Sxgboost.fit(X_train, y_train)xgb_enc.fit(xgboost.apply(X_train)[:, :])xgb_lr.fit(xgb_enc.transform(xgboost.apply(X_train_lr)[:, :]), y_train_lr)y_xgb_lr_test = xgb_lr.predict_proba(xgb_enc.transform(xgboost.apply(X_test)[:, :]))[:, 1]fpr_xgb_lr, tpr_xgb_lr, _ = roc_curve(y_test, y_xgb_lr_test)auc = roc_auc_score(y_test, y_xgb_lr_test)print("Xgboost + LR:", auc)return fpr_xgb_lr, tpr_xgb_lr@runtime_decorator
def Svm():Svc = svm.SVC()Svc.fit(X_train, y_train)y_svm_test = Svc.predict(X_test)fpr_svm, tpr_svm, _ = roc_curve(y_test, y_svm_test)auc = roc_auc_score(y_test, y_svm_test)print("SVM:", auc)return fpr_svm, tpr_svmif __name__ == '__main__':fpr_rf_lr, tpr_rf_lr = RandomForestLR()fpr_grd_lr, tpr_grd_lr = GdbtLR()fpr_xgboost, tpr_xgboost = Xgboost()fpr_lr, tpr_lr = Lr()fpr_xgb_lr, tpr_xgb_lr = XgboostLr()fpr_svm, tpr_svm = Svm()plt.figure(1)plt.plot([0, 1], [0, 1], 'k--')plt.plot(fpr_rf_lr, tpr_rf_lr, label='RF + LR')plt.plot(fpr_grd_lr, tpr_grd_lr, label='GBT + LR')plt.plot(fpr_xgboost, tpr_xgboost, label='XGB')plt.plot(fpr_lr, tpr_lr, label='LR')plt.plot(fpr_xgb_lr, tpr_xgb_lr, label='XGB + LR')plt.plot(fpr_svm, tpr_svm, label='SVM')plt.xlabel('False positive rate')plt.ylabel('True positive rate')plt.title('ROC curve')plt.legend(loc='best')plt.show()plt.figure(2)plt.xlim(0, 0.2)plt.ylim(0.8, 1)plt.plot([0, 1], [0, 1], 'k--')plt.plot(fpr_rf_lr, tpr_rf_lr, label='RF + LR')plt.plot(fpr_grd_lr, tpr_grd_lr, label='GBT + LR')plt.plot(fpr_xgboost, tpr_xgboost, label='XGB')plt.plot(fpr_lr, tpr_lr, label='LR')plt.plot(fpr_xgb_lr, tpr_xgb_lr, label='XGB + LR')plt.plot(fpr_svm, tpr_svm, label='SVM')plt.xlabel('False positive rate')plt.ylabel('True positive rate')plt.title('ROC curve (zoomed in at top left)')plt.legend(loc='best')plt.show()

XGBoost对比RandomForest、GBDT、决策树、SVM,XGB+LR精度还能提升相关推荐

  1. GBDT和Xgboost对比

    一.GBDT有哪些参数,如何确定树的深度,学习率怎样确定.  答:本题答案引自http://www.07net01.com/2016/12/1742073.html  在sk-learn中,Gradi ...

  2. 模型开发-GBDT决策树模型开发代码

    GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决 ...

  3. xgboost相比传统gbdt有何不同?xgboost为什么快?xgboost如何支持并行?

    看了陈天奇大神的文章和slides,略抒己见,没有面面俱到,不恰当的地方欢迎讨论: 传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项 ...

  4. 支持向量机(SVM):超平面及最大间隔化、支持向量机的数学模型、软间隔与硬间隔、线性可分支持向量机、线性支持向量机、非线性支持向量机、核函数、核函数选择、SMO算法、SVM vs LR、优缺点

    支持向量机(SVM):超平面及最大间隔化.支持向量机的数学模型.软间隔与硬间隔.线性可分支持向量机.线性支持向量机.非线性支持向量机.核函数.核函数选择.SMO算法.SVM vs LR.优缺点 目录

  5. GBDT决策树入门教程

    本文转载于:苏冉旭的博客 http://blog.csdn.net/suranxu007/ GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple ...

  6. 第十一章:XGBoost (1)直接调用xgb的库

    文章目录 一.直接调用xgb的库 1.调用xgb的库 2.xgb.cv(param1, dfull, num_round,n_fold) 3.分类算法使用 综合调参:使用 xgb.cv调参 xgb.C ...

  7. XGB+LR/FM模型设计与实现

  8. 有关GBDT(Gradient Boosting Decison Tree,梯度提升树)

    集成学习有两大家族,Bagging家族与Boosting家族:相同家族的算法,思想有类似之处,例如Bagging家族主要并行思想,典型代表:随机森林:Boosting家族主要是串行思想,主要代表有Ad ...

  9. 答复: 对比丰田生产方式,敏捷原则和实践还太嫩

    实际上在国内由于历史原因,具有一种天生的喜欢做官的民族习惯,造就出一种总是希望做"管理"而不去做实事的"人才".如果能抛开这个问题,专门的对管理和计划进行讨论无 ...

最新文章

  1. Racktables(一)的资产管理软件安装配置
  2. python计算和差积商_Python与处理计算的区别
  3. radare2命令介绍
  4. 办公自动化软件运用测试,办公自动化上机操作测试题
  5. 笔记-Tukey Method发现outliers(离群点)
  6. 一致性算法 - Distro协议在Nacos的实践
  7. uniapp重新渲染页面_uni-app里面使用uni.request请求并且渲染列表
  8. 自动化测试处理银行密码输入框
  9. 华为机试--火车进站
  10. AR联机游戏制作过程记录(11.11)
  11. java orm全称_[Java-基础] 什么是ORM
  12. 电脑版微信小程序全屏显示方法,手机横屏方法。
  13. 20个有用的iOS图标和应用模板资源
  14. 关于PDU电源插座,你了解多少?
  15. 深入浅出聊优化:从Draw Calls到GC
  16. Jvm面试题及答案(300道 Jvm面试题大全带答案)
  17. smartdeblur有手机版吗_smartdeblur
  18. VUE 入门及应用 ( 五 ) ElementUI 组件
  19. jQuery Mobile 过渡效果
  20. 会“教”难“育”,AIGC卷不了教师

热门文章

  1. c++ 重载 重写_关于C/C++中的++i和i++实现机制的探讨
  2. 渗透测试小马(一句话)篇
  3. 怎么merge分支_实战 Git 分支策略
  4. 文本编辑软件_IDE与文本编辑器的比较
  5. android 生成纯色,android – 以编程方式添加具有纯色和笔触的渐变
  6. shell unset之后数组元素个数为_PHP删除数组中指定值的元素的方法
  7. Qt之QGraphicsView实战篇(很强大)
  8. osg节点函数功能汇总
  9. Android开发之自定义输入框无法弹起键盘输入法的解决方法
  10. Android开发之Java基础JVM和ClassLoader以及类加机制面试题