机器学习分类算法之朴素贝叶斯

摘要:
1、 朴素贝叶斯模型(NBM)是一种基于条件概率和监督算法的分类器,通常用于文本分类和垃圾邮件过滤。贝叶斯理论是解决逆概率问题,即通过已知发生的概率来推断未发生的事情将发生的概率。2、 朴素贝叶斯中每个事件的概率彼此独立,即,m个事件概率P(m)和n个事件概率P(n)同时发生的概率为P(mn)=P(m)*P(n)。当B出现时,条件概率的含义

一、概念

朴素贝叶斯模型(Naive Bayesian Model,NBM)是以条件概率为基础的分类器,是一种监督算法,常被用于文本分类和垃圾邮件过滤。
贝叶斯理论解决的是逆向概率问题,即通过已经发生的已知的概率来推测未发生的事将会发生的概率。

 二、计算

朴素贝叶斯各个事件发生的概率是彼此独立的,即m事件概率P(m)和n事件概率P(n)同时发生的概率为P(mn)=P(m)*P(n)。
条件概率的含义,B发生时A发生的概率为:

机器学习分类算法之朴素贝叶斯第1张

A发生时B发生的概率为:

机器学习分类算法之朴素贝叶斯第2张

所以:

机器学习分类算法之朴素贝叶斯第3张

机器学习分类算法之朴素贝叶斯第4张

即,通过已知结果算出概率,然后根据一些条件推测即将发生的结果。

三、实现

features = ['looks', 'credit', 'education', 'height']
samples = [['nice', 'bad', 'S', 'low', 'no'],
           ['ugly', 'good', 'S', 'high', 'no'],
           ['nice', 'good', 'S', 'high', 'yes'],
           ['ugly', 'good', 'H', 'high', 'yes'],
           ['nice', 'bad', 'S', 'high', 'no'],
           ['nice', 'bad', 'S', 'high', 'no'],
           ['nice', 'good', 'H', 'low', 'yes'],
           ['ugly', 'good', 'M', 'high', 'yes'],
           ['nice', 'good', 'M', 'high', 'yes'],
           ['ugly', 'bad', 'H', 'high', 'yes'],
           ['nice', 'good', 'S', 'low', 'no'],
           ['nice', 'good', 'S', 'low', 'no'],
           ['nice', 'bad', 'H', 'low', 'no']]


def train():
    data = {}
    results = {}
    for sample in samples:
        for index in range(len(sample) - 1):
            element = sample[index]
            relation = '%s_%s' % (element, sample[-1])
            if element in data:
                data[element] += 1
            else:
                data[element] = 1
            if relation in data:
                data[relation] += 1
            else:
                data[relation] = 1
        if sample[-1] in results:
            results[sample[-1]] += 1
        else:
            results[sample[-1]] = 1
    return data, results


def classify(new_data):
    data, results = train()
    classify_result = []
    for ret_key, ret_value in results.items():
        dividend_probabilities = []
        divisor_probabilities = []
        for element in new_data:
            divisor_probabilities.append(data[element] / len(samples))
            relation = '%s_%s' % (element, ret_key)
            dividend_probabilities.append(data.get(relation, 0) / ret_value)
        value_probability = ret_value / len(samples)
        final_probability = reduce(lambda x, y: x * y, dividend_probabilities) * value_probability / reduce(
            lambda x, y: x * y, divisor_probabilities)
        classify_result.append((ret_key, final_probability))
    return classify_result

print(classify(['nice', 'bad', 'S', 'low']))

 有一款开源的贝叶斯分类器也很好用,叫做naive-bayes-classifier,因为该分类传入的为字符串,在传入样本前需要先进行转换。

from naiveBayesClassifier import tokenizer
from naiveBayesClassifier.trainer import Trainer
from naiveBayesClassifier.classifier import Classifier


def third_part_method(test_data):
    news_trainer = Trainer(tokenizer)

    for sample in samples:
        news_trainer.train(' '.join(sample[0:-1]), sample[-1])

    news_classifier = Classifier(news_trainer.data, tokenizer)
    a = ' '.join(test_data)
    classification = news_classifier.classify(a)
    return classification

print(third_part_method(['nice', 'good', 'H', 'high']))

对于同一个测试数据,两种方法概率不相等,但是分类结果是一致的。

机器学习分类算法之朴素贝叶斯第5张

第一行是第三方包的结果,第二行是自己写的分类器的结果。

免责声明:文章转载自《机器学习分类算法之朴素贝叶斯》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ARPG游戏引擎设计思路【原】移动web页面支持弹性滚动的3个方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Data Mining | 二分类模型评估-ROC/AUC/K-S/GINI

目录 1 混淆矩阵衍生指标 1.1 ROC 1.2 AUC 1.3 K-S 1.4 GINI 1.5 小结 1 混淆矩阵衍生指标 上面提到的ACC、PPV、TPR、FPR等指标,都是对某一给定分类结果的评估,而绝大多数模型都能产生好多份分类结果(通过调整阈值),所以它们的评估是单一的、片面的,并不能全面地评估模型的效果。因此,需要引入新的评估指标...

机器学习基础——带你实战朴素贝叶斯模型文本分类

本文始发于个人公众号:TechFlow 上一篇文章当中我们介绍了朴素贝叶斯模型的基本原理。 朴素贝叶斯的核心本质是假设样本当中的变量服从某个分布,从而利用条件概率计算出样本属于某个类别的概率。一般来说一个样本往往会含有许多特征,这些特征之间很有可能是有相关性的。为了简化模型,朴素贝叶斯模型假设这些变量是独立的。这样我们就可以很简单地计算出样本的概率。 想要...

零基础入门深度学习(5)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,《零基础入门深度学习》系列文章旨在讲帮助爱编程的你从零基础达到入门级水平。零基础意味着你不需要太多的数学知识,只要会写程序就行了,...

机器学习 -- 统计与分布

      机器学习中用到的一些统计方面的概念。 1. 标准差     公式:       假设一个班有30个学生,每个学生的语文课的考试成绩是 Xi, 平均分是80,标准差 不是每个学生的成绩减去平均分的平方的和,再除以学生数,然后再开方。     意义: 标准差越大,表示学生之间的水平相差较大。 2. 加权均值     平均值计算时,按照权重的。比如...

拓端数据tecdat|R语言贝叶斯线性回归和多元线性回归构建工资预测模型

原文链接:http://tecdat.cn/?p=21641  工资模型 在劳动经济学领域,收入和工资的研究为从性别歧视到高等教育等问题提供了见解。在本文中,我们将分析横断面工资数据,以期在实践中使用贝叶斯方法,如BIC和贝叶斯模型来构建工资的预测模型。 加载包 在本实验中,我们将使用dplyr包探索数据,并使用ggplot2包进行数据可视化。我们也可...

隐型马尔科夫模型(HMM)向前算法实例讲解(暴力求解+代码实现)---盒子模型

先来解释一下HMM的向前算法: 前向后向算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率。我们先来看看前向算法是如何求解这个问题的。 前向算法本质上属于动态规划的算法,也就是我们要通过找到局部状态递推的公式,这样一步步的从子问题的最优解拓展到整个问题的最优解。在这里我们认为随机过程中各个状态St的概率分布,只与它的前一个状态St-...