朴素贝叶斯 - class 标签 1 没有样本
Naive Bayes - no samples for class label 1
我正在使用 accord.net。我已经成功实现了 ID3 和 C4.5 这两个决策树算法,现在我正在尝试实现 Naive Bays 算法。虽然网站上有很多示例代码,但其中大部分似乎已过时或存在各种问题。
到目前为止,我在网站上找到的最佳示例代码在这里:
http://accord-framework.net/docs/html/T_Accord_MachineLearning_Bayes_NaiveBayes_1.htm
但是,当我尝试 运行 根据我的数据编写代码时,我得到:
There are no samples for class label 1. Please make sure that class
labels are contiguous and there is at least one training sample for
each label.
来自该文件的第 228 行:
https://github.com/accord-net/framework/blob/master/Sources/Accord.MachineLearning/Tools.cs
当我打电话
learner.learn(输入,输出)在我的代码中。
我已经 运行 解决了 accord 在实施其他两个回归树时出现的 Null 错误,并且我的数据已经针对该问题进行了清理。
有 accord.net 专家知道什么会触发此错误吗?
我的代码摘录:
var codebook = new Codification(fulldata, AllAttributeNames);
/*
* Get list of all possible combinations
* Status software blows up if it encounters a value it has not seen before.
*/
var attributList = new List<IUnivariateFittableDistribution>();
foreach (var attr in DeciAttributeNames)
{
{
/*
* By default we'll use a standard static list of values for this column
*/
var cntLst = codebook[attr].NumberOfSymbols;
// no decisions can be made off of the variable if it is a constant value
if (cntLst > 1)
{
KeptAttributeNames.Add(attr);
attributList.Add(new GeneralDiscreteDistribution(cntLst));
}
}
}
var data = fulldata.Copy(); // this is a datatable
/*
* Translate our training data into integer symbols using our codebook
*/
DataTable symbols = codebook.Apply(data, AllAttributeNames);
double[][] inputs = symbols.ToJagged<double>(KeptAttributeNames.ToArray());
int[] outputs = symbols.ToArray<int>(OutAttributeName);
progBar.PerformStep();
/*
* 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]
};
var alg = learner.Learn(inputs, outputs);
编辑:经过进一步的实验,这个错误似乎只在我处理一定数量的行时才会发生。如果我处理 60 行或少于 60 行我没问题,如果我处理 500 行或更多我没问题。但是在那个范围之间我抛出了这个错误。根据我选择的数据量,错误消息中的索引号可能会发生变化,我看到它的范围从 0 到 2。
所有数据都来自同一个 sql 服务器数据源,我唯一要调整的是查询的 Select Top ### 部分。
当您定义了一个没有任何示例数据的标签时,您将在多个 class 场景中收到此错误。对于小数据集,您的随机抽样可能会偶然排除具有给定标签的所有观察结果。
我正在使用 accord.net。我已经成功实现了 ID3 和 C4.5 这两个决策树算法,现在我正在尝试实现 Naive Bays 算法。虽然网站上有很多示例代码,但其中大部分似乎已过时或存在各种问题。
到目前为止,我在网站上找到的最佳示例代码在这里: http://accord-framework.net/docs/html/T_Accord_MachineLearning_Bayes_NaiveBayes_1.htm
但是,当我尝试 运行 根据我的数据编写代码时,我得到:
There are no samples for class label 1. Please make sure that class labels are contiguous and there is at least one training sample for each label.
来自该文件的第 228 行: https://github.com/accord-net/framework/blob/master/Sources/Accord.MachineLearning/Tools.cs 当我打电话 learner.learn(输入,输出)在我的代码中。
我已经 运行 解决了 accord 在实施其他两个回归树时出现的 Null 错误,并且我的数据已经针对该问题进行了清理。
有 accord.net 专家知道什么会触发此错误吗?
我的代码摘录:
var codebook = new Codification(fulldata, AllAttributeNames);
/*
* Get list of all possible combinations
* Status software blows up if it encounters a value it has not seen before.
*/
var attributList = new List<IUnivariateFittableDistribution>();
foreach (var attr in DeciAttributeNames)
{
{
/*
* By default we'll use a standard static list of values for this column
*/
var cntLst = codebook[attr].NumberOfSymbols;
// no decisions can be made off of the variable if it is a constant value
if (cntLst > 1)
{
KeptAttributeNames.Add(attr);
attributList.Add(new GeneralDiscreteDistribution(cntLst));
}
}
}
var data = fulldata.Copy(); // this is a datatable
/*
* Translate our training data into integer symbols using our codebook
*/
DataTable symbols = codebook.Apply(data, AllAttributeNames);
double[][] inputs = symbols.ToJagged<double>(KeptAttributeNames.ToArray());
int[] outputs = symbols.ToArray<int>(OutAttributeName);
progBar.PerformStep();
/*
* 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]
};
var alg = learner.Learn(inputs, outputs);
编辑:经过进一步的实验,这个错误似乎只在我处理一定数量的行时才会发生。如果我处理 60 行或少于 60 行我没问题,如果我处理 500 行或更多我没问题。但是在那个范围之间我抛出了这个错误。根据我选择的数据量,错误消息中的索引号可能会发生变化,我看到它的范围从 0 到 2。
所有数据都来自同一个 sql 服务器数据源,我唯一要调整的是查询的 Select Top ### 部分。
当您定义了一个没有任何示例数据的标签时,您将在多个 class 场景中收到此错误。对于小数据集,您的随机抽样可能会偶然排除具有给定标签的所有观察结果。