quantile函数_python&机器学习

2023-11-08

印象里刘老师 @北冥乘海生 曾说过,算法工程师的第三层境界,是“擅定义问题” 可以为业务写出优雅简洁的损失函数与目标函数。自认没有这个本事。新书里面有一小段代码,简单构造了一个局部捕获率最优的评价函数,在实际业务中也取得了不错的业务表现,分享给大家。

XGBoost模型支持自定义评价函数损失函数。只要保证损失函数二阶可导,通过评价函数的最大化既可以对模型参数进行求解。实际使用中,可以考虑根据业务目标对这两者进行调整。

举个例子,假设现在有一个提额模型,用处是将分数最高的20%客户给与更高的额度。也就是期望分数最高的20%的客群正样本捕获率最大化。可能在保证上述前提,同时保证模型对正负样本有一定的区分能力。所以可以改写一个保证模型区分度,同时又能优化局部正样本捕获率的评价函数 。

⭐️自定义XGBoost模型损失函数与评价函数。

1.	# 自定义对数损失函数 
2.	def loglikelood(preds, dtrain):  
3.	    labels = dtrain.get_label()  
4.	    preds = 1.0 / (1.0 + np.exp(-preds))  
5.	    grad = preds - labels  
6.	    hess = preds * (1.0-preds)  
7.	    return grad, hess  
8.	  
9.	# 评价函数:前20%正样本占比最大化  
10.	def binary_error(preds, train_data):  
11.	    labels = train_data.get_label()  
12.	    dct = pd.DataFrame({'pred':preds,'percent':preds,'labels':labels})  
13.	    #取百分位点对应的阈值  
14.	    key = dct['percent'].quantile(0.2)  
15.	    #按照阈值处理成二分类任务  
16.	    dct['percent']= dct['percent'].map(lambda x :1 if x <= key else 0)    
17.	    #计算评价函数,权重默认0.5,可以根据情况调整  
18.	    result = np.mean(dct[dct.percent== 1]['labels'] == 1)*0.5 
19.	               + np.mean((dct.labels - dct.pred)**2)*0.5  
20.	    return 'error',result  
21.	  
22.	watchlist  = [(dtest,'eval'), (dtrain,'train')]  
23.	param = {'max_depth':3, 'eta':0.1, 'silent':1}  
24.	num_round = 100  
25.	# 自定义损失函数训练  
26.	bst = xgb.train(param, dtrain, num_round, watchlist, loglikelood, binary_error)

可以看到评价函数由两部分组成,⭐️第一部分权重默认为0.5,目的是使得前20%样本中的正样本占比最大。因为正样本的标签为0,因此pandas.quantile()函数分位点参数0.2,表示预估为正样本概率最大的前20%分位点。⭐️第二部分权重同样默认设置为0.5,目的是让模型对正负样本的识别能力得到保障。

实际使用中,可以根据,对模型表现的侧重点,进行权重选择 。比如当更希望模型关注于捕获率时,可以调整第一部分权重为0.8,将第二部分权重调整为0.2。本文给出的是一种启发性的思路,读者还可以根据实际情况改写更贴合业务的损失函数。

⭐️LightGBM中也同样支持自定义损失函数和评价函数。代码上有一些细微差别。评价函数需要返回三部分,用False代替。

 # 自定义二分类对数损失函数
def loglikelood(preds, train_data):
    labels = train_data.get_label()
    preds = 1. / (1. + np.exp(-preds))
    grad = preds - labels
    hess = preds * (1. - preds)
    return grad, hess

# 自定义前20%正样本占比最大化的评价函数
def binary_error(preds, train_data):
    labels = train_data.get_label()
    dct = pd.DataFrame({'pred':preds,'percent':preds,'labels':labels})
    #取百分位点对应的阈值
    key = dct['percent'].quantile(0.2)
    #按照阈值处理成二分类任务
    dct['percent']= dct['percent'].map(lambda x :1 if x <= key else 0)  
    #计算评价函数,权重默认0.5,可以根据情况调整
    result = np.mean(dct[dct.percent== 1]['labels'] == 1)*0.9 + np.mean((dct.labels - dct.pred)**2)*0.5
    return 'error',result, False

