在好例子网,分享、交流、成长!
您当前所在位置:首页Python 开发实例Python语言基础 → 排序学习算法(lightgbm)

排序学习算法(lightgbm)

Python语言基础

下载此实例
  • 开发语言:Python
  • 实例大小:2.11M
  • 下载次数:16
  • 浏览次数:539
  • 发布时间:2020-11-18
  • 实例类别:Python语言基础
  • 发 布 人:zhb12345678
  • 文件格式:.zip
  • 所需积分:5
 相关标签: 排序 学习 算法

实例介绍

【实例简介】
【实例截图】
【核心代码】# 利用lightgbm做learning to rank 排序,主要包括:
- 数据预处理
- 模型训练
- 模型决策可视化
- 预测
- ndcg评估
- 特征重要度
- SHAP特征贡献度解释
- 样本的叶结点输出

(要求安装lightgbm、graphviz、shap等)

## 一.data format (raw data -> (feats.txt, group.txt))

###### python lgb_ltr.py -process

##### 1.raw_train.txt

0 qid:10002 1:0.007477 2:0.000000 ... 45:0.000000 46:0.007042 #docid = GX008-86-4444840 inc = 1 prob = 0.086622

0 qid:10002 1:0.603738 2:0.000000 ... 45:0.333333 46:1.000000 #docid = GX037-06-11625428 inc = 0.0031586555555558 prob = 0.0897452
...

##### 2.feats.txt:

0 1:0.007477 2:0.000000 ... 45:0.000000 46:0.007042

0 1:0.603738 2:0.000000 ... 45:0.333333 46:1.000000
...

##### 3.group.txt:
8

8

8

8

8

16

8

118

16

8

...

## 二.model train (feats.txt, group.txt) -> train -> model.mod

###### python lgb_ltr.py -train



    train params = {
            'task': 'train',  # 执行的任务类型
            'boosting_type': 'gbrt',  # 基学习器
            'objective': 'lambdarank',  # 排序任务(目标函数)
            'metric': 'ndcg',  # 度量的指标(评估函数)
            'max_position': 10,  # @NDCG 位置优化
            'metric_freq': 1,  # 每隔多少次输出一次度量结果
            'train_metric': True,  # 训练时就输出度量结果
            'ndcg_at': [10],
            'max_bin': 255,  # 一个整数,表示最大的桶的数量。默认值为 255。lightgbm 会根据它来自动压缩内存。如max_bin=255 时,则lightgbm 将使用uint8 来表示特征的每一个值。
            'num_iterations': 200,  # 迭代次数,即生成的树的棵数
            'learning_rate': 0.01,  # 学习率
            'num_leaves': 31,  # 叶子数
            'max_depth':6,
            'tree_learner': 'serial',  # 用于并行学习,‘serial’: 单台机器的tree learner
            'min_data_in_leaf': 30,  # 一个叶子节点上包含的最少样本数量
            'verbose': 2  # 显示训练时的信息
        }

- docs:7796
- groups:380
- consume time : 4 seconds
- training's ndcg@10: 0.940891

##### 1.model.mod(model的格式在data/model/mode.mod)
训练时的输出:
- [LightGBM] [Info] Total Bins 9171
- [LightGBM] [Info] Number of data: 7796, number of used features: 40
- [LightGBM] [Debug] Trained a tree with leaves = 31 and max_depth = 9
- [1] training's ndcg@10: 0.791427
- [LightGBM] [Debug] Trained a tree with leaves = 31 and max_depth = 12
- [2] training's ndcg@10: 0.828608
- [LightGBM] [Debug] Trained a tree with leaves = 31 and max_depth = 10
-  ...
-  ...
-  ...
- [198] training's ndcg@10: 0.941018
- [LightGBM] [Debug] Trained a tree with leaves = 31 and max_depth = 11
- [199] training's ndcg@10: 0.941038
- [LightGBM] [Debug] Trained a tree with leaves = 31 and max_depth = 11
- [200] training's ndcg@10: 0.940891
- consume time : 4 seconds
## 三.模型决策过程的可视化生成
可指定树的索引进行可视化生成,便于分析决策过程。
###### python lgb_ltr.py -plottree

