C# 使用Ml.net软件包错误“;System.ArgumentOutOfRangeException“;

C# 使用Ml.net软件包错误“;System.ArgumentOutOfRangeException“;,c#,ml.net,C#,Ml.net,使用ML.net包时,出现错误“System.ArgumentOutOfRangeException:“Features”列的架构不匹配:预期向量,获取向量 参数名称:inputSchema“”被抛出到行“var model=trainingPipeline.Fit(trainData);”上。在理解错误的同时,我无法理解为什么会为代码抛出错误 class Program { static void Main(string[] args) {

使用ML.net包时,出现错误“System.ArgumentOutOfRangeException:“Features”列的架构不匹配:预期向量,获取向量 参数名称: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;
        }
    }

其中仅使用了部分数据

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


希望有帮助

您可能不需要数据,但尝试添加ModelInput类中缺少的项。我只向其中输入了这5个值,因此不再显示该类:)我的意思是在类中添加缺少的项,看看这是否修复了错误。:)这难道不像添加一个从未调用过的类,或者设置从未使用过的变量吗?我一定会尝试,因为我还在学习,但我不确定它能完成全部任务!当这样做的时候,我需要转换所有的数据以便处理吗?如果数据看起来像你的样本,你应该很好,整数很容易被转换成浮点数,所以LoadFromTextFile方法可以处理它。我发现在完成数据的同时转换每一位数据更容易
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
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;
}