gbm = lgb.train(params,
                lgb_train,
                num_boost_round=100,
                init_model=gbm,
                fobj=loglikelood,
                feval=binary_error,
                valid_sets=lgb_eval)

感谢阅读。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

quantile函数_python&机器学习 的相关文章

  • 点击按钮复制想要复制的文字, 三行代码搞定。。 想粘贴到哪里就粘贴到哪里。。...

    UIPasteboard pab UIPasteboard generalPasteboard NSString string 这个方法走完之后有文本框的时候长按就可以粘贴啦 pab setString string 转载于 https w
  • 【数据结构】【王道】【线性表】单链表的实现及基本操作(带头结点)(可直接运行)

    总目录 文章目录 1 基本操作 1 1 结构体定义 1 2 初始化 1 3 判空 1 4 按位序插入 1 5 指定结点后插操作 1 6 指定结点前插操作 1 7 按位序删除 1 8 按位查找 1 9 按值查找 1 10 表的长度 1 11
  • 西门子et200 分布式i/o_西门子S7-1500H冗余系统硬件及网络结构

    1 1 软件及硬件要求 SIMATIC S7 1500 R H冗余PLC的冗余功能集成在冗余PLC操作系统中 不需要安装额外的冗余包 软件要求为STEP7 Professional V15 1 S7 1500H只有一个CPU型号 CPU15
  • 老码农教你学英语

    说说码农应该如何学习英语 达到熟练掌握英语的水平 首先 我要明确一个概念 英语学习是不可能速成的 一心想速成的同学们可以不用往下看了 不然浪费了你们的时间我可担不起责任啊 作为码农的习惯 自然第一个重点是要准确定义 熟练掌握英语 的概念 我
  • redis未授权漏洞详细利用

    redis未授权漏洞详细利用 攻击机 kali 192 168 52 130 靶机 Ubuntu 192 168 52 134 1 启动redis服务 2 未授权访问漏洞测试 3 利用redis写webshell 前提 1 靶机redis链
  • 通过简单的实验深入透析子网掩码,网关与ARP协议的作用

    http www knowsky com 383893 html 子网掩码 网关与ARP协议的概念和工作原理是学习网络知识的初学者首先碰到的几个重要的知识点 其中子网掩码与ARP协议的作用和基本工作原理更是思科网络技术学院教程Semeste
  • C++项目:Json_parser

    我的json parser generator 我的json parsergenerator 我的json parsergenerator 功能简介 1 解析器部分 2 生成器部分 3 测试部分 部分实现 1整体框架 1json value
  • SpringBoot中静态资源不能访问

    解决SpringBoot中静态资源不能访问的问题 在编写SpringBoot项目上的html页面时 直接调试html页面时 页面可以正常显示 但是在启动项目后 html页面样式丢失 因此想到了 可能是讲台资源被过滤掉了 参考一些大神的博客
  • HTML表单

  • AcWing 422. 校门外的树

    题目 某校大门外长度为L的马路上有一排树 每两棵相邻的树之间的间隔都是1米 我们可以把马路看成一个数轴 马路的一端在数轴0的位置 另一端在L的位置 数轴上的每个整数点 即0 1 2 L 都种有一棵树 由于马路上有一些区域要用来建地铁 这些区
  • 【vscode运行nodemon报错解决方法】

    看这篇文章的都是使用 vscode 的开发者吧 都遇到 nodemon app js 这种命令报错吧 话不多说 我来帮你解决这个问题 nodemon app js 1 如果你运行 nodemon 命令报的错是这个的话 那么恭喜你 看对文章了
  • c++中c_str()的用法详解

    转载地址 http blog csdn net u013682388 article details 39547773 cpp view plain copy 标准库的string类提供了三个成员函数来从一个string得到c类型的字符数组
  • 前端开发弄懂了这些shell命令就足够了

    最新内容我会即时在github更新 建议在github阅读 1 set命令 set通过选项来开关shell的不同特性 每个特性都对应一个选项 每个特性都有两种配置方式 1 一种是通过 set e 和 set e 这种形式 即直接指定选项 2
  • 【web nodejs】node-sass离线方式安装

    前言 npm命令可以很方便的从npm库中安装依赖的类库 实际开发时 操作是非常简单的 但是如果网络不好或受限制的话 可以通过离线安装 一安装 1 查看服务器的node版本 把下面的脚本添加到package json scripts prei
  • chart.js使用学习

    chart js是用JavaScript编写的基于Canvas的开源图表库 其官网 文档及源码地址请见参考文献1 3 本文开始学习该图表库的使用方法 本文主要介绍chart js的安装及使用示例 安装 根据参考文献2 chart js有几种
  • SOJSONV5解密,SOJSON.V5解密方法,SOJSONV5解密分析

    首先 JS加密只要给浏览器能运行就是可逆的 只是难度和时间问题 如果一个加密他有规则 那么他就是可以系统化可逆 我们来分析下 sojson v5 sojsonv5解密 使用者较多 知名企业都在使用 证明这个加密工具还是值得信奈的 JS加密
  • mybatis——example文件形式——多表联查

    mybatis example文件形式 多表联查 并且每个表中都有同样的id不能识别问题解决 方法名称 orderListByStatus mapper xml文件中写法
  • 酷炫的python日志库-loguru

    Loguru是一个python的日志库 比logging更简单 好用 功能丰富 GitHub Delgan loguru Python logging made stupidly simple 安装 pip install loguru 特
  • asp.net2.0学习历程 菜鸟到中级程序员的飞跃

    asp net2 0学习历程 菜鸟到中级程序员的飞跃 如果你是一个菜鸟或者自认为初学者那么本文非常适合你 不能说这30本书就是最佳组合 但是可以说这个组合不差 本人曾博览群书 很多书重复 很多书讲的不适用 这些书都是目前书店可以买到的 达到

