Не так давно я задал вопрос о том, что наивный байесовский алгоритм Accord.net выдает ошибку. Оказалось, что это из-за того, что я использовал столбцы ввода дискретных значений, но не дал достаточно обучающих данных для всех значений, которые я перечислил для столбца.
Теперь я получаю точно такую же ошибку, только на этот раззапускается только когда я использую значение Continuous для моего выходного столбца. В частности, выходной столбец целочисленного типа данных. Поскольку это целое число, класс Codification не переводит его, поэтому значения передаются непосредственно в алгоритм Наивного Байеса, и алгоритм, очевидно, не может это обработать.
Если я вручную изменю тип данных столбца на строкуи отправить его через класс Codification для кодификации, а затем отправить результаты этого через алгоритм, который он работает правильно.
Есть ли какая-либо конкретная причина, по которой этот алгоритм не может обрабатывать непрерывные типы данных в качестве выходных данных? Есть ли какие-то настройки, которые мне нужно включить, чтобы эта работа работала?
Пример кода:
DataTable symbols = TrainingCodebook.Apply(DataTraining, AllAttributeNames);
double[][] inputs = symbols.ToJagged<double>(KeptAttributeNames.ToArray());
// *** The line that is breaking ***
int[] outputs = symbols.ToArray<int>(outputCol);
// *** The replacement test code that does work ***
// DataStringTraining is the same as DataTraining, but all values are strings
//Codification codeee = new Codification(DataStringTraining, outputCol);
//var sym = codeee.Apply(DataStringTraining, outputCol);
//int[] outputs = sym.ToArray<int>(outputCol);
/*
* Create a new instance of the learning algorithm
* and build the algorithm
*/
var learner = new NaiveBayesLearning<IUnivariateFittableDistribution>()
{
// Tell the learner how to initialize the distributions
Distribution = (classIndex, variableIndex) => attributList[variableIndex],
};
NaiveBayes<IUnivariateFittableDistribution> alg = null;
try
{
ProgPerformStep("Computing and training algorithm");
alg = learner.Learn(inputs, outputs);
}
catch (Exception ex)
{
ProgPerformStep($"ERROR: Naive Bayes: {ex.Message}", ex);
return;
}