lightGBM筛选特征及建模(系列文章二)

2023-11-20

“新网银行杯”数据科学竞赛记录

之前写过一篇参加这个比赛过程中用xgboost的调参的文章,今天再记录一下用lightGBM作为特征筛选模型以及训练数据的过程

1.数据准备

新网的这个比赛主办方总共提供了三个数据集,命名分别为

  • train_xy.csv:15000条样本数据集,总共157个特征,1个标签变量,1个用户id变量,1个用户对应的产品群组变量
  • train_x.csv:15000条无标签的样本数据集,可以用来做无监督学习
  • test_all.csv:10000条测试数据集

2.筛选特征

评分卡建模常用的筛选重要性特征的方法包括IV值、基于模型筛选,在建模过程中,我也尝试了计算IV值来筛选特征的方法,但是选出来的特征建模效果比用lightGBM筛选的稍差,所以我最后用lightGBM作为筛选特征的依据。

2.1 导入模块

from sklearn.model_selection import StratifiedKFold
import lightgbm as lgb
from sklearn.metrics import roc_auc_score
import operator
import time

2.2 lightGBM参数设置

# 最后用全部数据train
train_all = lgb.Dataset(train[features], train['y'])
# 设置参数
params = {
    'boosting_type': 'gbdt',
    'objective': 'binary',
    'metric': {'auc'},
    'max_depth': 4,
    'min_child_weight': 6,
    'num_leaves': 16,
    'learning_rate': 0.02,
    'feature_fraction': 0.7,
    'bagging_fraction': 0.7,
    'bagging_freq': 5,
    #'lambda_l1':0.25,
    #'lambda_l2':0.5,
    #'scale_pos_weight':1,
}

2.3 训练模型

model = lgb.train(params,train_all,num_boost_round=450,valid_sets=train_all,early_stopping_rounds=100,verbose_eval=100)

2.4 提取模型筛选出来的重要特征

use = df.loc[df['importance']!=0,'feature'].tolist()

最后建模的时候选择了top30、24、18、12的特征都试了一遍

3.lightGBM建模

3.1 导入模块

import numpy as np
import pandas as pd
from pandas import DataFrame
from pandas import Series
import matplotlib
import matplotlib.pyplot as plt
import lightgbm as lgb
import operator
import time
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import roc_auc_score

3.2 导入数据

train_xy = pd.read_csv(r'C:\Users\Administrator\Desktop\noisy label\train_xy.csv',header=0,sep=",")
test_all = pd.read_csv(r'C:\Users\Administrator\Desktop\noisy label\test_all.csv',header=0,sep=",")

3.3 给测试集填充y变量,然后合并两个数据集

train = train_xy.copy()
test = test_all.copy()
test['y'] = -1

data = pd.concat([train,test],axis = 0)

3.4 将特征分开成连续型和离散型

新网的比赛说明文件中已经明确了x1-x95是数值型变量,x_96-x_157是离散型变量

continuous_features = []
discrete_features = []
for i in range(157):
    feat = "x_" + str(i+1)
    if i <= 94: # 1-95
        continuous_features.append(feat)
    else:
        discrete_features.append(feat)

3.5 缺失值离散化

3.6 填充缺失值

这里只用均值填充了数值型变量,离散型变量用中位数填充或者one-hot编码取得的效果不好,而且评分卡模型中用one-hot编码也很少,所以就没有对离散型变量作处理

3.7 根据筛选出来的重要特征建模

这里只给出了参数设置和模型设定,具体的交叉验证设置那些就没有给出来了

params = {
        'boosting_type': 'gbdt',
        'objective': 'binary',
        'metric': {'auc'},
        'max_depth': 4,
        'min_child_weight': 6,
        'num_leaves': 16,
        'learning_rate': 0.05,# 第一次lgb的学习率为0.02,第二次用0.05,第二次比第一次线下和线上同时提升0.001
        'feature_fraction': 0.7,
        'bagging_fraction': 0.7,
        'bagging_freq': 5,
        'lambda_l1':0.25,  #第一次lgb没有用l1和l2范数,第三次中用l1,线下提升0.0003,线上提升0.001,排名上升到第25;
        #'lambda_l2':0.5     #第四次中用l2,效果下降;第五次中同时用,效果下降
        #'scale_pos_weight':10.0/1.0, #14309.0 / 691.0, #不设置
        #'num_threads':4,
    }
gbm = lgb.train(params,lgb_train,num_boost_round=1000,valid_sets=lgb_eval,early_stopping_rounds=100,verbose_eval=100)

3.8 模型预测和评估

y_pred = gbm.predict(X_test,num_iteration=gbm.best_iteration)
# 评估
tmp_auc = roc_auc_score(y_test,y_pred)
auc_cv.append(tmp_auc)
# test
pred = gbm.predict(test_data, num_iteration = gbm.best_iteration)
pred_cv.append(pred)
print('cv mean score',np.mean(auc_cv))

4.小结

lightGBM和xgboost是两个最常用的集成模型,掌握它在机器学习建模中还是有很大优势的

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

lightGBM筛选特征及建模(系列文章二) 的相关文章