随机推荐

  • 创建Springboot+vue3项目

    项目概述 创建springboot项目 加入mybatis plus支持 1 加入依赖代码 2 创建数据库实例 3 yml文件的配置 4 编写测试代码 5 测试结果 创建vue项目 报错 错误一 错误二 错误三 项目概述 后端 Spring
  • javaweb知识点总结

    JavaWeb JDBC 简介 JDBC就是使用Java语言操作关系型数据库的一套API 快速入门 0 创建工程 导入驱动jar包 mysql connector java 5 1 48 jar 1 注册驱动 Class forName c
  • 贪吃蛇游戏(java)(全注释)

    没想到发的第一篇关于java的博客会是这个 写作业用来练手 顺道就搬上来了 代码肯定不最优的 欢迎大家一起来探讨 先搬个效果图 然后结构 一共分成4个部分 Define包下有蛇 食物和成绩数据的类 主要包括他们的初始化和像蛇的移动之类的东西
  • 决策树(Decision Tree)-机器学习ML

    参考 1 统计学习方法 李航 2 https baike baidu com item E5 86 B3 E7 AD 96 E6 A0 91 10377049 fr aladdin 3 http www jianshu com p 6eec
  • qt 手动设置控件的位置

    QT中的Layout用着很不错 但有时候你想指定控件绝对位置 用以下红色代码就可以了 chanel1 new QPushButton tr 通道1 chanel1 gt setGeometry rect x 200 rect y 10 10
  • HTTP协议与HTTPS协议的区别

    一 HTTP和HTTPS的基本概念 1 HTTP 是互联网上应用最为广泛的一种网络协议 是一个客户端和服务器端请求和应答的标准 TCP 用于从WWW服务器传输超文本到本地浏览器的传输协议 它可以使浏览器更加高效 使网络传输减少 2 HTTP
  • 在数组中寻找和为目标值的 N 项(算法)

    这类问题可以使用递归 动态规划 或者回溯的方式完成 下面我将使用递归来完成这个算法的实现 递归函数 用于在数组中寻找 n 项之和等于目标值的组合 function findNSum nums target n startIndex curr
  • Java代码块的基本使用

    概念 在Java中 使用 括起来的代码被称为代码块 局部代码块 位置 方法中定义 特点 执行完就会在内存中消失 作用 限定变量的生命周期 及早释放 提高内存利用率 public static void main String args in
  • Java导出zip压缩包

    使用Java导出zip压缩包 压缩包中包含一个文件夹和一个文件 其中文件夹包含另一个文件 代码 package com sunshuo start import java io File import java io FileOutputS
  • uboot启动第二阶段——C语言

    1 给全局变量gd分配内存 详情参考 uboot中重要的全局变量 gd 2 计算重定位的代码长度 armboot start word start monitor flash len bss start armboot start 要重定位
  • h5ai搭建自己的文件分享程序

    h5ai搭建自己的文件分享程序 最近使用网盘分享一些资料 但是却被删除 现在感觉还是放在自己的服务器上比较放心 今天就介绍下安装h5ai这个目录程序 他可以把对应目录下的文件和文件夹全部显示在web页面上 只需点击即可下载对应的资料 h5a
  • vue——Props属性和Data属性概述

    利用Props可以进行组件之间数据传递 类似于React的Props Props 父组件向子组件传递数据 动态props 子组件向父组件传递了数据 子组件向子组件传递数据 Data 使用data data选项 数据 computed 声明式
  • 深度学习中常用的损失函数

    文章目录 一 什么是损失函数 二 分类任务损失 1 0 1 loss 2 熵与交叉熵loss 3 softmax loss及其变种 4 KL散度 5 Hinge loss 6 Exponential loss与Logistic loss 三
  • svn 回滚

    1 从svn log界面中查看所有的版本 右键后选择 revert to this revision 2 确认无问题后 svn commit 另外 选中任意两个版本 右键可以选择 compare 进行比较 在网上搜了半天 最后还是 RTFM
  • EXCEL实现分层自定义比例随机抽样(图+文教程)

    EXCEL实现分层自定义比例随机抽样 图 文教程 单一字段分层自定义比例随机抽样 多字段分层自定义比例随机抽样 单一字段分层自定义比例随机抽样 首先数据源如下 我们想随机抽张三的金额数据10 李四金额20 王五5 哈哈15 李六10 首先第
  • 排序公式 与 组合公式

    总结 C 代表 Combination 组合数 A 代表 Arrangement 排列数 在旧教材为P permutation 排列 N 代表 元素的总个数 M 代表 参与选择的元素个数 代表 阶乘 博客 http jingyan baid
  • POJ 2659 Raid|分治法|平面最近点对

    题目描述 总时间限制 1000ms 内存限制 65536kB 描述 After successive failures in the battles against the Union the Empire retreated to its
  • 【React】 10课 react实现QQ聊天框效果

    react实现QQ聊天框效果如下 首先我们如1课创建一个文件夹在文件夹中安装react环境需要的配置文件 npm init y npm i babel standalone D npm i react react dom D 安装配置文件教
  • Java生成导出Word

    先给出官网链接 方便各位博友深入了解 http deepoove com poi tl 里面有demo和详解 我这边就不说了
  • quantile函数_python&机器学习

    印象里刘老师 北冥乘海生 曾说过 算法工程师的第三层境界 是 擅定义问题 可以为业务写出优雅简洁的损失函数与目标函数 自认没有这个本事 新书里面有一小段代码 简单构造了一个局部捕获率最优的评价函数 在实际业务中也取得了不错的业务表现 分享给