Использование Ml. net ошибка пакета "System.ArgumentOutOfRangeException" - PullRequest
0 голосов
/ 14 февраля 2020

При использовании пакета ML. net ошибка «System.ArgumentOutOfRangeException:« Несоответствие схемы для столбца объектов «Возможности»: ожидаемый вектор, полученный вектор Имя параметра: 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

Где используются только некоторые данные.

1 Ответ

0 голосов
/ 14 февраля 2020

У вас есть несколько десятичных знаков в данных; измените ваши 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;
}

Надеюсь, это поможет!

...