«Не удалось определить тип IDataView для элементов-членов» при вызове MakePredictionFunction - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь сделать функцию прогнозирования, используя новую Microsoft.ML 0.6.0

Когда я вызываю "model.AsDynamic.MakePredictionFunction", я получаю

"Систему.ArgumentOutOfRangeException: «Не удалось определить тип IDataView для элементов-участников» ».

Код:

using System;
using Microsoft.ML;
using Microsoft.ML.Runtime.Api;
using Microsoft.ML.Runtime.Data;
using Microsoft.ML.Trainers;
using Microsoft.ML.StaticPipe;

namespace MachineLearning
{
    class MLTest
    {
        public void Run()
        {
            var env = new LocalEnvironment();
            var reader = TextLoader.CreateReader(env, ctx => (label: ctx.LoadBool(0), features: ctx.LoadFloat(1, 3)));
            var traindata = reader.Read(new MultiFileSource("train.txt"));
            var bctx = new BinaryClassificationContext(env);
            var est = reader.MakeNewEstimator()
                .Append(x => (x.label, prediction: bctx.Trainers.Sdca(x.label, x.features.Normalize())));
            var model = est.Fit(traindata);

            //FAILS: System.ArgumentOutOfRangeException: 'Could not determine an IDataView type for member features'
            var predictionFunct = model.AsDynamic.MakePredictionFunction<Issue, Prediction>(env);

        }

        public class Issue
        {
            public float label;
            public Vector<float> features; //what is wrong?
        }

        public class Prediction
        {
            [ColumnName("prediction.predictedLabel")]
            public bool PredictionLabel;

            [ColumnName("prediction.probability")]
            public float Probability;

            [ColumnName("prediction.score")]
            public float Score;
        }
    }
}

Файл train.txt содержит:

1   0   0   0
1   0   1   0
1   0   0   1
1   0   1   1
0   1   1   1
0   1   0   1
0   1   1   0
0   1   0   0

Похоже, ошибка в классе «Issue», но что именно не так?Спасибо

1 Ответ

0 голосов
/ 13 февраля 2019

Вы пытаетесь понять схему, чтобы сделать просмотр данных и прочитать .Используя массив примитивов, вы можете использовать тип columntype, чтобы установить размер массива.

(Это для версии .10 ML.NET)

public class Issue
{
        public float label;
        public float[] features; //change this
}

Использование SchemaDefinition для подсказок по отображению типов во время выполнения

var inputSchemaDefinition = SchemaDefinition.Create(typeof(Issue), SchemaDefinition.Direction.Both);
inputSchemaDefinition["features"].ColumnType = new VectorType(NumberType.R4, 4);

Затем вы создадите движок:

var predictionEngine = model.CreatePredictionEngine<InputSchema, Prediction>(model as IHostEnvironment, inputSchemaDefinition, outputSchemaDefinition);
...