![image](https://raw.githubusercontent.com/jiangnanboy/learning_to_rank/master/data/plot/tree_plot.png)

## 四.predict 数据格式如feats.txt,当然可以在每行后面加一个标识(如文档编号,商品编码等)作为排序的输出,这里我直接从test.txt中得到feats与comment作为predict

###### python lgb_ltr.py -predict

##### 1.predict results

- ['docid = GX252-32-5579630 inc = 1 prob = 0.190849'
-  'docid = GX108-43-5342284 inc = 0.188670948386237 prob = 0.103576'
-  'docid = GX039-85-6430259 inc = 1 prob = 0.300191' ...,
-  'docid = GX009-50-15026058 inc = 1 prob = 0.082903'
-  'docid = GX065-08-0661325 inc = 0.012907717401617 prob = 0.0312699'
-  'docid = GX012-13-5603768 inc = 1 prob = 0.0961297']

## 五.validate ndcg 数据来自test.txt(data from test.txt)

###### python lgb_ltr.py -ndcg

all qids average ndcg:  0.761044123343

## 六.features 打印特征重要度(features importance)

###### python lgb_ltr.py -feature

模型中的特征是"Column_number",这里打印重要度时可以映射到真实的特征名,比如本测试用例是46个feature

##### 1.features importance

 - feat0name : 228 : 0.038
-  feat1name : 22 : 0.0036666666666666666
-  feat2name : 27 : 0.0045
-  feat3name : 11 : 0.0018333333333333333
-  feat4name : 198 : 0.033
-  feat10name : 160 : 0.02666666666666667
-  ...
-  ...
-  ...
-  feat37name : 188 : 0.03133333333333333
-  feat38name : 434 : 0.07233333333333333
-  feat39name : 286 : 0.04766666666666667
-  feat40name : 169 : 0.028166666666666666
-  feat41name : 348 : 0.058
-  feat43name : 304 : 0.050666666666666665
-  feat44name : 283 : 0.04716666666666667
-  feat45name : 220 : 0.03666666666666667

## 七.利用SHAP值解析模型中特征重要度

###### python lgb_ltr.py -shap
这里不同于六中特征重要度的计算,而是利用博弈论的方法--SHAP(SHapley Additive exPlanations)来解析模型。
利用SHAP可以进行特征总体分析、多维特征交叉分析以及单特征分析等。

##### 1.总体分析

![image](https://raw.githubusercontent.com/jiangnanboy/learning_to_rank/master/data/plot/all_feature_importance_1.png)

![image](https://raw.githubusercontent.com/jiangnanboy/learning_to_rank/master/data/plot/all_feature_importance_2.png)

##### 2.多维特征交叉分析

![image](https://raw.githubusercontent.com/jiangnanboy/learning_to_rank/master/data/plot/multi-dimension_feature_importance.png)

##### 3.单特征分析

![image](https://raw.githubusercontent.com/jiangnanboy/learning_to_rank/master/data/plot/single_feature_importance.png)

## 八.利用模型得到样本叶结点的one-hot表示,可以用于像gbdt lr这种模型的训练

###### python lgb_ltr.py -leaf

这里测试用例是test/leaf.txt 5个样本

[
- [ 0.  1.  0. ...,  0.  0.  1.]
-  [ 1.  0.  0. ...,  0.  0.  0.]
-  [ 0.  0.  1. ...,  0.  0.  1.]
-  [ 0.  1.  0. ...,  0.  1.  0.]
-  [ 0.  0.  0. ...,  1.  0.  0.]
]

## 九.REFERENCES

https://github.com/microsoft/LightGBM

https://github.com/jma127/pyltr

https://github.com/slundberg/shap

标签: 排序 学习 算法

实例下载地址

排序学习算法(lightgbm)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警