目录

一、树模型与线性模型的融合模型

二、Python sklearn实现GBDT+LR融合模型


一、树模型与线性模型的融合模型

树模型GBDT原理:https://blog.csdn.net/woniu201411/article/details/83114226

线性模型LR原理:https://blog.csdn.net/woniu201411/article/details/81335863

海量的离散特征+线性模型LR,因其较高的精度和较少的运算开销在业界广为使用。 线性模型LR无法捕捉到非线性特征对标签的影响,因而提升线性模型精度的有效方法是构造有效的交叉特征。比较成熟的构造交叉特征的方法包含:

  1. 结合业务,构造有效的交叉特征,这种方法对线性模型的精度提升是显著的,但要花费巨大的人力和时间,特别当特征达到上百维时,难以构造有效的交叉特征;
  2. 根据信息增益,分箱划分连续特征,将一个连续特征划分为多个类别特征,为线性模型增加了非线性表达,提高了模型的精度和健壮性。但这种方法构造的非线性特征包含的信息是很有限的;
  3. 离散特征通过笛卡尔积,获取所有的组合特征,但笛卡尔积获取的组合特征呈爆炸式增长,并且很多组合特征是无效的,为线性模型增加了很多噪音。

2014年faceBook提出了树模型GBDT与线性模型LR的融合模型(Practical Lessons from Predicting Clicks on Ads at Facebook),利用GBDT构造有效的交叉特征,从根节点到叶子节点的路径,代表部分特征组合的一个规则,提升树将连续特征转化为离散特征,可以明显提升线性模型的非线性表达能力,提高线性模型精度

以下图所示,GBDT构造两棵树,第一棵树有三个叶子节点,第二颗树有两个叶子节点,若训练样本落入第一棵树的第二个叶子节点,第二颗树的第一个叶子节点,GBDT构造的交叉离散特征输出为[0,1,0,1,0],其中前三个元素对应第一棵树的叶子节点,后两个元素对应第二颗树的叶子节点,输出的交叉离散特征作为LR的输入。

关于GBDT与LR融合模型的思考:

1、树模型采用集成决策树,而非单颗决策树

一棵树的表达能力很弱,不足以表达多个有区分性的特征组合,多棵树的表达能力更强一些。GBDT每棵树都在学习前面棵树尚存的不足,迭代多少次就会生成多少颗树。按paper的GBDT+LR融合方式,多棵树正好满足LR每条训练样本可以通过GBDT映射成多个特征的需求。

2建树采用GBDT而非RF

RF也是多棵树,但从效果上有实践证明不如GBDT。且GBDT前面的树,特征分裂主要体现对多数样本有区分度的特征;后面的树,主要体现的是经过前N颗树,残差仍然较大的少数样本。优先选用在整体上有区分度的特征,再选用针对少数样本有区分度的特征,思路更加合理,这应该也是用GBDT的原因。

二、Python sklearn实现GBDT+LR融合模型

引用包引入:

import numpy as np
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,accuracy_score,auc

数据集划分(树模型和线性模型的训练分别用不同数据集,防止过拟合):

tmp = np.loadtxt("E:\\ensembleModelData.csv",dtype=np.str,delimiter=',')
data = tmp[1:,2:-1].astype(np.float)
label = tmp[1:,-1].astype(np.int)
#data,label = make_classification(n_samples=80000,n_features=30)
X_train,X_test,Y_train,Y_test = train_test_split(data,label,test_size=0.2)
X_train_tree,X_train_lr,Y_train_tree,Y_train_lr = train_test_split(X_train,Y_train,test_size=0.5)

利用网格搜索,获取最优参数:

for n_estimator in [80,100,150,200,250]:for depth in [1,2,3,5]:for maxiter in [300,400,500]: GBDT = GradientBoostingClassifier(learning_rate=0.1,n_estimators=n_estimator,max_depth=depth)OHE = OneHotEncoder()LRGBDT = LogisticRegression(max_iter=maxiter)GBDT.fit(X_train_tree,Y_train_tree)OHE.fit(GBDT.apply(X_train_tree)[:,:,0])LRGBDT.fit(OHE.transform(GBDT.apply(X_train_lr)[:,:,0]),Y_train_lr)Y_pred_gbdt_lr = LRGBDT.predict_proba(OHE.transform(GBDT.apply(X_test)[:,:,0]))[:,1]auc_gbdt_lr = roc_auc_score(Y_test,Y_pred_gbdt_lr)print(n_estimator,depth,maxiter,auc_gbdt_lr)

最终结果为:100,5, 500, 0.9440185179246727

参考资料:

Practical Lesson from Predicting Clicks on Ads at Facebook

https://blog.csdn.net/u010352603/article/details/80681100

https://blog.csdn.net/asdfghjkl1993/article/details/78606268

https://blog.csdn.net/TwT520Ly/article/details/79769705

https://scikit-learn.org/stable/auto_examples/ensemble/plot_feature_transformation.html#sphx-glr-download-auto-examples-ensemble-plot-feature-transformation-py

