1. 复习

再开始学习GBDT算法之前 先复习一下之前的 线性回归 逻辑回归(二分类) 多分类

  1. 线性回归

    找到一组W 使得 L 最小 进而求得F*

使用梯度下降法:

梯度下降的方向:

不断更新w:

最终求得的w 可以表示为:



2.逻辑回归

逻辑回归 是 用于处理二分类的问题

只不过是将线性回归的输出 Wx结果 再用sigmoid函数 映射到 0-1 之间

sigmoid函数:

逻辑回归预测的结果是该样本为正例的概率

  1. 多分类

    多分类:

多分类求解的θ 跟线性回归的w不一样 而是一个矩阵



对于任意一条样本:

2. GBDT

gradient boost decision tree

初始化 第0棵 树 f0 (初始化的值 可以给0 为了快速拟合 给定一个先验概率 例如统计正例的比例)

计算残值 y-y_hat 训练第一棵树 f1

再计算残值 再训练 第二棵树 f2

...

直到满足收敛条件

模型做预测:sum(f1+f2+...+fm)

gbdt用于回归树

每一次计算都是为了减少上一次的残差。

AdaBoosting中关注正确错误的样本加权,也就是下一次会更重视上一次分错的。

3. gbdt应用于二分类:

之前学的逻辑回归,本质上是用一个线性模型去拟合对数几率

GBDT处理二分类也是一样,只是用一系列的梯度提升树去拟合这个对数几率。





就是学习到的决策树

单条样本的熵:



因此,与回归问题很类似,下一棵决策树的训练样本为:

需要拟合的残差为真实标签与预测概率之差。

GBDT应用于二分类的算法:

1, 初始化:

训练样本中y=1的比例,利用先验信息来初始化学习器

2. 训练的次数 for m=1, 2, 3, ...

3. 计算

得到训练样本:



4. 得到学习器

3. gbdt应用于多类

多分类问题,则需要考虑以下softmax模型:



每一轮的训练实际上是训练了 k 棵树去拟合softmax的每一个分支模型的负梯度。

softmax模型的单样本损失函数为:

4. 叶子节点输出值c的计算

对于新生成的树,计算各个叶子节点的最佳残差拟合值c:



对于m次迭代, 所有落入j

推导过程:

GBDT算法:

  1. init
  2. -gradient
  3. leaf node value update

5. GBDT的其他应用

  1. 特征重要度

    树在做分叉的时候是根据某一特征值 来进行的

    特征j在单颗树中的重要度,是计算特征j在单颗树中带来的收益之和

例如:



petal width (cm)就是根节点:feature importance=(112∗0.6647−75∗0.4956−37∗0)/112=0.5564007189

petal length (cm)的featureimportance=(75∗0.4956−39∗0.05−36∗0.1528)/112=0.4435992811

  1. 特征组合对特征降维

    GBDT + LT

将X的特征(很多维度 几百个 甚至更多) 转化成GBDT输出的 几个组合特征

feature_1 feature_2, feature_3, feature_4, feature_5

x1 0 1 0 0 0

x2 1 0 0 0 0

...

再用这些新的特征去做一个LR 线性回归 给出预测值

6. GBDT+LR 代码实现

import numpy as np
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.linear_model._logistic import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from sklearn.metrics._ranking import roc_auc_score class GradientBoostingWithLr(object):
def __init__(self):
self.gbdt_model = None
self.lr_model = None self.gbdt_encoder = None self.X_train_leafs = None
self.X_test_leafs = None self.X_trans = None # GBDT 转后之后的X def gbdt_train(self, X_train, y_train):
"""
训练GBDT模型
:return:
"""
gbdt_model = GradientBoostingClassifier(
n_estimators=10,
max_depth=6,
verbose=0,
max_features=0.5 # 训练的时候 会计算那哪些特征 的收益 取最小 features are considered at each split.
)
gbdt_model.fit(X_train, y_train)
return gbdt_model def lr_train(self, X_train, y_train):
lr_model = LogisticRegression()
lr_model.fit(X_train, y_train)
return lr_model def gbdt_lr_train(self, X_train, y_train):
self.gbdt_model = self.gbdt_train(X_train, y_train) # one_hot
self.X_train_leafs = self.gbdt_model.apply(X_train)[:, :, 0]
# print(self.X_train_leafs[0])
self.gbdt_encoder = OneHotEncoder(categories="auto", sparse=False)
self.X_transform= self.gbdt_encoder.fit_transform(self.X_train_leafs)
# print(self.X_transform[0]) self.lr_model = self.lr_train(self.X_transform, y_train) def predict(self, X_test, _test):
self.X_test_leafs = self.gbdt_model.apply(X_test)[:, :, 0]
(train_rows, cols) = self.X_train_leafs.shape
X_trans_all = self.gbdt_encoder.fit_transform(np.concatenate((self.X_train_leafs, self.X_test_leafs), axis=0)) y_pred = self.lr_model.predict_proba(X_trans_all[train_rows:])[:, 1]
print(roc_auc_score(y_test, y_pred)) def load_data():
iris_data = load_iris()
X = iris_data.data
y = iris_data.target == 2 # 原结果输出的是 0,1,2 根据是否==2 转化成 0,1
return train_test_split(X, y, test_size=0.4, random_state=0) if __name__ == '__main__':
X_train, X_test, y_train, y_test = load_data() gblr = GradientBoostingWithLr()
gblr.gbdt_lr_train(X_train, y_train) gblr.predict(X_test, y_test)

