我是机器学习的新手。我正在使用 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);