【NGBoost实战】

news/2024/7/9 10:58:13 标签: 机器学习, sklearn, python

NGBoost实战

  • 一级目录
    • 二级目录
      • 三级目录
  • ngboost分类实战
    • 常用参数介绍
    • 基学习器定义
    • 定义训练函数

一级目录

二级目录

三级目录

ngboost分类实战

常用参数介绍

  • n_estimators: 学习器数量
  • learning_rate: 学习率
  • minibatch_frac: 每次迭代的样本比例
  • col_sample: 每次迭代的特征比例
  • Dist’: Bernoulli, 预测目标的分布
  • verbose: 日志输出
  • Score: 相当于损失函数
  • Base: 基学习器
  • random_state: 随机种子
python">from ngboost.distns import Bernoulli
from ngboost.scores import LogScore

ngb_params = {
    'n_estimators': 1000,
    'learning_rate': 0.01,
    'minibatch_frac': 0.5,
    'col_sample': 0.5,
    'Dist': Bernoulli,  # k_categorical(2),
    'verbose': 100,
    'Score': LogScore,
    'Base': base,
    'random_state': RANDOM_SEED,
}

基学习器定义

ngboost中的基学习器只能使用回归模型

python">from sklearn.tree import DecisionTreeRegressor

base = DecisionTreeRegressor(
    criterion="friedman_mse",
    min_samples_split=5,
    min_samples_leaf=5,
    min_weight_fraction_leaf=0.0,
    splitter="best",
    random_state=RANDOM_SEED,
)

定义训练函数

训练参数

  • X: 训练集特征
  • Y: 训练集标签
  • X_val=None: 验证集特征
  • Y_val=None: 验证集标签
  • sample_weight=None: 类别不平衡时每个样本的采样比例,长度与训练集大小一致
  • val_sample_weight=None: 类别不平衡时每个样本的采样比例,长度与训练集大小一致
  • train_loss_monitor=None: 类似于评价指标
  • val_loss_monitor=None: 类似于评价指标
  • early_stopping_rounds=None: 早停次数
python">from ngboost import NGBClassifier
from sklearn.utils.class_weight import compute_class_weight


weight = compute_class_weight('balanced', classes=[0, 1], y=y_train)
weights = dict(zip([0, 1], weight))


def train_single_ngb(x_train, y_train, x_valid, y_valid, fea_cols, params):
    """_summary_
    单折NGB模型训练
    Args:
        x_train (datafram): 训练集特征
        y_train (datafram): 训练集标签
        x_valid (datafram): 验证集特征
        y_valid (datafram): 验证集标签
        fea_cols (list): 使用的特征
        params (dict): NGB模型参数

    Returns:
        model: 训练完成的NBG模型
        dataframe: 特征重要性df
    """
    print("{0:=^70}".format(f'TRAIN LGB MODEL WITH {len(fea_cols)} FEARURES'))
    ngb = NGBClassifier(**params)
    ngb.fit(x_train[fea_cols].fillna(0),
            y_train.astype(int),
            sample_weight = y_train.map(weights).values,
            X_val=x_valid[fea_cols].fillna(0),
            Y_val=y_valid.astype(int),
            early_stopping_rounds=50,
           )    
    
    # 特征重要性
    imp_df = pd.DataFrame(zip(fea_cols, ngb.feature_importances_[0]))
    
    return ngb, imp_df
    
ngb_clf, imp = train_single_ngb(x_train, y_train, x_valid, y_valid, USE_COLS, ngb_params)

http://www.niftyadmin.cn/n/334090.html

相关文章

软件测试岗精选100 道大厂面试真题,内附答案

精挑细选,整理了100道软件测试面试题,都是非常常见的面试题,篇幅较长,所以只放出了题目,答案在文末 测试技术面试题 1、什么是兼容性测试?兼容性测试侧重哪些方面? 2、我现在有个程序&#xf…

SpringCloud项目将某个子模块改成以war的形式打包,需要修改的地方

SpringCloud项目将某个子模块改成以war的形式打包&#xff0c;需要修改的地方 在GAV后面添加 《packaging》 war 《/packaging》 在GAV后面添加 《packaging》 war 《/packaging》 添加war打包方式 <packaging>war</packaging>添加之后项目会报错&#xff0c;工程…

详解二叉树

&#x1f308;目录 一、树形结构​ &#x1f333;1.1 概念1.2 其他概念1.3 树的表示形式 二、二叉树✨2.1 概念2.2 两种特殊二叉树2.3 性质2.4 二叉树存储 三、二叉树的基本操作&#x1f64c;3.1 前置说明3.2 二叉树的遍历3.3 二叉树的基本操作 四、二叉树的OJ✍️ 一、树形结构…

python3+telnetlib实现简单自动测试

1 telnetlib介绍 1.1 简介 官方介绍文档&#xff1a;telnetlib – Telnet 客户端 — Python 3.9.6 文档 telnetlib 模块提供一个实现Telnet协议的类 Telnet。 1.2 库常用函数及使用 1.2.1 建立连接 建立连接有两种方式&#xff1a;1、实例化函数的时候&#xff0c;将可选参数…

IC验证学习笔记(AHB-RAM)08addr、bsize都随机,主要做地址偏移操作

rkv_ahbram_haddr_word_unaligned_virt_seq: 对addr和bsize都随机化操作 ifndef RKV_AHBRAM_HADDR_WORD_UNALIGNED_VIRT_SEQ_SV define RKV_AHBRAM_HADDR_WORD_UNALIGNED_VIRT_SEQ_SVclass rkv_ahbram_haddr_word_unaligned_virt_seq extends rkv_ahbram_base_virtual_sequenc…

C++/PTA 组最大数

组最大数 题目要求解题思路代码头文件vector函数 总结 题目要求 设有n个正整数&#xff0c;将他们连接成一排&#xff0c;组成一个最大的多位整数。 如:n3时&#xff0c;3个整数13,312,343连成的最大整数为34331213。 如:n4时&#xff0c;4个整数7,13,4,246连接成的最大整数…

JavaWeb实现学生管理系统

JavaWeb实现学生管理系统 一、项目介绍二、项目结构三、前期准备1.配置maven环境&#xff0c;在pom.xml配置文件中配置项目所依赖的jar包2.在MySql数据库中&#xff0c;创建登录注册表login和学生信息表student&#xff08;1&#xff09;登录注册表login&#xff08;2&#xff…

多线程 - 阻塞队列

阻塞队列 阻塞队列是一种特殊的队列&#xff0c;它支持在队列为空时等待从队列中获取元素的操作&#xff0c;或在队列已满时等待插入元素的操作。 当队列为空时&#xff0c;从队列中获取元素的操作会被阻塞&#xff0c;直到队列中有可用元素&#xff1b; 当队列已满时&#xf…