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

ML.NET回归训练报错:Label列类型不匹配(预期Single,实际Vector<Single>)

ML.NET回归训练器Label类型不匹配错误解决办法

问题原因

你将标签列Actual改为float[](对应ML.NET的Vector<Single>类型),但回归训练器要求Label必须是单个Single数值,而非向量类型,因此触发Schema mismatch for label column 'Label': expected Single, got Vector<Single>错误。输入列改为向量是为了适配部分归一化选项,但标签列不需要遵循这个要求。

解决方案

方案1:修改ModelInput,保留标签为单个数值(推荐)

只将需要归一化的输入列设为向量,标签列保持为单个float类型:

public class ModelInput
{
    [LoadColumn(0)]
    public float Actual { get; set; } // 移除VectorType特性,保持单个float

    [LoadColumn(1)]
    [VectorType(1)]
    public float[] Input1 { get; set; }

    [LoadColumn(2)]
    [VectorType(1)]
    public float[] Input2 { get; set; }

    [LoadColumn(3)]
    [VectorType(1)]
    public float[] Input3 { get; set; }
}

同时调整赋值代码,直接给Actual赋值单个float:

modelInput.Actual = Convert.ToSingle(actual);

方案2:保留向量类型标签,添加转换步骤

如果必须保留Actual为向量类型,可在数据处理Pipeline中添加VectorToScalar转换,将向量转为单个数值作为Label:

var dataProcessPipeline = mlContext.Transforms
    .CopyColumns("LabelTemp", nameof(ModelInput.Actual))
    // 将Vector<Single>转换为Single类型的Label
    .Append(mlContext.Transforms.Conversion.VectorToScalar(outputColumnName: "Label", inputColumnName: "LabelTemp"))
    .Append(mlContext.Transforms.NormalizeBinning(outputColumnName: nameof(ModelInput.Input1)))
    .Append(mlContext.Transforms.NormalizeBinning(outputColumnName: nameof(ModelInput.Input2)))
    .Append(mlContext.Transforms.NormalizeBinning(outputColumnName: nameof(ModelInput.Input3)))
    .Append(mlContext.Transforms.Concatenate("Features", nameof(ModelInput.Input1),
        nameof(ModelInput.Input2), nameof(ModelInput.Input3)));

说明

归一化组件(如NormalizeBinning)支持向量类型输入是为了处理多维度特征,但回归任务的标签本质是单个预测目标值,因此必须保持为非向量的数值类型。两种方案都能解决Schema不匹配问题,方案1更符合回归任务的数据结构设计。

内容的提问来源于stack exchange,提问作者DarthVegan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:24:53