首页 文章

朴素贝叶斯分类的简单解释

提问于
浏览
508

我发现很难理解Naive Bayes的过程,我想知道是否有人可以用英语简单的一步一步解释它 . 我理解它需要按时间比较概率,但我不知道训练数据如何与实际数据集相关 .

请给我一个关于训练集扮演什么角色的解释 . 我在这里给出一个非常简单的水果例子,例如香蕉

training set---
round-red
round-orange
oblong-yellow
round-red

dataset----
round-red
round-orange
round-red
round-orange
oblong-yellow
round-red
round-orange
oblong-yellow
oblong-yellow
round-red

5 回答

  • 1009

    据我所知,你的问题分为两部分 . 一个是你需要更多地理解Naive Bayes分类器,其次是围绕训练集的混乱 .

    通常,所有机器学习算法都需要针对监督学习任务(如分类,预测等)或无人监督学习任务(如聚类)进行培训 .

    通过训练,它意味着对特定输入进行训练,以便稍后我们可以根据他们的学习对他们进行未知输入(他们以前从未见过)进行测试,以便对他们进行分类或预测等(在监督学习的情况下) . 这就是神经网络,SVM,贝叶斯等大多数机器学习技术的基础 .

    因此,在一般的机器学习项目中,您必须将输入集划分为开发集(训练集开发测试集)和测试集(或评估集) . 请记住,您的基本目标是您的系统在Dev set或test set中学习和分类他们以前从未见过的新输入 .

    测试集通常具有与训练集相同的格式 . 但是,测试集与训练语料库不同是非常重要的:如果我们只是将训练集重新用作测试集,那么只是记住其输入而不学习如何推广到新例子的模型会产生误导性高分数 .

    一般而言,例如,70%可以是训练集案例 . 还记得将原始集合随机分成训练和测试集 .

    现在我来谈谈你关于Naive Bayes的另一个问题 .

    Source for example belowhttp://www.statsoft.com/textbook/naive-bayes-classifier

    为了演示朴素贝叶斯分类的概念,请考虑下面给出的例子:

    enter image description here

    如图所示,对象可以分类为 GREENRED . 我们的任务是在新案件到达时对其进行分类,即根据当前存在的对象决定它们属于哪个类别标签 .

    由于 GREEN 对象的数量是 RED 的两倍,因此有理由认为新案例(尚未观察到)的成员资格是 GREEN 而非 RED 的两倍 . 在贝叶斯分析中,这种信念被称为先验概率 . 先验概率基于以前的经验,在这种情况下是 GREENRED 对象的百分比,并且通常用于在实际发生之前预测结果 .

    因此,我们可以写:

    Prior Probability of GREENnumber of GREEN objects / total number of objects

    Prior Probability of REDnumber of RED objects / total number of objects

    由于总共有 60 个对象,其中 40GREEN 和20个 RED ,我们之前的类成员资格概率是:

    Prior Probability for GREEN40 / 60

    Prior Probability for RED20 / 60

    在制定了我们的先验概率之后,我们现在准备对新对象进行分类(下图中的 WHITE 圈) . 由于对象被很好地聚类,因此可以合理地假设X附近的对象越多,新情况就越可能属于该特定颜色 . 为了测量这种可能性,我们在X周围绘制一个圆圈,其中包含一个点(可以先验地选择),而不管它们的类别标签 . 然后我们计算属于每个类标签的圆中的点数 . 由此我们计算可能性:

    enter image description here

    enter image description here

    从上图可以看出,给定 GREEN 的可能性小于 X 给出 RED 的可能性,因为该圆包含 1 GREEN 对象和 3 RED . 从而:

    enter image description here

    enter image description here

    虽然先验概率表明 X 可能属于 GREEN (假设 GREEN 与_617116相比有两倍),则可能性表示不然; X 的类成员资格是 RED (假设 X 附近有 RED 个对象,而不是 GREEN ) . 在贝叶斯分析中,通过组合两个信息源(即先验和可能性)来产生最终分类,以使用所谓的贝叶斯规则(以Rev.Thomas Bayes 1702-1761命名)形成后验概率 .

    enter image description here

    最后,我们将X分类为 RED ,因为它的类成员资格达到了最大的后验概率 .

  • 17

    我意识到这是一个老问题,有一个确定的答案 . 我发帖的原因是,接受的答案有很多k-NN元素(k-最近邻居),不同算法 .

    k-NN和NaiveBay都是分类算法 . 从概念上讲,k-NN使用“接近度”的概念来对新实体进行分类 . 在k-NN中,“近似性”用欧几里德距离或余弦距离等思想建模 . 相比之下,在NaiveBayes中,“概率”的概念用于对新实体进行分类 .

    既然问题是关于Naive Bayes,那么我就是如何向某人描述想法和步骤的 . 我会尝试用尽可能少的方程式和简单的英语来做 .

    首先,条件概率和贝叶斯规则

    在有人能够理解和欣赏Naive Bayes ', they need to know a couple of related concepts first, namely, the idea of Conditional Probability, and Bayes'规则的细微差别之前 . (如果您熟悉这些概念,请跳至 Headers 为 Getting to Naive Bayes' 的部分)

    Conditional Probability 用简单的英语:考虑到其他事情已经发生,事情发生的可能性是多少 .

    让我们说有一些结果O.和一些证据E.从这些概率的定义方式:同时具有结果O和证据E的概率是:(发生O的概率)乘以(E的问题,给出发生了哦)

    理解条件概率的一个例子:

    假设我们收集了美国参议员 . 参议员可以是民主党人或共和党人 . 他们也是男性或女性 .

    如果我们完全随机选择一位参议员,那么这个人是女性民主党人的概率是多少?条件概率可以帮助我们回答这个问题 .

    (民主党和女参议员)= Prob(参议员是民主党人)的概率乘以有条件的女性概率,因为他们是民主党人 .

    P(Democrat & Female) = P(Democrat) * P(Female | Democrat)
    

    我们可以用相反的方式计算完全相同的东西:

    P(Democrat & Female) = P(Female) * P(Democrat | Female)
    

    了解贝叶斯规则

    从概念上讲,这是一种从P(证据|已知结果)到P(结果|已知证据)的方法 . 通常,我们知道在给定已知结果的情况下观察某些特定证据的频率 . 我们必须使用这个已知的事实来计算反向,以便在给出证据的情况下计算结果发生的可能性 .

    P(结果给出我们知道一些证据)= P(证据表明我们知道结果)乘以Prob(结果),按P(证据)换算

    理解贝叶斯规则的经典例子:

    Probability of Disease D given Test-positive = 
    
                   Prob(Test is positive|Disease) * P(Disease)
         _______________________________________________________________
         (scaled by) Prob(Testing Positive, with or without the disease)
    

    现在,这一切只是序言,来到Naive Bayes .

    进入朴素贝叶斯'

    到目前为止,我们只谈了一件证据 . 实际上,我们必须预测给定的结果 multiple evidence. 在这种情况下,数学变得非常复杂 . 为了解决这种并发症,一种方法是多个证据,并将每一个证据视为独立的 . 这种方法就是为什么这被称为朴素贝叶斯 .

    P(Outcome|Multiple Evidence) = 
    P(Evidence1|Outcome) * P(Evidence2|outcome) * ... * P(EvidenceN|outcome) * P(Outcome)
    scaled by P(Multiple Evidence)
    

    很多人选择记住这个:

    P(Likelihood of Evidence) * Prior prob of outcome
    P(outcome|evidence) = _________________________________________________
                                             P(Evidence)
    

    请注意有关此等式的一些事项:

    • 如果Prob(证据|结果)是1,那么我们只是乘以1 .

    • 如果Prob(某些特定证据|结果)为0,那么整个概率 . 如果你看到矛盾的证据,我们可以排除这种结果 .

    • 由于我们用P(证据)来划分所有东西,我们甚至可以在不计算它的情况下逃脱 .

    • 与先验相乘的直觉是,我们给出了更多共同结果的概率,以及对不太可能的结果的低概率 . 这些也被称为 base rates ,它们是一种扩展我们预测概率的方法 .

    如何应用NaiveBayes预测结果?

    只需针对每种可能的结果运行上面的公式 . 由于我们正在尝试进行分类,因此每个结果都称为 class 并且它具有 class label. 我们的工作是查看证据,考虑成为此类或该类的可能性,并为每个实体分配标签 . 同样,我们采用一种非常简单的方法:具有最高概率的类被声明为"winner",并且该类标签被分配给该证据组合 .

    水果示例

    让我们尝试一个例子来增加我们的理解:OP要求一个“水果”识别示例 .

    假设我们有1000块水果的数据 . 它们碰巧是 BananaOrange 或某些 Other Fruit . 我们知道每种水果的3个特征:

    • 是否是龙

    • 无论是甜蜜还是甜蜜

    • 如果颜色为黄色 .

    这是我们'training set.'我们将使用它来预测我们遇到的任何新水果的类型 .

    Type           Long | Not Long || Sweet | Not Sweet || Yellow |Not Yellow|Total
                 ___________________________________________________________________
    Banana      |  400  |    100   || 350   |    150    ||  450   |  50      |  500
    Orange      |    0  |    300   || 150   |    150    ||  300   |   0      |  300
    Other Fruit |  100  |    100   || 150   |     50    ||   50   | 150      |  200
                ____________________________________________________________________
    Total       |  500  |    500   || 650   |    350    ||  800   | 200      | 1000
                 ___________________________________________________________________
    

    我们可以预先计算很多关于我们水果收集的东西 .

    所谓的"Prior"概率 . (如果我们不知道任何水果属性,这将是我们的猜测 . )这些是我们的 base rates.

    P(Banana)      = 0.5 (500/1000)
     P(Orange)      = 0.3
     P(Other Fruit) = 0.2
    

    “证据”的可能性

    p(Long)   = 0.5
    P(Sweet)  = 0.65
    P(Yellow) = 0.8
    

    “可能性”的可能性

    P(Long|Banana) = 0.8
    P(Long|Orange) = 0  [Oranges are never long in all the fruit we have seen.]
     ....
    
    P(Yellow|Other Fruit)     =  50/200 = 0.25
    P(Not Yellow|Other Fruit) = 0.75
    

    鉴于水果,如何分类?

    假设我们获得了未知水果的属性,并要求对其进行分类 . 我们被告知水果是长,甜和黄 . 这是香蕉吗?它是橘子吗?还是其他水果?

    我们可以简单地逐个运行3个结果中的每一个的数字 . 然后我们选择最高概率根据我们之前的证据(我们的1000个水果训练集),将我们未知的水果'归类'属于具有最高概率的 class :

    P(Banana|Long, Sweet and Yellow) 
          P(Long|Banana) * P(Sweet|Banana) * P(Yellow|Banana) * P(banana)
        = _______________________________________________________________
                          P(Long) * P(Sweet) * P(Yellow)
    
        = 0.8 * 0.7 * 0.9 * 0.5 / P(evidence)
    
        = 0.252 / P(evidence)
    
    
    P(Orange|Long, Sweet and Yellow) = 0
    
    
    P(Other Fruit|Long, Sweet and Yellow)
          P(Long|Other fruit) * P(Sweet|Other fruit) * P(Yellow|Other fruit) * P(Other Fruit)
        = ____________________________________________________________________________________
                                              P(evidence)
    
        = (100/200 * 150/200 * 50/200 * 200/1000) / P(evidence)
    
        = 0.01875 / P(evidence)
    

    以压倒性的幅度( 0.252 >> 0.01875 ),我们将这种甜/长/黄果实分类为可能是香蕉 .

    为什么贝叶斯分类器如此受欢迎?

    看看它最终归结为什么 . 只是一些计数和乘法 . 我们可以预先计算所有这些术语,因此分类变得简单,快速和有效 .

    Let z = 1 / P(evidence). 现在我们快速计算以下三个数量 .

    P(Banana|evidence) = z * Prob(Banana) * Prob(Evidence1|Banana) * Prob(Evidence2|Banana) ...
    P(Orange|Evidence) = z * Prob(Orange) * Prob(Evidence1|Orange) * Prob(Evidence2|Orange) ...
    P(Other|Evidence)  = z * Prob(Other)  * Prob(Evidence1|Other)  * Prob(Evidence2|Other)  ...
    

    分配最高编号中的类别标签,您就完成了 .

    尽管如此,Naive Bayes在某些应用中表现出色 . 文本分类是它真正闪耀的一个领域 .

    希望有助于理解朴素贝叶斯算法背后的概念 .

  • 11

    Ram Narasimhan非常好地解释了这个概念,下面是通过Naive Bayes实际代码示例的另一种解释
    它使用了一个示例问题book on page 351
    这是我们将要使用的数据集

    enter image description here

    在上面的数据集中,如果我们给出假设= {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'} 那么他将购买或不购买计算机的概率是多少 .
    下面的代码正好回答了这个问题 .
    只需创建名为 new_dataset.csv 的文件并粘贴以下内容即可 .

    Age,Income,Student,Creadit_Rating,Buys_Computer
    <=30,high,no,fair,no
    <=30,high,no,excellent,no
    31-40,high,no,fair,yes
    >40,medium,no,fair,yes
    >40,low,yes,fair,yes
    >40,low,yes,excellent,no
    31-40,low,yes,excellent,yes
    <=30,medium,no,fair,no
    <=30,low,yes,fair,yes
    >40,medium,yes,fair,yes
    <=30,medium,yes,excellent,yes
    31-40,medium,no,excellent,yes
    31-40,high,yes,fair,yes
    >40,medium,no,excellent,no
    

    这是代码,评论解释了我们在这里所做的一切! [蟒蛇]

    import pandas as pd 
    import pprint 
    
    class Classifier():
        data = None
        class_attr = None
        priori = {}
        cp = {}
        hypothesis = None
    
    
        def __init__(self,filename=None, class_attr=None ):
            self.data = pd.read_csv(filename, sep=',', header =(0))
            self.class_attr = class_attr
    
        '''
            probability(class) =    How many  times it appears in cloumn
                                 __________________________________________
                                      count of all class attribute
        '''
        def calculate_priori(self):
            class_values = list(set(self.data[self.class_attr]))
            class_data =  list(self.data[self.class_attr])
            for i in class_values:
                self.priori[i]  = class_data.count(i)/float(len(class_data))
            print "Priori Values: ", self.priori
    
        '''
            Here we calculate the individual probabilites 
            P(outcome|evidence) =   P(Likelihood of Evidence) x Prior prob of outcome
                                   ___________________________________________
                                                        P(Evidence)
        '''
        def get_cp(self, attr, attr_type, class_value):
            data_attr = list(self.data[attr])
            class_data = list(self.data[self.class_attr])
            total =1
            for i in range(0, len(data_attr)):
                if class_data[i] == class_value and data_attr[i] == attr_type:
                    total+=1
            return total/float(class_data.count(class_value))
    
        '''
            Here we calculate Likelihood of Evidence and multiple all individual probabilities with priori
            (Outcome|Multiple Evidence) = P(Evidence1|Outcome) x P(Evidence2|outcome) x ... x P(EvidenceN|outcome) x P(Outcome)
            scaled by P(Multiple Evidence)
        '''
        def calculate_conditional_probabilities(self, hypothesis):
            for i in self.priori:
                self.cp[i] = {}
                for j in hypothesis:
                    self.cp[i].update({ hypothesis[j]: self.get_cp(j, hypothesis[j], i)})
            print "\nCalculated Conditional Probabilities: \n"
            pprint.pprint(self.cp)
    
        def classify(self):
            print "Result: "
            for i in self.cp:
                print i, " ==> ", reduce(lambda x, y: x*y, self.cp[i].values())*self.priori[i]
    
    if __name__ == "__main__":
        c = Classifier(filename="new_dataset.csv", class_attr="Buys_Computer" )
        c.calculate_priori()
        c.hypothesis = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}
    
        c.calculate_conditional_probabilities(c.hypothesis)
        c.classify()
    

    输出:

    Priori Values:  {'yes': 0.6428571428571429, 'no': 0.35714285714285715}
    
    Calculated Conditional Probabilities: 
    
    {
     'no': {
            '<=30': 0.8,
            'fair': 0.6, 
            'medium': 0.6, 
            'yes': 0.4
            },
    'yes': {
            '<=30': 0.3333333333333333,
            'fair': 0.7777777777777778,
            'medium': 0.5555555555555556,
            'yes': 0.7777777777777778
          }
    }
    
    Result: 
    yes  ==>  0.0720164609053
    no  ==>  0.0411428571429
    

    希望它有助于更好地理解问题

    和平

  • 647

    Naive Bayes: Naive Bayes受到监督机器学习,用于对数据集进行分类 . 它用于根据事先知识和独立性假设来预测事物 .

    他们称之为 naive 因为它的假设(假设数据集中的所有特征同样重要且独立)在大多数实际应用中都非常乐观并且很少成立 .

    它是分类算法,用于决定未知数据集 . 它基于Bayes Theorem,它根据事先知识描述事件的概率 .

    下图显示了朴素贝叶斯的工作原理

    enter image description here

    Formula to predict NB:

    enter image description here

    How to use Naive Bayes Algorithm ?

    让我们举一个N.B如何做的例子

    步骤1:首先我们找出表的可能性,其中显示了下图中是或否的概率 . 第2步:找出每个 class 的后验概率 .

    enter image description here

    Problem: Find out the possibility of whether the player plays in Rainy condition?
    
    P(Yes|Rainy) = P(Rainy|Yes) * P(Yes) / P(Rainy)
    
    P(Rainy|Yes) = 2/9 = 0.222
    P(Yes) = 9/14 = 0.64
    P(Rainy) = 5/14 = 0.36
    
    Now, P(Yes|Rainy) = 0.222*0.64/0.36 = 0.39 which is lower probability which means chances of the match played is low.
    

    有关更多参考,请参阅blog.

    请参阅GitHub存储库Naive-Bayes-Examples

  • 17

    我试着通过一个例子来解释贝叶斯规则 .

    假设您知道 10% 的人是吸烟者 . 您还知道_617171的吸烟者是男性,其中 80% 年龄超过20岁 .

    现在你看到的是一个多岁的人 . [617173_和 15 岁 . 你想知道他是吸烟者的机会:

    X = smoker | he is a man and under 20
    

    既然你知道有10%的人是吸烟者,你的初步猜测是10%(先验概率,不知道关于这个人的任何事情),但另一个人(他是一个男人,他是15岁)会影响这个猜测 .

    每个证据都可能增加或减少这种机会 . 例如,如果非吸烟者中这个百分比(男性)较低,例如40%,那么他是男性的事实会增加机会 . 换句话说,作为一个男人必须是吸烟者而不是非吸烟者的良好指标 .

    我们可以用另一种方式展示这种贡献 . 对于每个特征,您需要将该特征(f)的共性(概率)与给定条件下的共性进行比较 . ( P(f) vs. P(f | x) . 例如,如果我们知道在一个社会中成为一个男人的可能性是90%而且90%的吸烟者也是男性,那么知道某人就是男人并不能帮助我们 . 但是如果男人有助于40%的社会,但90%的吸烟者,然后知道有人是一个男人增加了成为吸烟者的机会 (10% * (90% / 40%) = 22.5% ) . 同样,如果作为一个男人的概率在社会中是95%,那么无论如何事实上,吸烟者中男性的比例很高(90%)!有人是男性的证据减少了他成为吸烟者的机会! (10% * (90% / 95%) = 9.5%) .

    所以我们有:

    P(X) = 
    P(smoker)* 
    (P(being a man | smoker)/P(being a man))*
    (P(under 20 | smoker)/ P(under 20))
    

    请注意,在此公式中,我们假设 being a manbeing under 20 是独立的特征,因此我们将它们相乘,这意味着知道某人不满20岁对猜测他是男人或女人没有影响 . 但这可能不是真的,例如,社会中的大多数青 Spring 期都可能是男性......

    To use this formula in a classifier

    分类器具有一些特征(男人和20岁以下)并且必须决定他是否是吸烟者 . 它使用上面的公式来找到它 . 为了提供所需的概率(90%,10%,80%......),它使用训练集 . 例如,它将训练集中的人员计算为吸烟者,并发现他们贡献了10%的样本 . 然后对吸烟者检查其中有多少是男性或女性......有多少是20岁以下或20岁以下....

相关问题