使用 Ml.net 包错误 "System.ArgumentOutOfRangeException"

Using Ml.net package error "System.ArgumentOutOfRangeException"

在使用 ML.net 打包时出现错误“System.ArgumentOutOfRangeException: 'Schema mismatch for feature column 'Features': expected Vector, got Vector 参数名称:inputSchema'" 在行 "var model = trainingPipeline.Fit(trainData);" 上被抛出。在理解错误时我不明白为什么它被代码

抛出
 class Program
    {

        static void Main(string[] args)
        {



            MLContext mlcontext = new MLContext();
            IDataView trainData = mlcontext.Data.LoadFromTextFile<ModelInput>("StockTrain.csv", separatorChar: ',', hasHeader: false);           
            var dataProcessPipeline = mlcontext.Transforms.Concatenate(outputColumnName: "Features", "age", "blPressure", "BiSkinthck", "NoPreg");





            var trainer = mlcontext.Regression.Trainers.LightGbm(labelColumnName: "bmi", featureColumnName: "Features");
            var trainingPipeline = dataProcessPipeline.Append(trainer);
            var model = trainingPipeline.Fit(trainData);

            IDataView testData = mlcontext.Data.LoadFromTextFile<ModelInput>("StockTest.csv", separatorChar: ',', hasHeader: false);
            IDataView predictions = model.Transform(testData);
            var metrics = mlcontext.Regression.Evaluate(predictions, "bmi");




                                                 //(0)     (2)  (3)       (5)         (7)
            var input = new ModelInput           //<4>,144,<58>,<28>,140,<29.5>,0.287,<37>,0
            {
                NoPreg = 4,
                blPressure = 58,
                BiSkinthck = 28,
                age = 37
            };
            var result = mlcontext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(model).Predict(input);
            Console.WriteLine($"Predicted bmi " + $"{result.bmi}");
        }

        public class ModelOutput
        {
            [ColumnName("Score")]
            public int bmi;
        }

        public class ModelInput
        {
            [LoadColumn(0)]
            public int NoPreg;
            [LoadColumn(2)]
            public int blPressure;
            [LoadColumn(3)]
            public int BiSkinthck;
            [LoadColumn(5)]
            public int bmi;
            [LoadColumn(7)]
            public int age;
        }
    }

正在使用的一些示例数据是:

6,148,72,35,0,33.6,0.627,50,1
1,85,66,29,0,26.6,0.351,31,0
8,183,64,0,0,23.3,0.672,32,1
1,89,66,23,94,28.1,0.167,21,0
0,137,40,35,168,43.1,2.288,33,1
5,116,74,0,0,25.6,0.201,30,0

其中仅使用了部分数据。

您的数据中有一些小数;将您的 ModelInput 和 ModelOutput 更改为使用浮点数(此外,预测的分数是回归中的浮点数)

public class ModelOutput
{
    [ColumnName("Score")]
    public float bmi;
}

public class ModelInput
{
    [LoadColumn(0)]
    public float NoPreg;
    [LoadColumn(2)]
    public float blPressure;
    [LoadColumn(3)]
    public float BiSkinthck;
    [LoadColumn(5)]
    public float bmi;
    [LoadColumn(7)]
    public float age;
}

希望对您有所帮助!