机器学习-决策树系列-GBDT算法-集成学习-30的更多相关文章

  1. 机器学习笔记(九)---- 集成学习(ensemble learning)【华为云技术分享】

    集成学习不是一种具体的算法,而是在机器学习中为了提升预测精度而采取的一种或多种策略.其原理是通过构建多个弱监督模型并使用一定策略得到一个更好更全面的强监督模型.集成学习简单的示例图如下: 通过训练得到 ...

  2. 机器学习-决策树之ID3算法

    概述 决策树(Decision Tree)是一种非参数的有监督学习方法,它是一种树形结构,所以叫决策树.它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回 ...

  3. 机器学习--聚类系列--DBSCAN算法

    DBSCAN算法 基本概念:(Density-Based Spatial Clustering of Applications with Noise) 核心对象:若某个点的密度达到算法设定的阈值则其为 ...

  4. 机器学习--聚类系列--K-means算法

    一.聚类 聚类分析是非监督学习的很重要的领域.所谓非监督学习,就是数据是没有类别标记的,算法要从对原始数据的探索中提取出一定的规律.而聚类分析就是试图将数据集中的样本划分为若干个不相交的子集,每个子集 ...

  5. 机器学习——集成学习(Bagging、Boosting、Stacking)

    1 前言 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate < ...

  6. 6. 集成学习(Ensemble Learning)算法比较

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

  7. 5. 集成学习(Ensemble Learning)GBDT

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

  8. 1. 集成学习(Ensemble Learning)原理

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

  9. 3. 集成学习(Ensemble Learning)随机森林(Random Forest)

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

  10. 2. 集成学习(Ensemble Learning)Bagging

    1. 集成学习(Ensemble Learning)原理 2. 集成学习(Ensemble Learning)Bagging 3. 集成学习(Ensemble Learning)随机森林(Random ...

随机推荐

  1. 国产 Web 组态软件在玻璃生产线中的应用

    ​  概述 随着工厂信息化.数字化发展,智慧生产车间成为必然发展趋势,通过智能硬件.物联网.大数据等智慧化技术与手段,提高车间生产设备.工艺设备的智能执行能力,从而提升整个车间乃至工厂的智能化.网络化 ...

  2. 图纸安全管理:华企盾DSC数据防泄密系统的综合解决方案

    企业设计人员创造出的图纸既是珍贵的知识产权,又承载着公司的创新力和竞争力.然而,随着信息技术的迅速发展,图纸泄密风险也在不断增加.为了保护这一重要的企业资产,华企盾DSC数据防泄密系统提供了一系列专业 ...

  3. 中企网安信息科技:协同办公OA信息化管理系统概述

    由华企网安总公司北京中企网安信息科技有限责任公司开发的<协同办公OA信息化管理系统>,获得国家版权局颁发的计算机软件著作权登记证书. 协同办公OA信息化管理系统是一种综合性的软件系统,用于 ...

  4. idea2020.1.3汉化包报错问题

    已解决:idea2020.1.3汉化包报错问题 问题描述:插件市场提供的版本不对.不兼容,所以需要手动下载安装 这里附上文件 https://wwsi.lanzouq.com/b03czdtwf 密码 ...

  5. 常用API之IP定位地区

    常用API之IP定位地区 高德地图API https://lbs.amap.com/api/webservice/guide/api/ipconfig 百度地图API https://lbsyun.b ...

  6. gentoo安装gcc出现error: C compiler cannot create executables

    安装程序  systemd 过程中,出现了error: C compiler cannot create executables 这类错误,经过检查,由于没有配置本地编译器的结果. 输入命令如下: g ...

  7. Blazor入门100天 : 身份验证和授权之 OpenID 与 OAuth2

    目录: OpenID 与 OAuth2 基础知识 Blazor wasm Gitee 码云登录 Blazor wasm GitHub 登录 Blazor wasm Google 登录 Blazor w ...

  8. GDAL从二进制数据流中构造数据集

    目录 1. 概述 2. 实现 1. 概述 参看<从二进制数据流中构造GDAL可以读取的图像数据>这篇文章.这个问题的内涵在于,处理图像时都会将其读取成宽X高X波段的三维数组的内存Buffe ...

  9. echarts label formatter params backgroundColor rich 标签设置背景图并传参

    小技巧 如果想给label设置背景图,需要使用到rich属性,按照官网示例就可以实现,折线.柱图都一样. 但是大多数情况formatter都是用来通过params里面参数设置自定义的逻辑,如何将两者结 ...

  10. GaussDB(DWS)查询过滤器原理与应用

    摘要:GaussDB(DWS)查询过滤器(黑名单)提供查询过滤功能,支持自动隔离反复被终止的查询,防止烂SQL再次执行. 本文分享自华为云社区<GaussDB(DWS)查询过滤器原理与应用> ...