随机推荐

  • 【Java进阶营】29个你必须学会的微服务面试问题(含答案解析)

    这29个微服务面试题基本涵盖了方方面 希望对你有所帮助 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img YvPsK1zg 1651230439289 https upload images jianshu io
  • Starting udev卡死的问题

    Linux启动停止在Starting udev 一 出现问题 在VM的CentOS 5 4 32bit上重新编译了内核 2 6 19 7 启动新内核时 停在starting udev 然后按下Ctrl C取消 才能继续启动 于是google
  • 解决View drawableLeft左侧图片大小不可控的问题

    今天在制作带文字的图片按钮的时候 使用了TextView的drawableLeft属性 但是在使用的过程中 我发现我所使用的图片资源的大小过大 导致整个效果很不和谐 可是drawableLeft并不能在xml通过属性控制它的大小 这时 我就
  • 《OpenGL编程指南》示例笔记(2)--独立地移动光源

    TITLE OpenGL编程指南 示例笔记 2 独立地移动光源 AUTHOR norains DATE Monday 21 June 2010 Environment Windows XP 示例概述 例名 独立地移动光源 序号 5 6 页码
  • TVS管电路原理图符号及选型举例

    TVS管的电路原理图符号与稳压二极管符号类似 结构也都差不多 了解TVS管的电路原理图符号是掌握TVS管符合选型的基础 一般常见的TVS管电路原理图符号有 VBR IPP IR VRWM VC PM CP VBR代表的是 击穿电压 IPP代
  • 最详细的Vue实现日历组件Calendar(日期点击多选,滑动多选)

    1 成果演示 1 1 日期的切换 1 2 点击多选 1 3 滑动多选 2 实现基本的日期渲染 2 1 思路 2 1 1 要用到的Date对象方法 new Date 2020 4 1 getDay 计算传入的日期是星期几 返回值0表示星期天
  • 官网下载Eclipse

    1 打开Eclipse官网 https www eclipse org 也可以在百度中 搜索 Eclipse 2 点击 Download 3 点击 Download Pakeges 4 下拉 选择所要的版本和系统 5 点击 Select A
  • OJ-合并两个有序链表

    题目描述 代码如下 Definition for singly linked list struct ListNode int val struct ListNode next struct ListNode mergeTwoLists s
  • C# 中Object的方法含义以及使用(详)

    如下图是object中的方法 上图来源于我阅读C 入门经典第8版的书本当中 图中明确标明方法的使用 以及含义 Equals方法 比较两个对象是否相等 在Object是所有的父类大家都知道 其中Object中方法Equals 有两种 obje
  • 【兄弟反目成仇系列】:我只是写了一个爆炸信息窗口脚本,好兄弟追了我几条街~

    文章目录 真的来咯 爆炸信息窗口 设计思路 模块准备 删除好友警告 源代码 这时你可能会问 批量获取表情包 结束语 专栏 Python零基础入门篇 Python网络蜘蛛 Python数据分析 Django基础入门宝典 小玩意儿 Web前端学
  • c#方法参数:in

    方法参数in只能读入 不能在方法内修改 它和ref一样也需要在作为实参时就已经进行了初始化 而且同ref一样 无论定义方法还是调用方法都需要加上in关键字 class Program static void Add in int num1
  • 等级测评——定级、等级划分及测评时间

    定级 在等级保护中 定级这个步骤很关键 首先我们需要知道我们这个资产是什么样的一个级别 一级二级三级 因为不同的级别表示着我们要对这个资产做相应的保护 那么我们这个定级是怎么么定级呢 参考的又是什么标准呢 首先我们需要先确认定级对象 这个对
  • R----stringr包介绍学习

    1 stringr介绍 stringr包被定义为一致的 简单易用的字符串工具集 所有的函数和参数定义都具有一致性 比如 用相同的方法进行NA处理和0长度的向量处理 字符串处理虽然不是R语言中最主要的功能 却也是必不可少的 数据清洗 可视化等
  • Verilog中$timeformat的用法

    Verilog中 timeformat的用法 更新历史 20200807 首次发布 语法 timeformat的语法如下 timeformat units number precision number suffix string mini
  • (转发)西门子S7-1200PLC之间TCP通信实例步骤

    1 软件组态 新建两个CPU 在组态界面的网络视图手绘连接两个PLC的以太网口 如下 2 在两个CPU以太网口的属性中设置IP地址 设置同一网段 方便调试 3 在PLC 1程序块中添加个背景数据块 新建接收数组跟发送数组 以方便存放接收或发
  • mysql本机地址_mysql连接时用的IP地址是不是电脑本机上的IP地址呢!

    展开全部 是root用户的话 IP就是或 lt 127 0 0 1 gt 只是代表使用本机 不是代表本机IP地址 操作方法如下62616964757a686964616fe58685e5aeb931333433623737 1 首先 利用N
  • 【工具类】比较优雅的在工具类中,用泛型方法获取枚举的值

    目录 痛点 解决 优化更灵活的泛型 痛点 在代码中 经常用到枚举 也经常用到枚举获取code 获取type 通常我们写的代码如下 public enum Status YES 1 是 NO 2 否 private int code priv
  • 科技云报道:云安全的新战场上,如何打破“云威胁”的阴霾?

    科技云报道原创 近年来 在云计算和网络安全产业的蓬勃发展下 我国云安全行业市场规模呈现高速增长态势 在网络安全市场总体规模中占比不断上升 据统计 近5年我国云安全市场保持高速增长 2021年我国云安全市场规模达到了117 7亿元 2022年
  • 移除wordpress前端自带的js和css

    wordpress在其wp head和wp foot函数中 会自动加载一些js和css 但这些js和css往往在我们实际的使用中却无法用到 这就造成了一些资源的浪费 会将我们的网站速度拖慢 我们之前发布了一篇文章清理header的文章 但是
  • lightGBM筛选特征及建模(系列文章二)

    新网银行杯 数据科学竞赛记录 之前写过一篇参加这个比赛过程中用xgboost的调参的文章 今天再记录一下用lightGBM作为特征筛选模型以及训练数据的过程 1 数据准备 新网的这个比赛主办方总共提供了三个数据集 命名分别为 train x