【问题标题】:Classification with Accord.net library throw IndexOutOfRangeException使用 Accord.net 库进行分类抛出 IndexOutOfRangeException
【发布时间】:2019-10-22 18:41:06
【问题描述】:

我是机器学习的新手。 我正在使用 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方法中抛出异常

【问题讨论】:

    标签: c# classification accord.net


    【解决方案1】:

    Accord 期望类是从零开始的。改下面这行就可以成功学习了:

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

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2020-11-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多