You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用训练集和验证集训练ML.NET模型时遇到LightGbmBinaryTrainer相关问题

训练集和验证集训练ML.NET模型时遇到LightGbmBinaryTrainer相关问题

看起来你在使用ML.NET的LightGbmBinaryTrainer搭建分类模型时碰到了麻烦,我从你贴的代码片段里帮你梳理几个容易踩坑的点,以及对应的优化方向:

首先,你的代码还没完成完整的训练流程

你定义了LightGbm训练器和部分数据转换步骤,但还没把训练器加入到管道里,也没有处理训练集和验证集的拆分与传入——这是用LightGBM做模型训练时很关键的一步,毕竟你提到了要用到训练集和验证集嘛。

给你一个修正后的完整示例代码

先从拆分数据集开始,再完善管道并传入验证集:

// 假设你已经把所有数据加载到了IDataView fullData里
var dataSplit = mlContext.Data.TrainTestSplit(fullData, testFraction: 0.2); // 按8:2拆分训练/验证集
var trainingData = dataSplit.TrainSet;
var validationData = dataSplit.TestSet;

// 完善数据转换管道,加入训练器并传入验证集
var pipeline = mlContext.Transforms
    .CopyColumns("Label", nameof(TrainingDataPoint.Label))
    .Append(mlContext.Transforms.CopyColumns("Weight", "Weight"))
    // 这里要注意:如果你的Features是数值型特征,别用OneHotEncoding!换成NormalizeMinMax或者NormalizeMeanVariance更合适
    .Append(mlContext.Transforms.Categorical.OneHotEncoding("Features", nameof(TrainingDataPoint.Features)))
    // 把LightGbm训练器加入管道,同时传入验证集用于监控训练
    .Append(mlContext.BinaryClassification.Trainers.LightGbm(options, validationSet: validationData));

// 执行训练
var trainedModel = pipeline.Fit(trainingData);

几个常见的排查点

  • 检查LightGbmTrainerOptions的配置:如果你开了EarlyStoppingRound(早停),那必须传入验证集,否则训练时会直接报错,这是LightGBM的机制要求。
  • 关于Weight列:如果你的样本不需要设置权重,直接删掉CopyColumns("Weight", "Weight")这一行就行,避免因为Weight列不存在或者类型不匹配(必须是数值型)导致的问题。
  • 确认Label列的类型:LightGbmBinaryTrainer要求Label是布尔型或者0/1的整数型,要是你的Label是其他类型,得先做转换,比如用MapValue把标签映射成0和1。

备注:内容来源于stack exchange,提问作者Oliver Bernhardt

火山引擎 最新活动