树模型与线性模型的融合模型(Python实现)相关推荐

  1. 非期望产出的sbm模型_线性模型 vs. Logistic模型——离散选择模型之二

    前言:为什么因变量是分类变量的时候,我们会选择Logistic模型.而非最常见的线性回归模型?或者,换个说法:线性回归模型的劣势是什么?Logistic模型的优势又是什么?--针对这些问题,本文为您详 ...

  2. AI:人工智能的多模态融合模型的简介、发展以及未来趋势

    AI:人工智能的多模态融合模型的简介.发展以及未来趋势 目录 人工智能的多模态融合模型的简介.发展以及未来趋势 多模态融合模型的简介 多模态融合模型的发展趋势 多模态常见应用分类 1.按照模态分类 2 ...

  3. 树模型与线性模型的区别 决策树分类和逻辑回归分类的区别 【总结】

    树模型与线性模型的区别在于: (一)树模型 ①树模型产生可视化的分类规则,可以通过图表表达简单直观,逐个特征进行处理,更加接近人的决策方式   ②产生的模型可以抽取规则易于理解,即解释性比线性模型强. ...

  4. python garch模型 forecast_Python时间序列分析--从线性模型到GARCH模型

    目录 一.Motivation 二.基础知识 1.平稳性 2.序列相关(自相关) 3.为什么我们关心序列相关性? 三.白噪声和随机游动 四.线性模型 五.对数线性模型 六.AR模型(P) 七.移动平均 ...

  5. 推荐系统系列教程之十六:深度和宽度兼具的融合模型

    编者按:之前推出了<推荐系统系列教程>,反响不错,前面已经推出了十五期,今天按约推出第十六期:深度和宽度兼具的融合模型.希望粉丝朋友们多点"在看",多多转发,我会在&q ...

  6. 基于集成融合模型检测电商异常订单

    目录 一.摘要 二.数据探索 三.数据预处理 3.1 缺失值处理 3.2 重复值处理 3.3 异常值处理 四.特征工程 4.1 建立benchmark 4.2 划分训练集和测试集 4.3 订单时间 4 ...

  7. 机器学习模型可解释性的6种Python工具包,总有一款适合你!

    开发一个机器学习模型是任何数据科学家都期待的事情.我遇到过许多数据科学研究,只关注建模方面和评估,而没有解释. 然而,许多人还没有意识到机器学习可解释性在业务过程中的重要性.以我的经验,商业人士希望知 ...

  8. 常用的三种线性模型算法--线性回归模型、岭回归模型、套索回归模型

    常用的三种线性模型算法–线性回归模型.岭回归模型.套索回归模型 线性模型基本概念 线性模型的一般预测模型是下面这个样子的,一般有多个变量,也可以称为多个特征x1.x2.x3 - 最简单的线性模型就是一 ...

  9. 一般线性模型和线性回归模型_您的线性回归模型指南

    一般线性模型和线性回归模型 Interpretability is one of the biggest challenges in machine learning. A model has mor ...

最新文章

  1. 安卓学习第36课——PopupWindow
  2. SAP CRM Fiori应用里的note section
  3. 深入剖析:Super Jumping! Jumping! Jumping! (动规)
  4. PAT_1032验证身份(15)
  5. fastdfs上传文件_Java 实现 FastDFS 实现文件的上传、下载、删除
  6. Syntax error: Bad for loop variable
  7. Vue源码解析系列——响应式原理篇:理解Dep类和Watcher类
  8. 普通IO口红外线接收(不用外部中断)
  9. COPYPASTE: AN AUGMENTATION METHOD FOR SPEECH EMOTION RECOGNITION -论文阅读
  10. 《炬丰科技-半导体工艺》用于高效显示和通信的无磷白光 LED
  11. 引导mysql执行计划_Mysql执行计划详解
  12. 服务器下多网站设置,网站配置多个服务器
  13. 智慧交通:地铁站 3D 可视化,车路协同赋能科学出行
  14. 基于CAN总线步进电机驱动器设计
  15. 比较好的MySQL索引原理
  16. 嵌入式ARM下使用ALSA USB声卡
  17. 参加ACM经历及总结
  18. 321影音代码(万能播放器)源码
  19. 【厚积薄发系列】Python项目总结2—Python的闭包
  20. TIA精致面板备份/恢复

热门文章

  1. Vue快速入门(附实战小项目:记事本、天气预报、音乐播放器)
  2. 新玺配资:央行降准 房地产板块春天来了
  3. C语言编程的书写规则,关于C语言编程书写规范的规则和建议.doc
  4. 滋灌中小企业,分销伙伴和华为来做“送水人”
  5. EhCache常用的memoryStoreEvictionPolicy(缓存算法)
  6. Android APP物联网设备无网模式设计
  7. DUC与DDC——基于FPGA与MATLAB的仿真
  8. 7-20 简单计算器(20 分)
  9. 使用折外预测(oof)评估模型的泛化性能和构建集成模型
  10. C语言字符变量输出值,C语言,交换任意两个字符型变量的值并输出结果。要求:利用getchar和putchar函数。...