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
相关产品推荐
相关产品推荐

