朴素贝叶斯 - 没有类标签 0 的样本

Posted

技术标签:

【中文标题】朴素贝叶斯 - 没有类标签 0 的样本【英文标题】:Naive Bayes - no samples for class label 0 【发布时间】:2020-02-21 08:17:19 【问题描述】:

不久前我asked a question关于Accord.net朴素贝叶斯算法抛出错误。事实证明,这是因为我使用了离散值输入列,但没有为我为该列列出的所有值提供足够的训练数据。

现在我得到了完全相同的错误,只是这一次只有当我对输出列使用连续值时才会触发它。特别是整数数据类型的输出列。因为它是一个整数,所以 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;
        

【问题讨论】:

【参考方案1】:

对此我没有很好的答案,但我认为正在发生的事情是我使用的算法在accord.net 网站上列为分类算法。

根据here 的一些阅读,我认为分类算法无法处理连续的输出值。

我可能需要改用回归算法来获得该特定功能。

鉴于此,该算法的解决方案是手动编码输出列,或者先将其转换为字符串,以便编码库为我完​​成这项工作。

【讨论】:

以上是关于朴素贝叶斯 - 没有类标签 0 的样本的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯分类器

在 sklearn 中补充朴素贝叶斯和加权类

机器学习—朴素贝叶斯

朴素贝叶斯分类——大道至简

人工智能基础|朴素贝叶斯 SECTION1.0

使用 TextBlob 的朴素贝叶斯文本分类:当添加更多样本量时,每个实例都预测为负数