You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ML.NET执行Fit()时报找不到Features列错误的原因是什么

ML.NET找不到Features列报错原因及解决方案

核心错误原因

你的管道执行顺序配置错误:在预训练处理管道中,你先调用了需要使用Features列的二分类训练器,后执行生成Features列的拼接操作,训练器运行时所需的输入列还未被生成,因此抛出列不存在的异常。

原预训练管道的执行逻辑顺序是错误的:

  1. 生成Labels列
  2. 生成TextFeaturized列
  3. 调用SdcaLogisticRegression训练器,要求输入Features列(此时该列还未生成)
  4. 执行Concatenate生成Features列

你需要把Concatenate生成Features列的步骤,放到所有需要使用该列的训练器之前。

其他关联问题

  1. 标签列名不匹配:你前面通过MapValueToKey生成的标签列名为Labels,但后续多分类训练器SdcaMaximumEntropy传入的标签列参数为Label,拼写不一致,修复Features问题后还会触发标签列找不到的报错。
  2. 冗余训练器逻辑:如果你最终的训练目标是基于Subject字段的多分类任务,那么预训练管道中加入的二分类训练器SdcaLogisticRegression是多余的,还会改变管道输出的结构,建议删除。

修正后代码示例

修正后的预训练处理管道

static IEstimator<ITransformer> Subject_ProcessData()
{
    var subjectModel = _mlContext.Transforms.Conversion.MapValueToKey(inputColumnName: "Subject", outputColumnName: "Label")
       .Append(_mlContext.Transforms.Text.FeaturizeText(inputColumnName: "Text", outputColumnName: "TextFeaturized"))
        // 先拼接生成Features列,再给训练器使用
       .Append(_mlContext.Transforms.Concatenate("Features", "TextFeaturized"))
       .AppendCacheCheckpoint(_mlContext);

    return subjectModel;
}

修正后的训练执行代码

var pipeline = Subject_ProcessData()
   .Append(_mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy("Label", "Features"))
   .Append(_mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));

var model = pipeline.Fit(_trainingDataView);

如果你需要同时保留二分类训练逻辑,也请遵循「先生成所需输入列、再调用训练器」的顺序调整管道步骤即可。

内容的提问来源于stack exchange,提问作者김미나

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:24:05