Неточная модель двоичной классификации - PullRequest
0 голосов
/ 27 мая 2019

Я делаю двоичную классификацию в форме XOR-шлюза, используя ML.NET и SdcaLogisticRegression.

Проблема, с которой я столкнулся, заключается в том, что модель выдает неточные прогнозы для входных данных, которые я ей даю.Например, он предсказывает значение 0 с вероятностью 0,459 для входов 0,8 и 0,2.

Не могли бы вы посмотреть, не подходит ли мой код или алгоритм для создания гейта XOR?

Я обучилмодель с различными объемами обучающих данных и каждый раз получала похожие результаты (от 200 до 1M строк в файле обучающих данных).

IDataView trainingData = context.Data.LoadFromTextFile<XorInput>(trainDataFile, separatorChar: ',', hasHeader: true);

IDataView testData = context.Data.LoadFromTextFile<XorInput>(testDataFile, separatorChar: ',', hasHeader: true);

var trainingPipeline = context.Transforms.Concatenate("Features", "Inputs").Append(context.BinaryClassification.Trainers.SdcaLogisticRegression(labelColumnName: "Label", featureColumnName: "Features"));

ITransformer trainedModel = trainingPipeline.Fit(trainingData);

XorInput sampleInput = new XorInput { Inputs = new float[] {0.8f, 0.2f } };

var predEngine = context.Model.CreatePredictionEngine<XorInput, XorOutputPrediction>(trainedModel);

var resultprediction = predEngine.Predict(sampleInput);

Console.WriteLine($"=============== Single Prediction  ===============");
Console.WriteLine($"Inputs: {sampleInput.Inputs[0]}, {sampleInput.Inputs[1]}  | Prediction: {(Convert.ToInt16(resultprediction.Prediction))} | Probability: {resultprediction.Probability} ");
Console.WriteLine($"==================================================");

Просто для справки, мои классы XorInput и XorOutputPrediction выглядят так:

public class XorInput
    {
        [LoadColumn(0), ColumnName("Label")]
        public bool Label;

        [LoadColumn(1,2)]
        [VectorType(2)]
        //[ColumnName("Features")]
        public float[] Inputs;
    }

    public class XorOutputPrediction
    {
        [ColumnName("PredictedLabel")]
        public bool Prediction { get; set; }

        public float Probability { get; set; }

        public float Score { get; set; }
    }

Данные, содержащиеся в trainDataFile и testDataFile, выглядят так:

0,  0.9173474,  0.8329648
0,  0.4942033,  0.1281894
0,  0.4558121,  0.1869916
1,  0.738331,   0.4427712
0,  0.8739759,  0.5859472
1,  0.7447554,  0.1089314
1,  0.2433814,  0.6192696

Для входных значений 0,8 и 0,2 я ожидаю выходной прогноз 1. 1. 1016 *

1 Ответ

0 голосов
/ 28 мая 2019

Я переключил алгоритм обучения на Fast Forest и получил точность до 99,97% с правильными результатами.

...