使用 Accord.net 库抛出 IndexOutOfRangeException 进行分类



我是机器学习的新手。我正在使用 Accord.NET

有一个简单的分类问题,我有一些时间段,每个周期根据周期的开始时间和周期的结束时间都有自己的类型(这是描述的简化描述(

我试图编写这段代码来学习机器,但它总是被抛出

System.IndexOutOfRangeException:索引在数组的边界之外。

List<List<int>> trainingList = ConvertDuruslarToIntegerList();
int[][] inputs = GetInputs(trainingList);
int[] outputs = GetOutpus(trainingList);
int[] distinct = outputs.Distinct().ToArray();
Dictionary<int, int> dic = new Dictionary<int, int>();
for (int i = 0; i < distinct.Length; i++)
    dic.Add(distinct[i], i + 1);
List<int> preparedOutput = new List<int>();
for (int i = 0; i < outputs.Length; i++)
    preparedOutput.Add(dic[outputs[i]]);
int classesCount = preparedOutput.Distinct().Count();
var allthings = inputs.Aggregate((x, y) => x.Concat(y).ToArray()).Concat(preparedOutput);
var minAllthings = allthings.Min();
var maxAllthings = allthings.Max();
var symbolsCount = maxAllthings - minAllthings + 1;
var function = new MarkovDiscreteFunction(states: classesCount, symbols: symbolsCount, outputClasses: classesCount);
var classifier = new HiddenConditionalRandomField<int>(function);
// Create a learning algorithm
var teacher = new HiddenResilientGradientLearning<int>(classifier)
{
    MaxIterations = 10
};
// Run the algorithm and learn the models
teacher.Learn(inputs, preparedOutput.ToArray());

teacher.Learn 方法中引发异常

Accord 期望类从零开始。如果更改以下行,则可以成功学习:

dic.Add(distinct[i], i);

最新更新