朴素贝叶斯 - class 标签 0 没有样本
Naive Bayes - no samples for class label 0
不久前我关于Accord.net朴素贝叶斯算法抛出一个错误。原来这是因为我使用了离散值输入列,但没有为我为该列列出的所有值提供足够的训练数据。
现在我得到了完全相同的错误,只是这次只有当我为我的输出列使用连续值时才会触发它。特别是整数数据类型的输出列。因为它是一个整数,Codification class 没有翻译它,所以值直接传递给朴素贝叶斯算法,而该算法显然无法处理。
如果我手动将列数据类型更改为字符串并通过编纂 class 将其发送以进行编纂,然后通过其正常工作的算法发送结果。
此算法无法将连续数据类型作为输出处理是否有任何特殊原因?是否需要启用某些设置才能使其正常工作?
一些示例代码:
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;
}
我对此没有很好的答案,但我认为正在发生的是我正在使用的算法作为分类算法列在 accord.net 网站上。
根据一些阅读资料 here,我认为分类算法无法处理连续的输出值。
我可能需要改用回归算法来获得该特定功能。
鉴于此,该算法的解决方案是手动编码输出列,或先将其转换为字符串,以便编码库为我完成这项工作。
不久前我
现在我得到了完全相同的错误,只是这次只有当我为我的输出列使用连续值时才会触发它。特别是整数数据类型的输出列。因为它是一个整数,Codification class 没有翻译它,所以值直接传递给朴素贝叶斯算法,而该算法显然无法处理。
如果我手动将列数据类型更改为字符串并通过编纂 class 将其发送以进行编纂,然后通过其正常工作的算法发送结果。
此算法无法将连续数据类型作为输出处理是否有任何特殊原因?是否需要启用某些设置才能使其正常工作?
一些示例代码:
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;
}
我对此没有很好的答案,但我认为正在发生的是我正在使用的算法作为分类算法列在 accord.net 网站上。
根据一些阅读资料 here,我认为分类算法无法处理连续的输出值。
我可能需要改用回归算法来获得该特定功能。
鉴于此,该算法的解决方案是手动编码输出列,或先将其转换为字符串,以便编码库为我完成这项工作。