专栏首页hadoop学习笔记HanLP-朴素贝叶斯分类预测缺陷

HanLP-朴素贝叶斯分类预测缺陷

文章整理自 baiziyu 的知乎专栏,感兴趣的朋友可以去关注下这位大神的专栏,很多关于自然语言处理的文章写的很不错。昨天看到他的分享的两篇关于朴素贝叶斯分类预测的文章,整理了一下分享给给大家,文章已做部分修改!

朴素贝叶斯分类时,最好取对数变相乘为相加,防止预测结果溢出。可能出现的badcase就是明明训练语料X类目下没有词语t,而系统就将文本预测为X类目。解决方法就时改相乘为取对数相加。HanLP的朴素贝叶斯分类计算没有用对数相加的方法,而是直接用的概率相乘,很有可能溢出。

对上述内容做一些更正,HanLP的朴素贝叶斯是按照概率取对数相加做的。

看一下下边的代码

 @Override

    public double[] categorize(Document document) throws IllegalArgumentException, IllegalStateException

    {

        Integer category;

        Integer feature;

        Integer occurrences;

        Double logprob;

        double[] predictionScores = new double[model.catalog.length];

        for (Map.Entry<Integer, Double> entry1 : model.logPriors.entrySet())

        {

            category = entry1.getKey();

            logprob = entry1.getValue(); //用类目的对数似然初始化概率

            //对文档中的每个特征

            for (Map.Entry<Integer, int[]> entry2 : document.tfMap.entrySet())

            {

                feature = entry2.getKey();

                if (!model.logLikelihoods.containsKey(feature))

                {

                    continue; //如果在模型中找不到就跳过了

                }

                occurrences = entry2.getValue()[0]; //获取其在文档中的频次

                logprob += occurrences * model.logLikelihoods.get(feature).get(category); //将对数似然乘上频次

            }

            predictionScores[category] = logprob;

        }

        if (configProbabilityEnabled) MathUtility.normalizeExp(predictionScores);

        return predictionScores;

    }

这么看来,之前遇到的下边的这个badcase就还要再分析

[1] 化验指标一变化患者就六神无主,看医生怎么讲解

核心词:患者 看医生

这里“患者”和“看医生”两个词都没在“艺术”类训练语料中出现,但是预测概率最大的反倒是“艺术”。

由于用PyHanLP没法看到预测概率的计算过程,所以还是把Python的分类预测代码改为Java代码调式看一下。今天移植了预处理,资源加载,人工干预部分的代码,明天把剩余预测部分移植为Java再来看这个badcase。这就是朴素贝叶斯的优势,分析起来非常清晰容易。不过从PyHanLP的预测输出概率值来看,不太像是取了对数相加得到的,因为都是0-1之间的数值,这一看就是概率值。

�}��3^ݔ

原文链接:https://zhuanlan.zhihu.com/p/72733641

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 11. HanLP实现朴素贝叶斯/SVM--文本分类

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP

    mantch
  • 朴素贝叶斯分类器

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    狼啸风云
  • 【机器学习入门】机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)

    寄语:首先,简单介绍了生成模型和判别模型,对条件概率、先验概率和后验概率进行了总结;其次,对朴素贝叶斯的原理及公式推导做了详细解读;再次,对三种可能遇到的问题进...

    黄博的机器学习圈子
  • 太赞了!机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)

    寄语:首先,简单介绍了生成模型和判别模型,对条件概率、先验概率和后验概率进行了总结;其次,对朴素贝叶斯的原理及公式推导做了详细解读;再次,对三种可能遇到的问题进...

    Datawhale
  • 朴素贝叶斯 – Naive Bayes classifier | NBC

    一旦计算,概率模型可用于使用贝叶斯定理对新数据进行预测。当您的数据是实值时,通常假设高斯分布(钟形曲线),以便您可以轻松估计这些概率。

    easyAI
  • 译文:朴素贝叶斯算法简介(Python和R中的代码)

    朴素贝叶斯是一种用于分类问题的机器学习算法。它是基于贝叶斯概率定理的。主要用于涉及高维训练数据集的文本分类。几个相关的例子有:垃圾邮件过滤、情感分析和新闻文章...

    小莹莹
  • 数据挖掘面试题之:朴素贝叶斯

    关于作者:DD-Kylin,一名喜欢编程与机器学习的统计学学生,勤学好问,乐于钻研,期待跟大家多多探讨机器学习的相关内容~

    木东居士
  • 机器学习之朴素贝叶斯算法

    朴素贝叶斯(Naive Bayesian)算法能够根据数据加先验概率来估计后验概率,在垃圾邮件分类、文本分类、信用等级评定等多分类问题中得到广泛应用。对于多数的...

    小一
  • 朴素贝叶斯python代码实现(西瓜书)

    朴素贝叶斯也是机器学习中一种非常常见的分类方法,对于二分类问题,并且数据集特征为离散型属性的时候, 使用起来非常的方便。原理简单,训练效率高,拟合效果好。

    知然

扫码关注云+社区

领取腾讯云代金券