地理信息服务朴素贝叶斯分类及类别匹配研究
朴素贝叶斯分类器详细介绍
我们希望得到的是男性还是女性哪类的后验概率大。男性的后验概率通过下面 式子来求取
女性的后验概率通过下面式子来求取
证据因子(通常是常数)用来使各类的后验概率之和为 1.
证据因子是一个常数(在正态分布中通常是正数),所以可以忽略。接下来我 们来判定这样样本的性别。
,其中 , 是训练集样本的正态分布参数. 注意,这里 的值大于 1 也是允许的 – 这里是概率密度而不是概率,因为身高是一个连续 的变量.
可以通过将 表示为均值为
处理连续数值问题的另一种常用的技术是通 过离散化连续数值的方法。通常,当训练样本数量较少或者是精确的分布已知 时,通过概率分布的方法是一种更好的选择。在大量样本的情形下离散化的方 法表现更优,因为大量的样本可以学习到数据的分布。由于朴素贝叶斯是一种 典型的用到大量样本的方法(越大计算量的模型可以产生越高的分类精确度), 所以朴素贝叶斯方法都用到离散化方法,而不是概率分布估计的方法。
(变量的均值和方差)。由于变量独立假设,只需要估计各个变量的方法,而 不需要确定整个协方差矩阵。
朴素贝叶斯概率模型[编辑]
理论上,概率模型分类器是一个条件概率模型。
独立的类别变量 有若干类别,条件依赖于若干特征变量 , ,..., 。但 问题在于如果特征数量 较大或者每个特征能取大量值时,基于概率模型列出 概率表变得不现实。所以我们修改这个模型使之变得可行。 贝叶斯定理有以下 式子:
用朴素的语言可以表达为:
实际中,我们只关心分式中的分子部分,因为分母不依赖于 而且特征 的值 是给定的,于是分母可以认为是一个常数。这样分子就等价于联合分布模型。
重复使用链式法则,可将该式写成条件概率的形式,如下所示:
现在“朴素”的条件独立假设开始发挥作用:假设每个特征 是条件独立的。这就意味着
朴素贝叶斯应用场景
朴素贝叶斯应用场景朴素贝叶斯(Naive Bayes)算法是一种基于贝叶斯定理和特征条件独立假设的分类算法。
尽管该算法在假设独立性的前提下存在一定的局限性,但由于其简单高效的特点,朴素贝叶斯算法在实际应用中具有广泛的应用场景。
一、文本分类朴素贝叶斯算法在文本分类中得到了广泛的应用。
对于给定的文本,朴素贝叶斯算法可以根据文本中出现的关键词来判断该文本属于哪个类别。
例如,可以利用朴素贝叶斯算法对新闻进行分类,将新闻自动归类为体育、政治、经济等不同的类别,以方便用户浏览和检索。
二、垃圾邮件过滤朴素贝叶斯算法在垃圾邮件过滤中也有着广泛的应用。
通过对已知的垃圾邮件和非垃圾邮件进行学习,朴素贝叶斯算法可以根据邮件中的关键词来判断该邮件是否为垃圾邮件。
该算法可以高效地过滤掉大量的垃圾邮件,提高用户使用邮箱的效率。
三、情感分析朴素贝叶斯算法在情感分析中也有着重要的应用。
通过对已知的情感标注数据进行学习,朴素贝叶斯算法可以根据文本中的词汇和语义来判断该文本的情感倾向,如正面、负面或中性。
情感分析在社交媒体、产品评论等领域中具有重要的应用价值,帮助企业了解用户对其产品或服务的评价。
四、推荐系统朴素贝叶斯算法在推荐系统中也有一定的应用。
通过对用户历史行为进行学习,朴素贝叶斯算法可以根据用户的偏好和行为特征来预测用户对某个项目的兴趣程度,从而向用户推荐个性化的内容。
推荐系统在电商平台、视频网站等领域中起到了重要的作用,提高了用户的满意度和平台的盈利能力。
五、疾病诊断朴素贝叶斯算法在疾病诊断中也有一定的应用。
通过对已知病例的学习,朴素贝叶斯算法可以根据病人的症状和体征来判断其是否患有某种疾病。
该算法可以辅助医生进行疾病的早期筛查和诊断,提高疾病的检测率和诊断准确性。
六、金融风控朴素贝叶斯算法在金融风控领域也有一定的应用。
通过对历史数据进行学习,朴素贝叶斯算法可以根据客户的个人信息和行为特征来评估其信用风险,从而帮助金融机构进行风险控制和信贷决策。
朴素贝叶斯分类
朴素贝叶斯分类贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。
而朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。
一:贝叶斯原理朴素贝叶斯分类算法是一个典型的统计学习方法,主要的理论基础就是贝叶斯公式。
贝叶斯公式定义如下所示:先验概率:通过经验来判断事情发生的概率。
后验概率:后验概率就是发生结果之后,推测原因的概率。
条件概率:事件 A 在另外一个事件 B 已经发生条件下的发生概率,表示为 P(A|B),读作“在 B 发生的条件下 A 发生的概率”。
P(A|B)表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。
其基本求解公式为:P(AB)/P(B)。
但是在有些情况下,我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但是我们更想要知道P(B|A)。
例如(通信接收机检测判决)将A,B,C 三个字母之一输入信道,输出为原字母的概率为α,而输出为其它一字母的概率都是(1-α)/2。
今将字母串AAAA,BBBB,CCCC 之一输入信道,输入AAAA,BBBB,CCCC 的概率分别为p1, p2, p3 (p1 +p2+p3=1),已知输出为ABCA,问输入的是AAAA 的概率是多少?(设信道传输每个字母的工作是相互独立的。
)在这个例子中,我们知道了结果,但是我们想要知道输入的概率,直接计算是非常困难的,但是通过贝叶斯公式就显得十分简单了。
换句话说,就是我们知道原因,推导结果是比较容易的,但是当我们知道结果,要反过来推导原因是十分困难的。
而贝叶斯公式就为我们知道结果后推导原因提供了一个捷径。
二:朴素贝叶斯分类在说完了贝叶斯原理之后,现在就来说朴素贝叶斯分类。
朴素贝叶斯分类之所以朴素,就是因为我们做了一个简单的假设,即类中特定特征的存在与任何其他特征的存在无关,这意味着每个特征彼此独立。
因此对实际情况有所约束,如果属性之间存在关联,分类准确率会降低。
朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理
朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理贝叶斯分类算法是统计学的⼀种分类⽅法,它是⼀类利⽤概率统计知识进⾏分类的算法。
在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经⽹络分类算法相媲美,该算法能运⽤到⼤型数据库中,⽽且⽅法简单、分类准确率⾼、速度快。
由于贝叶斯定理假设⼀个属性值对给定类的影响独⽴于其它属性的值,⽽此假设在实际情况中经常是不成⽴的,因此其分类准确率可能会下降。
为此,就衍⽣出许多降低独⽴性假设的贝叶斯分类算法,如TAN(tree augmented Bayes network)算法。
朴素贝叶斯算法的核⼼思想:选择具有最⾼后验概率作为确定类别的指标。
--------------------朴素贝叶斯算法设每个数据样本⽤⼀个n维特征向量来描述n个属性的值,即:X={x1,x2,…,xn},假定有m个类,分别⽤C1, C2,…,Cm表⽰。
给定⼀个未知的数据样本X(即没有类标号),若朴素贝叶斯分类法将未知的样本X分配给类Ci,则⼀定是P(Ci|X)>P(Cj|X) 1≤j≤m,j≠i根据贝叶斯定理由于P(X)对于所有类为常数,最⼤化后验概率P(Ci|X)可转化为最⼤化先验概率P(X|Ci)P(Ci)。
如果训练数据集有许多属性和元组,计算P(X|Ci)的开销可能⾮常⼤,为此,通常假设各属性的取值互相独⽴,这样先验概率P(x1|Ci),P(x2|Ci),…,P(xn|Ci)可以从训练数据集求得。
根据此⽅法,对⼀个未知类别的样本X,可以先分别计算出X属于每⼀个类别Ci的概率P(X|Ci)P(Ci),然后选择其中概率最⼤的类别作为其类别。
朴素贝叶斯算法成⽴的前提是各属性之间互相独⽴。
当数据集满⾜这种独⽴性假设时,分类的准确度较⾼,否则可能较低。
另外,该算法没有分类规则输出。
在所有的机器学习分类算法中,朴素贝叶斯和其他绝⼤多数的分类算法都不同。
朴素贝叶斯分类模型 二分类
朴素贝叶斯分类模型二分类朴素贝叶斯是一种常用的分类算法,特别适用于文本分类问题。
它基于贝叶斯定理,假设各个特征都是独立的,且对分类结果贡献相等。
在实际应用中,朴素贝叶斯分类器以其高效性、稳定性和准确性,成为了文本分类、信用评级、邮件过滤等领域的重要算法。
朴素贝叶斯分类模型是一个典型的二分类模型,即将数据分为两个不同的类别。
具体地,朴素贝叶斯分类器将每个数据点都看作是由若干属性(特征)组成的向量,每个特征都是独立且相互独立的,用于描述不同类别的特征分布情况。
根据贝叶斯定理,对于给定的数据点,在所有可能的类别中,朴素贝叶斯分类器会选择概率最大的类别作为标签。
在朴素贝叶斯分类器中,需要先对样本数据进行训练,从而得到各个特征的条件概率分布。
具体来说,给定m个样本点和n个特征,我们需要计算出这n个特征在不同类别中出现的概率。
例如,在文本分类中,统计每个单词在不同类别的文本中出现的频数,从而得到单词在不同类别下的出现概率。
然后,我们就可以根据贝叶斯定理,用这些概率来计算每个样本点属于不同类别的概率,并选择概率最大的类别作为标签。
在实际应用中,朴素贝叶斯分类器具有快速、高效、适用于大规模数据等优点。
同时,朴素贝叶斯分类器还具有一定的缺点,主要表现在对特征独立性的要求较高,对数据分布偏斜的情况较为敏感。
因此,在实际应用中,我们需要根据不同的问题情况选择不同的分类算法,以获得最佳的分类效果。
总之,朴素贝叶斯分类模型是一种常用的二分类算法,它基于贝叶斯定理和特征独立性假设,通过计算特征在不同类别中出现的概率,从而对数据进行分类。
在实际应用中,朴素贝叶斯分类器具有一定的优点和缺点,需要结合具体问题情况进行选择和改进。
朴素贝叶斯模型的类别
朴素贝叶斯模型的类别全文共四篇示例,供读者参考第一篇示例:朴素贝叶斯模型的分类主要分为三类:高斯朴素贝叶斯、多项式朴素贝叶斯和伯努利朴素贝叶斯。
接下来分别介绍这三种不同类型的朴素贝叶斯模型及其应用场景。
一、高斯朴素贝叶斯高斯朴素贝叶斯模型假设特征的分布服从高斯分布,即特征的概率密度函数为高斯分布。
这种模型适用于连续型特征,例如数值型数据。
在实际应用中,高斯朴素贝叶斯模型通常用于处理连续型数据的分类问题,如人脸识别、手写数字识别等。
二、多项式朴素贝叶斯多项式朴素贝叶斯模型假设特征的分布服从多项式分布,即特征是离散型的且取值范围有限。
这种模型适用于文本分类等问题,其中特征通常是单词或短语的出现次数或权重。
在实际应用中,多项式朴素贝叶斯模型常用于文本分类、垃圾邮件过滤等问题。
朴素贝叶斯模型是一种简单且高效的分类算法,具有快速的训练速度和较好的分类性能。
不同类型的朴素贝叶斯模型适用于不同类型的特征分布和问题类型,可以根据具体情况选择合适的模型来解决分类问题。
在实际应用中,朴素贝叶斯模型被广泛应用于文本分类、垃圾邮件过滤、情感分析等领域,并取得了不错的效果。
第二篇示例:朴素贝叶斯是一种被广泛使用的机器学习分类算法,其原理简单但却非常有效。
它的原理基于贝叶斯定理,通过对已知数据集的特征进行概率推断来对未知数据进行分类。
朴素贝叶斯模型最初是由英国数学家托马斯·贝叶斯提出的,它的核心思想是基于特征之间的独立性假设。
朴素贝叶斯模型的类别主要可以分为三种:高斯朴素贝叶斯、多项式朴素贝叶斯和伯努利朴素贝叶斯。
1. 高斯朴素贝叶斯高斯朴素贝叶斯是一种适用于连续型数据的分类算法。
在高斯朴素贝叶斯中,假设特征的概率符合高斯分布,通过计算每个特征在每个类别下的概率密度函数来进行分类。
因为高斯分布在实际数据中很常见,因此高斯朴素贝叶斯在实际应用中有着广泛的应用。
伯努利朴素贝叶斯也适用于离散型数据的分类问题,但与多项式朴素贝叶斯不同的是,伯努利朴素贝叶斯适用于二值型数据,即特征只有两种取值。
朴素贝叶斯算法的应用
朴素贝叶斯算法的应用导言:朴素贝叶斯算法(Naive Bayes)是一种基于概率统计和特征条件独立性假设的分类算法。
它在实际应用中具有广泛的应用领域,如文本分类、垃圾邮件过滤、情感分析等。
本文将重点介绍朴素贝叶斯算法的应用,并从文本分类和垃圾邮件过滤两个方面进行详细阐述。
一、文本分类1.1 问题描述文本分类是指将一篇给定的文本分到预定义的类别中。
例如,我们可以将一封邮件分类为垃圾邮件或非垃圾邮件,将一篇新闻文章分类为体育、娱乐或政治等类别。
1.2 数据预处理在进行文本分类之前,我们需要对文本进行预处理。
预处理包括去除停用词、分词、词干化等步骤,以便提取出文本的特征。
1.3 特征提取朴素贝叶斯算法将文本表示为特征向量,常用的特征提取方法有词袋模型和TF-IDF模型。
词袋模型将文本表示为一个词汇表中词语的频率向量,而TF-IDF模型则考虑了词语的重要性。
1.4 模型训练与分类在得到特征向量后,我们可以使用朴素贝叶斯算法进行模型训练和分类。
训练阶段,我们统计每个类别中每个特征的频次,并计算类别的先验概率。
分类阶段,我们根据贝叶斯定理计算后验概率,并选择具有最大后验概率的类别作为分类结果。
二、垃圾邮件过滤2.1 问题描述垃圾邮件过滤是指将垃圾邮件从用户的收件箱中过滤出来,从而提高用户的邮件阅读效率和安全性。
2.2 特征提取与文本分类类似,垃圾邮件过滤也需要对邮件进行特征提取。
常用的特征包括邮件的主题、发件人、正文中的关键词等。
2.3 模型训练与分类在垃圾邮件过滤中,我们同样可以使用朴素贝叶斯算法进行模型训练和分类。
训练阶段,我们统计垃圾邮件和非垃圾邮件中每个特征的频次,并计算两者的先验概率。
分类阶段,我们根据贝叶斯定理计算后验概率,并将概率高于阈值的邮件分类为垃圾邮件。
三、朴素贝叶斯算法的优缺点3.1 优点(1)朴素贝叶斯算法具有较高的分类准确性和良好的可解释性;(2)算法简单,计算速度快,适用于大规模数据集;(3)对缺失数据不敏感,能够处理高维特征。
大数据下的朴素贝叶斯算法研究论文素材
大数据下的朴素贝叶斯算法研究论文素材一、介绍随着大数据时代的到来,数据量庞大且复杂多样的数据对我们的处理能力提出了更高的要求。
在数据挖掘和机器学习领域,朴素贝叶斯算法作为一种经典的分类算法,在大数据分析中扮演着重要的角色。
本文将探讨大数据下的朴素贝叶斯算法的研究成果,为相关研究提供参考素材。
二、朴素贝叶斯算法概述朴素贝叶斯算法是一种基于贝叶斯理论和特征条件独立假设的分类方法。
该算法通过统计训练数据中特征的频次和类别的概率分布,利用贝叶斯公式计算特征与类别之间的条件概率,进而实现对新样本的分类。
三、朴素贝叶斯算法在大数据中的应用1. 文本分类朴素贝叶斯算法在文本分类任务中具有良好的性能。
通过对已标注的大规模文本数据进行训练,可以得到词频以及词在不同类别下的条件概率分布。
在实际应用中,可以根据新样本中的词频统计和词条件概率计算,快速判断其所属类别,从而实现高效的文本分类。
2. 垃圾邮件过滤大数据环境下,垃圾邮件的数量巨大,给用户带来了很大的困扰。
朴素贝叶斯算法可以通过建立基于训练数据的垃圾邮件模型,利用特定的特征来判断新邮件是否为垃圾邮件。
该算法凭借其高效性和准确性,在垃圾邮件过滤领域得到了广泛应用。
3. 用户兴趣模型构建在电子商务等领域,构建用户兴趣模型是一项重要任务。
朴素贝叶斯算法可以通过分析用户历史行为和商品特征,计算商品在不同用户兴趣下的条件概率,从而为用户推荐符合其兴趣的商品。
在大数据场景中,朴素贝叶斯算法可以快速适应用户的兴趣变化,提供准确有效的推荐结果。
四、大数据下朴素贝叶斯算法的优化尽管朴素贝叶斯算法在大数据分析中具有广泛的应用,但也存在一些问题。
例如,由于特征条件独立假设的限制,算法对特征之间的相关性较为敏感。
针对这一问题,研究者提出了多种改进算法,如半朴素贝叶斯算法、混合模型朴素贝叶斯算法等,以提高算法的分类性能。
此外,大数据环境下,朴素贝叶斯算法需要处理数量庞大的数据,对存储和计算资源的要求较高。
信息检索导论的文本分类及朴素贝叶斯方法总结知识
在信息检索导论中,文本分类是一个重要的主题,而朴素贝叶斯方法则是其中一种常用的分类方法。
在本文中,我们将深入探讨文本分类及朴素贝叶斯方法,并总结这方面的知识。
1. 信息检索导论信息检索是指从大规模数据中找到相关的信息。
在这个过程中,文本分类起着至关重要的作用,它可以帮助我们将大规模文本数据按照预先定义的类别进行组织和分类。
而朴素贝叶斯方法则是文本分类中常用的一种方法。
2. 文本分类文本分类是指将文本文件自动分类到一个或多个已知类别的过程。
这个过程通常包括文本预处理、特征提取和分类器训练等步骤。
在文本分类中,我们需要考虑到文本的深度和广度,即从文本的表面信息到更深层次的语义理解。
这一点需要在文本分类的训练和特征提取过程中得到充分考虑。
3. 朴素贝叶斯方法朴素贝叶斯方法是一种基于贝叶斯定理和特征条件独立假设的分类方法。
在文本分类中,朴素贝叶斯方法常常被用来对文本进行分类,尤其是在自然语言处理领域。
该方法在处理大规模文本数据时表现出色,而且其简单、高效的特点也使其受到广泛关注。
4. 总结及个人观点信息检索导论中的文本分类及朴素贝叶斯方法对我们理解大规模文本数据、提高信息检索效率等方面都具有重要意义。
在我看来,深入理解文本分类的深度和广度对于我们更好地利用文本数据至关重要。
朴素贝叶斯方法的简单和高效也让我对其在文本分类中的应用充满信心。
以上就是对信息检索导论中的文本分类及朴素贝叶斯方法的总结,希望对你有所帮助。
文本分类及朴素贝叶斯方法在信息检索领域中扮演着重要的角色。
信息检索是一个涉及大规模数据的过程,而文本分类则是帮助我们将这些数据进行有序分类的重要技术。
在这一过程中,朴素贝叶斯方法作为一种常用的文本分类方法,具有简单高效的特点,因此受到了广泛的关注和应用。
下面将从文本分类的重要性、朴素贝叶斯方法的原理与应用以及未来发展趋势等方面深入探讨信息检索导论中的这两个关键领域。
文本分类在信息检索中的重要性不言而喻。
贝叶斯分类器(3)朴素贝叶斯分类器
贝叶斯分类器(3)朴素贝叶斯分类器根据,我们对贝叶斯分类器所要解决的问题、问题的求解⽅法做了概述,将贝叶斯分类问题转化成了求解P(x|c)的问题,在上⼀篇中,我们分析了第⼀个求解⽅法:极⼤似然估计。
在本篇中,我们来介绍⼀个更加简单的P(x|c)求解⽅法,并在此基础上讲讲常⽤的⼀个贝叶斯分类器的实现:朴素贝叶斯分类器(Naive Bayes classifier)。
1 朴素贝叶斯分类原理1.1 分类问题回顾我们的⽬标是通过对样本的学习来得到⼀个分类器,以此来对未知数据进⾏分类,即求后验概率P(c|x)。
在中,我们描述了贝叶斯分类器是以⽣成式模型的思路来处理这个问题的,如下⾯的公式所⽰,贝叶斯分类器通过求得联合概率P(x,c)来计算P(c|x),并将联合概率P(x,c)转化成了计算类先验概率P(c)、类条件概率P(x|c)、证据因⼦P(x)。
h∗(x)=\argmax c∈Y P(c|x)=\argmax c∈Y P(x,c)P(x)=\argmaxc∈YP(c)∗P(x|c)P(x)其中的难点是类条件概率P(x|c)的计算,因为样本x本⾝就是其所有属性的联合概率,各种属性随意组合,变幻莫测,要计算其中某⼀种组合出现的概率真的是太难了,⽽朴素贝叶斯的出现就是为了解决这个问题的。
要想计算联合概率P(a,b),我们肯定是希望事件a与事件b是相互独⽴的,可以简单粗暴的P(a,b)=P(a)P(b),多想对着流星许下⼼愿:让世界上复杂的联合概率都变成简单的连乘!1.2 朴素贝叶斯朴素贝叶斯实现了我们的梦想!朴素贝叶斯中的朴素就是对多属性的联合分布做了⼀个⼤胆的假设,即x的n个维度之间相互独⽴:P([x1,x2,...,x n]|c)=P(x1|c)P(x2|c)...P(x1|c)朴素贝叶斯通过这⼀假设⼤⼤简化了P(x|c)的计算,当然,使⽤这个假设是有代价的,⼀般情况下,⼤量样本的特征之间独⽴这个条件是弱成⽴的,毕竟哲学上说联系是普遍的,所以我们使⽤朴素贝叶斯会降低⼀些准确性;如果实际问题中的事件的各个属性⾮常不独⽴的话,甚⾄是⽆法使⽤朴素贝叶斯的。
朴素贝叶斯分类原理
朴素贝叶斯分类原理
朴素贝叶斯分类器是一种基于概率论与统计学的监督学习(SupervisedLearning)方法,它可以为实体分类,也可以用来预测实体类别。
朴素贝叶斯分类器的核心思想是基于一系列特征数据,使用贝叶斯推理(Bayesian Inference)进行实体类别划分,从而实现自动化分类。
贝叶斯推理是指根据已有的条件分布概率(称为联合概率),根据贝叶斯定理推断(predictive inference),在特定事件发生时,计算结果事件的概率分布。
朴素贝叶斯分类器通过计算联合概率来决定最有可能发生的类别,朴素贝叶斯分类器的主要工作步骤主要有以下几步:
1、计算各个类别的概率:首先需要对训练数据集中各个类别的样本数,计算每个类别的出现概率;
2、计算各个类别下各个特征的概率:有了类别的出现概率后,需要统计各个类别下,每个特征项(比如性别、年龄等)出现的概率;
3、利用贝叶斯推理计算测试实体所属类别:有了类别的概率和各特征值出现的概率后,根据贝叶斯定理,计算测试实体属于各个类别的概率,选取概率最大的类别作为实体的分类结果。
朴素贝叶斯分类器的一个重要特点是假设特征值之间是独立的,也就是所谓的朴素性(Naive),这样可以简化概率的计算,显著地降低了计算量。
而且,朴素贝叶斯分类器也在一定程度上可以很好的解决分类训练数据集的维度灾难(dimensionality disaster)问题。
- 1 -。
朴素贝叶斯文本分类原理
朴素贝叶斯文本分类原理朴素贝叶斯(Naive Bayes)文本分类算法是一种基于贝叶斯定理和特征之间相互独立假设的分类方法。
在自然语言处理领域,它被广泛应用于文本分类、垃圾邮件过滤和情感分析等任务。
一、贝叶斯定理贝叶斯定理是数学和统计学中的一个基本定理,描述的是在已知某个条件下,另一个条件的概率。
对于事件A和B,贝叶斯定理可以表示为:P(B|A) = P(A|B) * P(B) / P(A)其中,P(B|A)表示在事件A已经发生的情况下,事件B发生的概率;P(A|B)表示在事件B已经发生的情况下,事件A发生的概率;P(B)和P(A)分别表示事件B和事件A发生的概率。
二、朴素贝叶斯算法朴素贝叶斯算法是一种基于贝叶斯定理的监督学习算法。
在文本分类任务中,朴素贝叶斯算法假设文档中的每个词都是相互独立的,并从中提取特征,这就是为什么它被称为“朴素”的原因。
具体而言,它包括以下几个步骤:1. 数据预处理首先,需要对文本数据进行处理,包括去除停用词、分词和计算词汇表等。
2. 计算每个单词在类别中出现的概率对于训练数据集中的每个类别,需要计算每个单词在该类别中出现的概率。
具体而言,需要计算每个单词在该类别中出现的频率,并将其除以该类别中所有单词的总数。
3. 计算每个类别的概率在计算每个单词在类别中出现的概率之后,需要计算每个类别的概率。
具体而言,需要计算每个类别中所包含的文档数,并除以总文档数。
4. 计算测试文档的概率现在已经可以对测试文档进行分类了。
对于测试文档中的每个词,需要计算它在每个类别中出现的概率,并将它们相乘得到该文档属于每个类别的概率。
最终,将概率最大的类别作为该文档的分类结果。
三、总结朴素贝叶斯算法是一种简单而有效的文本分类算法,它的理念是假设所有的单词在文档中相互独立,这样可以降低计算复杂度,并且具有较高的准确率。
但是,在实际应用中,朴素贝叶斯算法面临的一个挑战是数据稀疏性,即某些单词可能在训练数据集中没有出现,导致它们的概率为0,这会影响分类的准确率。
朴素贝叶斯分类算法
朴素贝叶斯分类算法介绍要介绍朴素贝叶斯算法(Naive Bayes),那就得先介绍贝叶斯分类算法,贝叶斯分类算法是统计分类算法的⼀种,他是⼀类利⽤概率统计知识进⾏的⼀种分类算法。
⽽朴素贝叶斯算法就是⾥⾯贝叶斯算法中最简单的⼀个算法。
为什么叫做朴素贝叶斯,因为他⾥⾯的各个类条件是独⽴的,所以⼀会在后⾯的计算中会起到很多⽅便的作⽤。
朴素贝叶斯算法原理⾸先在这⾥⽤到了⼀个概率公式:P(B|A)的意思是在A事件的情况下,发⽣B事件的概率,可以理解为概率论中的条件概率,⽽贝叶斯公式的巨⼤作⽤就是对因果关系进⾏了交换,通过上⾯的公式就可以计算P(A|B)的概率,只要通过上述的转换。
上⾯的资源地址上已经对朴素贝叶斯算法的原理描述的⾮常清楚了,我在他的基础上做了点注释⽅便于后⾯代码的理解:朴素贝叶斯分类的正式定义如下:1、设为⼀个待分类项,⽽每个a为x的⼀个特征属性。
(在后⾯的例⼦中x={"Youth", "Medium", "Yes", "Fair"},⾥⾯的4个因⼦为他的特征向量)2、有类别集合。
(在后⾯的类别中只有buy_computer的分类yes, no,C={yes, no})3、计算。
(在后⾯的计算的任务就是计算在X事件的条件下,yes和no事件的发⽣概率,P(Yes|X, P(No|X)))4、如果,则。
(计算出上⾯的结果值,拥有最⼤概率的值的yi就是他的分类,这个很好理解,在X条件下,那个分类类型概率⾼就属于哪个分类,在这⾥⽐的就是P(Yes|X, P(No|X))那么现在的关键就是如何计算第3步中的各个条件概率。
我们可以这么做:1、找到⼀个已知分类的待分类项集合,这个集合叫做训练样本集。
2、统计得到在各类别下各个特征属性的条件概率估计。
即。
3、如果各个特征属性是条件独⽴的,则根据贝叶斯定理有如下推导:因为分母对于所有类别为常数,因为我们只要将分⼦最⼤化皆可。
朴素贝叶斯应用
朴素贝叶斯应用
朴素贝叶斯分类算法是一种基于贝叶斯定理和特征条件独立性假设的分类算法。
其主要应用领域包括:
1. 文本分类:朴素贝叶斯算法在文本分类中表现出色,可以用于垃圾邮件过滤、情感分析、主题识别等任务。
2. 垃圾邮件过滤:利用朴素贝叶斯算法可以根据邮件的文本特征(如关键词、词频)判断是否为垃圾邮件。
3. 情感分析:通过训练一个基于朴素贝叶斯算法的分类器,可以将文本分为正向情感和负向情感,用于分析用户评论、社交媒体数据等。
4. 主题识别:将文本数据分为不同的主题,如新闻分类、网页分类等,可以应用于自动标记和信息组织。
5. 推荐系统:朴素贝叶斯算法可以用于用户兴趣建模,根据用户的历史行为和偏好进行推荐。
6. 缺失数据填充:朴素贝叶斯算法可以根据已有特征推测缺失数据的取值,应用于填充缺失数据。
需要注意的是,朴素贝叶斯算法对特征条件独立性的假设可能不符合实际情况,因此在实际应用中,需要结合领域知识和数据预处理技术来处理相关的问题。
朴素贝叶斯分类
朴素贝叶斯分类————————————————————————————————作者:————————————————————————————————日期:朴素贝叶斯分类1.1、摘要贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。
本文作为分类算法的第一篇,将首先介绍分类问题,对分类问题进行一个正式的定义。
然后,介绍贝叶斯分类算法的基础——贝叶斯定理。
最后,通过实例讨论贝叶斯分类中最简单的一种:朴素贝叶斯分类。
1.2、分类问题综述对于分类问题,其实谁都不会陌生,说我们每个人每天都在执行分类操作一点都不夸张,只是我们没有意识到罢了。
例如,当你看到一个陌生人,你的脑子下意识判断TA是男是女;你可能经常会走在路上对身旁的朋友说“这个人一看就很有钱、那边有个非主流”之类的话,其实这就是一种分类操作。
从数学角度来说,分类问题可做如下定义:已知集合:和,确定映射规则,使得任意有且仅有一个使得成立。
(不考虑模糊数学里的模糊集情况)其中C叫做类别集合,其中每一个元素是一个类别,而I叫做项集合,其中每一个元素是一个待分类项,f叫做分类器。
分类算法的任务就是构造分类器f。
这里要着重强调,分类问题往往采用经验性方法构造映射规则,即一般情况下的分类问题缺少足够的信息来构造100%正确的映射规则,而是通过对经验数据的学习从而实现一定概率意义上正确的分类,因此所训练出的分类器并不是一定能将每个待分类项准确映射到其分类,分类器的质量与分类器构造方法、待分类数据的特性以及训练样本数量等诸多因素有关。
例如,医生对病人进行诊断就是一个典型的分类过程,任何一个医生都无法直接看到病人的病情,只能观察病人表现出的症状和各种化验检测数据来推断病情,这时医生就好比一个分类器,而这个医生诊断的准确率,与他当初受到的教育方式(构造方法)、病人的症状是否突出(待分类数据的特性)以及医生的经验多少(训练样本数量)都有密切关系。
朴素贝叶斯算法进行分类的流程
朴素贝叶斯算法进行分类的流程
一、数据准备阶段
1.数据收集
(1)收集包含特征和类别标签的训练数据集
2.数据预处理
(1)数据清洗,处理缺失值和异常值
(2)特征选择,选择对分类有意义的特征
二、模型训练阶段
1.拆分数据集
(1)将数据集分为训练集和测试集
2.计算概率
(1)计算各个类别的先验概率
(2)计算每个特征在各个类别下的条件概率
3.训练模型
(1)根据计算得到的概率,训练朴素贝叶斯分类器
三、模型预测阶段
1.输入待分类样本
(1)输入包含特征的待分类样本
2.计算后验概率
(1)根据训练得到的模型,计算待分类样本属于各个类别的后验概率
3.预测分类结果
(1)根据后验概率,预测待分类样本的类别
四、模型评估阶段
1.评估模型性能
(1)使用测试集评估模型在分类任务上的性能
2.调整模型
(1)根据评估结果调整模型参数或特征选择
五、应用阶段
1.预测新样本
(1)使用经过训练的朴素贝叶斯模型进行新样本的分类预测。
朴素贝叶斯算法用来解决什么问题的方法
朴素贝叶斯算法是一种基于概率和统计的分类算法,它是机器学习领域中常用的分类算法之一。
朴素贝叶斯算法基于贝叶斯定理,通过对特征之间的条件独立性假设,利用已知的类别和特征之间的概率关系来进行分类。
在实际应用中,朴素贝叶斯算法能够解决许多问题,本文将从以下几个方面介绍朴素贝叶斯算法的应用和解决的问题。
一、文本分类朴素贝叶斯算法在文本分类领域有着广泛的应用。
在文本分类中,我们需要将文本数据划分到不同的类别中,比如将文章归为新闻、体育、娱乐等分类。
朴素贝叶斯算法能够通过对文本特征进行概率估计来实现文本分类,比如根据文本中出现的关键词来判断文章所属的类别。
这种方法在垃圾邮件过滤、情感分析等领域有着广泛的应用。
二、实时推荐系统在实时推荐系统中,朴素贝叶斯算法也能够发挥重要作用。
通过对用户行为数据的统计和分析,我们可以利用朴素贝叶斯算法来预测用户的兴趣和需求,从而实现个性化推荐。
比如根据用户的浏览历史和点击行为来推荐相关的商品或文章,这就需要我们利用朴素贝叶斯算法对用户的兴趣进行建模和预测。
三、垃圾邮件过滤垃圾邮件过滤是朴素贝叶斯算法的另一个常见应用场景。
在垃圾邮件过滤中,我们需要对收到的邮件进行分类,将正常邮件和垃圾邮件区分开来。
朴素贝叶斯算法通过对不同特征的概率进行估计,比如邮件中的关键词出现概率,来判断邮件的类别。
这种方法在实际应用中已经被广泛采用,有效地提高了邮件处理的效率。
四、医疗诊断朴素贝叶斯算法还可以用于医疗诊断领域。
通过对患者的病历和症状数据进行分析,我们可以利用朴素贝叶斯算法来判断患者所患疾病的可能性。
比如根据症状的出现概率来判断患者是否患有某种疾病,或者预测患者的疾病类型。
这种方法可以帮助医生进行诊断和治疗决策,提高医疗服务的水平和效率。
五、其他领域除了上述几个常见领域外,朴素贝叶斯算法还可以在许多其他领域发挥作用。
比如在网络安全领域,可以利用朴素贝叶斯算法对网络流量进行分析和异常检测;在金融领域,可以利用朴素贝叶斯算法对风险进行评估和预测。
简单朴素贝叶斯分类器的思想与算法分析
简单朴素贝叶斯分类器的思想与算法分析在数据仓库和数据挖掘应用中,分类是一种非常重要的方法.分类的概念是在已有数据的基础上学会一个分类函数或构造出一个分类模型,即我们通常所说的分类器(Classifier).该函数或模型能够把数据集合中的数据记录映射到给定类别中的某一个值,从而可以应用于数据预测.目前,分类的主要算法有贝叶斯算法、决策树算法(如ID3、C4.5等)、规则推导、人工神经网络、最近邻算法、支持向量机等等.这些算法在许多现实数据集合上具有较好的预测精度.其中朴素贝叶斯算法具有良好的可解释性等,在实践中的应用最为广泛. 朴素贝叶斯算法是基于统计理论的方法,它能够预测所属类别的概率.简单朴素贝叶斯分类器假设一个指定类别中各属性的取值是相互独立的.这一假设称为给定类别条件下的独立性(Class Conditional Independence)假设,它可以有效减少在构造分类器时所需要的计算量.简单朴素贝叶斯算法的分类模型是基于Bayes 定理的,下面就简单介绍一下Bayes 定理.设X 为一个类别未知的数据样本,H 为某个假设,C 表示类别集合,若数据样本X 属于一个特定的类别c ,那么分类问题就是决定P (H /X ),即在获得数据样本X 时,H 假设成立的概率.由于P (H ) , P (X ), P (X /H )的概率值可以从(供学习使用的)数据集合中得到,Bayes 定理描述了如何根据P (H ) , P (X ), P (X /H )计算获得的P (H /X ),有关的具体公式定义描述如下:(/)()(/)()P X H P H P H X P X = (1)简单朴素贝叶斯分类器进行分类操作的步骤说明如下:1. 每个数据样本均是由一个n 维特征向量X ={x 1,x 2, ……, x n }来描述其n 个属性(A 1, A 2, ……, A n )的具体取值.2. 假设共有m 个不同类别,{C 1, C 2, ……, C n }.给定一个未知类别的数据样本X ,分类器在已知样本X 的情况下,预测X 属于事后概率最大的那个类别.也就是说,朴素贝叶斯分类器将未知类别的样本X 归属到类别C i ,当且仅当:P (C i /X )> P (C j /X ) 其中1≤j ≤m ,j ≠i .也就是P (C i /X )最大.其中的类别C i 就称为最大事后概率的假设,根据Bayes 定理可知,(/)()(/)()i i i P X C P C P C X P X = (2)3. 由于P (X )对于所有的类别均是相同的,所以,要使公式(2)取得最大值,只需要P (X /C i )P (C i )取最大即可.类别的事前概率P (C i )可以通过公式P (C i )=s i /s 进行估算,其中s i 为训练样本集合类别C i 的个数,s 为整个训练样本集合的大小.4. 根据所给定包含多个属性的数据集,直接计算P (X /C i )的运算量是非常大的.为实现对P (X /C i )的有效估算,朴素贝叶斯分类器通常都是假设各类别是相互独立的即各属性的取值是相互独立的.即:1(/)(/)ni k i k P X C P x C -=∏(3)可以根据训练数据样本估算P (X 1/C i ),P (X 2/C i ),……,P (X n /C i )的值,具体处理方法说明如下:若A k 是名称型属性,就有P (X k /C i )=s ik /s i ,这里s ik 为训练样本中类别为C i 且属性A k 的取值为v k 的样本数,s i 为训练样本中类别为C i 的样本数.若A k 是数值型属性,那么假设属性具有高斯分布,概率P (X k /C i )就用概率密度f (X k /C i )代替,即22()2()(,,)C i C i i i x k i k C C f x g x μδμδ--== (4)其中, g (x k ,μc i ,δc i )为属性A k 的高斯规范密度函数,μc i ,δc i 为训练样本中类别为C i 的属性为A k 的均值和方差.数值型属性的均值计算公式为: x mean =(x 1+x 2+……+x n )/n ,其中x 1, x 2, ……, x n 表示数值型属性的值,n 表示实例个数.数值型属性的方差计算公式为:22212()()()1mean mean n mean x x x x x x Devs n -+-++-=- (5)其中x 1, x 2, ……, x n 表示数值型属性的值,x mean 表示方差,n 表示实例个数.5. 为预测一个样本X 的类别,可对每个类别C i 估算相应的P (X /C i )P (C i ),样本X 归属到类别C i ,当且仅当:P (C i /X )> P (C j /X ) 其中1≤j ≤m , j ≠i .也可通过求百分比percent(C i )= P (C i /X )/∑P (C k /X ),百分比最大值对应的类标就位样本X 的类别.下面就以有关天气问题的数据为例仔细介绍一下朴素贝叶斯分类器进行分类的过程.有关天气的数据如下表所示:outlook (类型) temperature (温度) humidity (湿度) windy(风)play (玩) sunny 85 85 FalseNo sunny 80 90 TrueNo overcast 83 86 FalseYes rainy 70 96 FalseYes rainy 68 80 FalseYes rainy 65 70 TrueNo overcast 64 65 TrueYes sunny 72 95 FalseNo sunny 69 70 Falseyes rainy 75 80 Falseyes sunny 75 70 Trueyes overcast 72 90 Trueyes overcast 81 75 Falseyes rainy 71 91 True no概率的表示方法:P (yes/sunny,80,76,false)=0.25就表示在outlook =sunny, temperature =80, humidity =76,windy =false 的条件下paly =yes 条件概率为0.25.1.求得名称型属性的后验概率以P (sunny/yes)为例进行详细说明.首先,计算类标为yes 的实例个数为9个,然后计算类标为yes 并且outlook 属性为sunny 的实例个数为2,所以P (sunny/yes)=2/9,这是很自然的事情,为了避免有时该概率值为0,需要对该概率值进行标准化:即分子加上属性outlook 值的个数,也就是3(因为outlook 的值有sunny, rainy, overcast 三个),分母加上1,标准化后的条件概率P (sunny/yes)=(2+1)/(9+3)=3/12.重复上述步骤,可得属性outlook 的后验概率为:P (sunny/yes)=3/12P (overcast/yes)=5/12 P (rainy/yes)=4/12 P (sunny/no)=4/8 P (overcast/no)=1/8 P (rainy/no)=3/8属性windy 的后验概率为:P (false/yes)=7/11P (false /yes)=4/11 P (false/no)=3/7 P (false /no)=4/72.求得数值型属性的均值数值型属性的均值计算公式为:x mean =(x 1+x 2+……+x n )/n ,其中x 1, x 2, ……, x n 表示数值型属性的值,n 表示实例个数.下面就以求在play =yes 的条件下数值型属性temperature 的均值为例详细说明求解过程:mean- temperature (yes)=(83+70+68+64+69+75+75+72+81)/9=73同理:mean- temperature (no)=(85+80+65+72+71)/5=74.6mean- humidity (yes)=(86+96+80+65+70+80+70+90+75)/9=79.1mean- humidity (no)=(85+90+70+95+91/5=86.23.求得数值型属性的方差数值型属性的方差计算公式为:22212()()()1mean mean n mean x x x x x x Devs n -+-++-=- (6)其中x 1, x 2, ……, x n 表示数值型属性的值,x mean 表示方差,n 表示实例个数.下面就以求在play =yes 的条件下数值型属性temperature 的方差为例详细说明求解过程.Devs-temperature (yes)=((83-73)2+(70-73)2+(68-73)2+(64-73)2+(69-73)2+(75-73)2+(75-73)2+(72-73)2+(81-73)2)/9 =6.2同理,可求得Devs-temperature (no)=7.9Devs-humidity (no)=10.2Devs-humidity (no)=9.74.求得类属性的先验概率以P(yes)为例进行详细说明.首先计算数据集的实例总数为14,然后计算类标为yes的实例总数为9,所以P(yes)=9/14,为避免有时该概率值为0,需要对该概率值进行标准化:即分子加上类属性play值的个数,也就是2(因为play的值有yes, no二个),分母加上1,标准化后的条件概率P(yes)=(9+1)/(14+2)=10/16,同理可求得P(no)=(5+1)/(14+2)=6/16.5.根据上述参数计算待分类实例属于每个类的概率,选择概率值最大的类作为待分类实例的类标.下面以实例(sunny,66,90,true)为例说明一下其分类过程:首先求P(yes/sunny,66,90,true),根据bayes定理和条件独立性假设,P(yes/sunny,66,90,true)=(P(yes)P(sunny/yes)P(true/yes)f(66/yes)f(90/yes))/P(sunny,66,90,true) 由于P(sunny,66,90,true)为常数,最后求类的百分比的时候可以抵消,可以不加考虑,而P(66/yes)可用概率密度f(66/yes)来代替,这对最后的求类的百分比也没有影响,所以我们只需求P(yes)P(sunny/yes)P(true/yes) f(66/yes) f(90/yes).而P(yes),P(sunny/yes),P(true/yes)已经求得,根据正态分布假设,f(66/yes), f(90/yes) 也很容易求得.22(mean-temperature(yes))2(Devs-temperature(yes))(66/)xf yes--=(6)22(6673)26.20.034--⨯==同理可求得f(90/yes)=0.0221,所以:P(yes)P(sunny/yes)P(true/yes)f(66/yes)f(90/yes)=10/16×3/12×0.034×0.0221×4/11=0.000043.重复上述步骤可得:f(66/no)=0.0291,f(90/no)=0.0380,因而有:P(no)P(sunny/no)P(true/no) f(66/no) f(90/no)=6/16×4/8×4/7×0.0291×0.0380=0.00018 所以,待分类实例属于类yes的百分比为probability-of-yes=0.000043/(0.000043+0.000118)=26.7%probability-of-no=0.000118/(0.000043+0.000118)=73.3%因此,待分类实例的类属性值为no.基于本文所述ID3的基本思想,ID3的具体算法是:下面我们介绍一下其算法实现的有关细节.我们所介绍的ID3程序是在weka系统下利用java语言编写的分类器程序.该程序主要包括以下几个方法:globalInfo()返回该分类器的描述字符串.BuildClassifier(Instances instances)BuildClassifier()方法从一个训练数据集合instances构造一个分类器.求出所有名称型属性的后验概率,类属性的先验概率,数值属性的均值和方差,为后来的分类工作做准备.distributionForInstance (Instance instance)该方法计算待分类实例instance属于各个类标的百分比,并且将各个百分比数值存于一个数组中,最后返回该数组.toString()把分类器的参数(均值,方差,各先验概率,各后验概率)以字符串的形式返回.normalDens(double x, double mean, double stdDev)该方法用于根据正态分布(均值为mean,方差为stdDev)计算数值型属性当属性值为x时的概率密度.Main()当类从命令行被执行时,就会调用main()方法.它只是用所给的命令行选项告诉Weka 的Evaluation类来评估朴素贝叶斯,并且打印所得到的数组.完成这个功能的一行表达式包括在try-catch声明中.try-catch声明用于发现Weka例程或其它Java方法中抛出的各种异常.附一:朴素贝叶斯源程序及其注解:/** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA./* 本程序为免费软件;你可以通过免费软件中心的发布的GNU公共许可的任何版本下下重写或者修改它.* 开发本程序的目的是是希望它是有用的,但没有任何授权,甚至没有潜在的商用或其它特殊目的的授权.* 想要了解更多细节,请参阅GNU公共许可.*在拿到程序的同时,你应该收到GNU公共许可;假如没有的话,请致函免费软件中心Inc., 675 MassAve, Cambridge, MA 02139, USA./** NaiveBayesSimple.java* Copyright (C) 1999 Eibe Frank**/package weka.classifiers.bayes;import weka.classifiers.Classifier;import weka.classifiers.Evaluation;import java.io.*;import java.util.*;import weka.core.*;/*** Class for building and using a simple Naive Bayes classifier.* Numeric attributes are modelled by a normal distribution. For more* information, see<p>** Richard Duda and Peter Hart (1973).<i>Pattern* Classification and Scene Analysis</i>. Wiley, New York.** @author Eibe Frank (eibe@)* @version $Revision: 1.15 $*//**创建和使用Naive Bayes分类器的类*数值型属性均符合正态分布*/public class NaiveBayesSimple e X tends Classifier { //分类器的构造函数public NaiveBayesSimple() {try {jbInit(); //分类器初始化} catch (E X ception e X ) {e X .printStackTrace(); //创建分类器对象时若出现异常则输出堆栈信息 }}/** All the counts for nominal attributes. 所有名称型属性的计数数组*/protected double [][][] m_Counts; /*属于每个类每个名称型属性的每个取值的个数数组,其中第一维表示类名,第二维表示属性名,第三维表示属性值,比如m_Counts[yes][outlook][sunny]*//** The means for numeric attributes. 数值型属性的均值数组*/protected double [][] m_Means; /*数值型属性的均值数组,其中第一维表示类名, 第二维表示属性名,比如m_Means[no][temperature], 公式为:12n mean x x x x n +++=(7)*/ /** The standard deviations for numeric attributes.数值型属性的标准差数组 */protected double [][] m_Devs; /*数值型属性的标准差数组,其中第一维表示类名, 第二维表示属性名,比如m_Devs[no][temperature],公式为:22212()()()1mean mean n mean x x x x x x Devs n -+-++-=- (8)*/ /** The prior probabilities of the classes. 每个类的先验概率数组 */protected double [] m_Priors; //每个类的先验概率,第一维表示类名,比如m_Prior[yes] /** The instances used for training. 用于训练的实例*/protected Instances m_Instances; //定义用于训练的实例/** Constant for normal distribution. 正态分布常量*/protected static double NORM_CONST = Math.sqrt(2 * Math.PI); ///*** Returns a string describing this classifier* @return a description of the classifier suitable for* displaying in the e X plorer/e X perimenter gui*//**返回该分类器的描述字符串*返回适合于图形界面用户的分类器的描述*/方法一:public String globalInfo() { //返回该分类器的描述字符串return "Class for building and using a simple Naive Bayes classifier."+"Numeric attributes are modelled by a normal distribution. For more "+"information, see\n\n"+"Richard Duda and Peter Hart (1973). Pattern "+"Classification and Scene Analysis. Wiley, New York.";}/*** Generates the classifier.** @param instances set of instances serving as training data* @e X ception E X ception if the classifier has not been generated successfully*//*** 构造分类器** 参数instances表示训练例集合* 若分类器不正正常构造,则出现异常提示*/方法二:public void buildClassifier(Instances instances) throws E X ception { // 构造分类器int attInde X = 0; //属性索引double sum; //属于每个类的每个名称型属性的总个数if (instances.checkForStringAttributes()) {throw new UnsupportedAttributeTypeE X ception("Cannot handle string attributes!");} //若实例集合为string型则提示异常if (instances.classAttribute().isNumeric()) {throw new UnsupportedClassTypeE X ception("Naive Bayes: Class is numeric!");} //若实例集合的类属性为数值型则提示异常m_Instances = new Instances(instances, 0); //空实例// Reserve space为数组m_Counts[][][],m_Means[][],m_Devs[][],m_Priors[]分配空间m_Counts = new double[instances.numClasses()] [instances.numAttributes() - 1][0];/*属于每个类每个名称型属性的每个取值的个数数组,其中第一维表示类名,第二维表示属性名,第三维表示属性值,instances.numClasses()返回实例集的类值的个数,instances.numAttributes()返回实例集的属性个数,包括类属性,这也是第二维减一的原因,第三维之所以为零是因为后续分配空间的方便*/m_Means = new double[instances.numClasses()] [instances.numAttributes() - 1];/*数值型属性的均值数组,其中第一维表示类名, 第二维表示属性名,instances.numClasses()返回实例集的类值的个数, instances.numAttributes()返回实例集的属性个数,包括类属性,这也是第二维减一的原因, */m_Devs = new double[instances.numClasses()][instances.numAttributes() - 1];/*数值型属性的标准差数组,其中第一维表示类名, 第二维表示属性名,instances.numClasses()返回实例集的类值的个数, instances.numAttributes()返回实例集的属性个数,包括类属性,这也是第二维减一的原因, */m_Priors = new double[instances.numClasses()];/*每个类的先验概率数组,第一维表示类名,instances.numClasses()返回实例集的类值的个数, */第一步:Enumeration enu = instances.enumerateAttributes(); //返回一个实例集的属性集while (enu.hasMoreElements()) { //遍历实例集的每个属性,为m_Counts[][][]分配空间Attribute attribute = (Attribute) enu.ne X tElement(); //循环从属性集中取每个属性if (attribute.isNominal()) { //属性若为名称型属性for (int j = 0; j < instances.numClasses(); j++) { //遍历类m_Counts[j][attInde X] = new double[attribute.numValues()];/*为属于每个类的每个名称型属性的每个取值的个数数组m_Counts[][][]预留空间,attribute.numValues()返回属性attibute 的值的个数. */}} else { //属性若为数值型属性for (int j = 0; j < instances.numClasses(); j++) { //遍历类 m_Counts[j][attInde X ] = new double[1]; //若该属性不为名称型属性,则数组初始化为长度为1的一维数组}}attInde X ++; //属性索引加一,执行下一个属性}第二步:Enumeration enu = instances.enumerateAttributes(); //返回一个实例集的属性集 while (enu.hasMoreElements()) { //遍历实例集的每个属性,为 m_Counts[][][]分配空间Attribute attribute = (Attribute) enu.ne X tElement(); //循环从属性集中取每个属性 if (attribute.isNominal()) { //属性若为名称型属性for (int j = 0; j < instances.numClasses(); j++) { //遍历类 m_Counts[j][attInde X ] = new double[attribute.numValues()];/*为属于每个类的每个名称型属性的每个取值的个数数组m_Counts[][][]预留空间,attribute.numValues()返回属性attibute 的值的个数. */}} else { //属性若为数值型属性for (int j = 0; j < instances.numClasses(); j++) { //遍历类 m_Counts[j][attInde X ] = new double[1]; //若该属性不为名称型属性,则数组初始化为长度为1的一维数组}}attInde X ++; //属性索引加一,执行下一个属性}/**Compute means 计算数值型属性的均值,公式为:12n mean x x x x n +++=(9) */第三步:Enumeration enumAtts = instances.enumerateAttributes(); //返回实例集对应的属性的集合attInde X = 0; //属性索引,用于循环遍历属性while (enumAtts.hasMoreElements()) { //遍历属性,计算数组 m_Means[][]Attribute attribute = (Attribute) enumAtts.ne X tElement(); //取得一个属性if (attribute.isNumeric()) { //该属性为数值型属性则继续执行for (int j = 0; j < instances.numClasses(); j++) { //遍历类标,计算数组 m_Means[][]if (m_Counts[j][attInde X ][0] < 2) { //若该类值对应的数值型属性值个数小于2,则抛出异常throw new E X ception("attribute " + () +": less than two values for class " +instances.classAttribute().value(j));} m_Means[j][attInde X ] /= m_Counts[j][attInde X ][0]; //求得该数值型属性的每个类标对应的均值}}attInde X ++; //属性索引加1,继续执行下一属性}第四步:/* Compute standard deviations 计算数值型属性的标准差,公式为:22212()()()1mean mean n mean x x x x x x Devs n -+-++-=- (10)*/ enumInsts = instances.enumerateInstances(); //取得实例集合while (enumInsts.hasMoreElements()) { /*遍历实例集合,计算数值型属性的m_Devs[][],本循环的结果是在m_Devs[][]存放方差计算公式中的分子,即偏移量的平方和*/Instance instance = (Instance) enumInsts.ne X tElement(); //从实例集合中取出一个实例 if (!instance.classIsMissing()) { //若该实例类信息完整的话则继续执行enumAtts = instances.enumerateAttributes(); //取得实例集对应的的属性集attInde X = 0; //属性索引,用于遍历属性while (enumAtts.hasMoreElements()) { //遍历属性,计算数值型属性的m_Devs[][] Attribute attribute = (Attribute) enumAtts.ne X tElement(); //从属性集合中取得一个属性if (!instance.isMissing(attribute)) { // 若该实例的该属性没有缺损则继续执行if (attribute.isNumeric()) { //若该属性为数值型属性则继续执行m_Devs[(int)instance.classValue()][attInde X] +=(m_Means[(int)instance.classValue()][attInde X]-instance.value(attribute))*(m_Means[(int)instance.classValue()][attInde X]-instance.value(attribute)); //求得偏移量的平方和,即方差就算公式中的分子}}attInde X++; //属性索引加1,继续执行下一属性}}}enumAtts = instances.enumerateAttributes(); //取得实例集对应的属性集合attInde X = 0; //属性索引,用于遍历属性while (enumAtts.hasMoreElements()) { //遍历属性,计算每个数值型属性的方差,结果存于m_Devs[]Attribute attribute = (Attribute) enumAtts.ne X tElement(); //从属性集合中取得一个属性if (attribute.isNumeric()) { //若该属性为数值型则继续执行for (int j = 0; j < instances.numClasses(); j++) { //遍历类,求得该数值型的每个类值的标准差if (m_Devs[j][attInde X] <= 0) { //若偏移量的平方和为0,则抛出异常,否则计算m_Devs[]throw new E X ception("attribute " + () +": standard deviation is 0 for class " +instances.classAttribute().value(j));}else {// 为什么(_Counts[j][attInde X][0] - 1)m_Devs[j][attInde X] /= m_Counts[j][attInde X][0] - 1; /*利用偏移量的平方和除以数值型属性的个数减1求得标准差的平方*/m_Devs[j][attInde X] = Math.sqrt(m_Devs[j][attInde X]); //对上一步的结果开方求得标准差}}}attInde X++; //属性索引值加上1,继续执行下一属性}第五步:// Normalize counts 标准化数组m_Counts[][][],即把原来个数数组m_Counts[][][]中的个数转化为概率数组m_Counts[][][]enumAtts = instances.enumerateAttributes(); //取得属性集合attInde X = 0; //属性索引,用于遍历属性while (enumAtts.hasMoreElements()) { //遍历属性,求得概率数组m_Counts[][][]Attribute attribute = (Attribute) enumAtts.ne X tElement(); //从属性集合中取得一个属性if (attribute.isNominal()) { //若属性为名称型属性则继续执行for (int j = 0; j < instances.numClasses(); j++) { //遍历类,求得概率数组m_Counts[][][]sum = Utils.sum(m_Counts[j][attInde X]); /*计算该类对应的实例的总数,函数Utils.sum(m_Counts[yes][Outlook])返回属于"yes"类的实例个数*/for (int i = 0; i < attribute.numValues(); i++) { //遍历该属性对应的属性值m_Counts[j][attInde X][i] = (m_Counts[j][attInde X][i] + 1) / (sum + (double)attribute.numValues());/*计算该类值对应的该属性值的概率(分子为m_Counts[][][]+1,分母为该类值对应的实例的总数加上属性值的个数),比如m_Counts[yes][Outlook][sunny]=(m_Counts[yes][Outlook][sunny]+1)/(sum + 属性值的个数) */ }}}attInde X++; //属性索引加1,继续执行下一属性}第六步:// Normalize priors 标准化先验概率sum = Utils.sum(m_Priors); //计算实例的总数for (int j = 0; j < instances.numClasses(); j++) //遍历类m_Priors[j] = (m_Priors[j] + 1) / (sum + (double)instances.numClasses()); /*计算每个类的先验概率(分子为每个类的实例个数加1,分母为实例集的实例总数加上类标的个数) */ }/*** Calculates the class membership probabilities for the given test instance.** @param instance the instance to be classified* @return predicted class probability distribution* @e X ception E X ception if distribution can't be computed*//**计算给定测试例的类概率分布**参数instance表示待分类的实例*返回预测概率分布表*若预测概率分布不能计算的话返回异常*/方法三:public double[] distributionForInstance(Instance instance) throws E X ception {double [] probs = new double[instance.numClasses()]; //预测概率百分比数组,该数组将要存放的是待定实例属于每个类的概率所占的百分比int attInde X; //属性标记,用于遍历属性for (int j = 0; j < instance.numClasses(); j++) { //遍历每个类,计算probs[]probs[j] = 1; //对数组probs[]进行初始化Enumeration enumAtts = instance.enumerateAttributes(); //取得待定实例的属性集合attInde X = 0; //属性标记置0,将要开始遍历while (enumAtts.hasMoreElements()) { //属性遍历Attribute attribute = (Attribute) enumAtts.ne X tElement(); //从属性集合中取得一个属性if (!instance.isMissing(attribute)) { //若给定实例的属性没有缺损则继续执行if (attribute.isNominal()) { //若该属性为名称型属性则继续执行probs[j] *= m_Counts[j][attInde X][(int)instance.value(attribute)]; //该属性为名称型属性就直接乘以该类该属性值的概率m_Counts[][][](上面已经计算)} else {probs[j] *= normalDens(instance.value(attribute), m_Means[j][attInde X],m_Devs[j][attInde X]);} //该属性为数值型属性就乘以该类该属性值对应的概率密度(利用正态分布概率密度公式求出)}attInde X++; //属性值加1,继续遍历下一属性}probs[j] *= m_Priors[j]; //用probs[j]乘以先验概率m_Priors[j],结果表示bayias公式的分子}// Normalize probabilities 标准化待定实例属于每个类的概率所占的百分比Utils.normalize(probs); /*求得待定实例属于每个类的概率所占的百分比,即probs[j]=probs[j]/(probs[0]+probs[1]+probs[2]+......+) */return probs; //返回}/*** Returns a description of the classifier.** @return a description of the classifier as a string.*//**返回分类器的描述***/方法四:public String toString() {if (m_Instances == null) {return "Naive Bayes (simple): No model built yet."; /*若实例集为空,则返回"Naive Bayes (simple): No model built yet." */}try {StringBuffer te X t = new StringBuffer("Naive Bayes (simple)"); //建立字符串缓冲区,用于描述分类器int attInde X; //建立属性索引索引for (int i = 0; i < m_Instances.numClasses(); i++) { //遍历类te X t.append("\n\nClass " + m_Instances.classAttribute().value(i)+ ": P(C) = "+ Utils.doubleToString(m_Priors[i], 10, 8)+ "\n\n"); //在字符串缓冲区存储每个类的先验概率Enumeration enumAtts = m_Instances.enumerateAttributes(); //取得属性集合attInde X = 0; //属性标志置0while (enumAtts.hasMoreElements()) { //遍历属性Attribute attribute = (Attribute) enumAtts.ne X tElement(); //取得一个属性te X t.append("Attribute " + () + "\n"); //在字符串缓冲区存储每个属性的名称if (attribute.isNominal()) { //若属性为名称型属性时则继续执行for (int j = 0; j < attribute.numValues(); j++) { //遍历每个属性值te X t.append(attribute.value(j) + "\t"); //在字符串缓冲区存储每个值属性的名称}te X t.append("\n");for (int j = 0; j < attribute.numValues(); j++) //遍历每个属性值te X t.append(Utils.doubleToString(m_Counts[i][attInde X][j], 10, 8)+ "\t"); //在字符串缓冲区存储该类对应的每个属性值的概率} else { //若属性为数值型属性则继续执行te X t.append("Mean: " + Utils.doubleToString(m_Means[i][attInde X], 10, 8) + "\t"); //若该属性为数值型属性,则在字符串缓冲区存储该类对应的属性的均值te X t.append("Standard Deviation: "+ Utils.doubleToString(m_Devs[i][attInde X], 10, 8)); //若该属性为数值型属性,则在字符串缓冲区存储该类对应的属性的方差}te X t.append("\n\n");attInde X++; //属性索引加一,继续执行下一属性}}return te X t.toString(); //返回字符串缓冲区的内容} catch (E X ception e) {return "Can't print Naive Bayes classifier!"; //若分类器描述串建立不成功,则返回"Can't print Naive Bayes classifier!"}}/*** Density function of normal distribution. 给定均值mean,方差stdDev,计算某个属性值X的正态分布概率密度*/方法五:protected double normalDens(double X, double mean, double stdDev) {/**给定属性值,利用正态分布计算概率密度2()2()xP x eδδ-=(11) */double diff = X - mean;return (1 / (NORM_CONST * stdDev))* Math.e X p(-(diff * diff / (2 * stdDev * stdDev))); //根据正态分布的公式计算概率密度}/*** Main method for testing this class.** @param argv the options*//**测试NaiveBayesSimple类的主函数*/方法六:public static void main(String [] argv) {Classifier scheme; //分类器声明try {scheme = new NaiveBayesSimple(); //构造分类器System.out.println(Evaluation.evaluateModel(scheme, argv)); //输出结果/*函数Evaluation.evaluateModel(scheme, argv)用来根据参数argv设定的评价方式对分类器scheme进行评价,把评价的结果以字符串的形式返回*/} catch (E X ception e) {System.err.println(e.getMessage());}}private void jbInit() throws E X ception {} //构造分类器的初始化函数}附二:其在weather数据集合上构造分类器的过程及运行结果:构造分类器过程:第一步****************m_Counts[yes][outlook]=new double[3] m_Counts[no][outlook]=new double[3] m_Counts[yes][windy]=new double[2] m_Counts[no][windy]=new double[2]****************第二步****************m_Counts[yes][outlook][sunny]=2 m_Counts[yes][outlook][overcast]=4m_Counts[yes][outlook][rainy]=3m_Counts[yes][windy][true]=3 m_Counts[yes][windy][false]=6m_Counts[no][outlook][sunny]=3 m_Counts[no][outlook][overcast]=0m_Counts[no][outlook][rainy]=2m_Counts[no][windy][true]=3 m_Counts[no][windy][false]=2m_Means[yes][temperature]=657 m_Means[yes][humidity]=712m_Means[no][temperature]=373 m_Means[no][humidity]=431m_Priors[yes]=9 m_Priors[no]=5****************第三步****************m_Means[yes][temperature]=73 m_Means[yes][humidity]=79.1111m_Means[no][temperature]=74.6 m_Means[no][humidity]=86.2****************第四步****************m_Devs[yes][temperature]=6.1644 m_Devs[yes][humidity]=10.2157m_Devs[no][temperature]=7.893 m_Devs[no][humidity]=9.7314****************第五步****************m_Counts[yes][outlook][sunny]=0.25 m_Counts[yes][outlook][overcast]=0.4167 m_Counts[yes][outlook][rainy]=0.3333m_Counts[yes][windy][true]=0.3636 m_Counts[yes][windy][false]=0.6364m_Counts[no][outlook][sunny]=0.5 m_Counts[no][outlook][overcast]=0.125 m_Counts[no][outlook][rainy]=0.375m_Counts[no][windy][true]=0.5714 m_Counts[no][windy][false]=0.4286****************第六步****************m_Priors[yes]=0.625 m_Priors[no]=0.375****************运行结果:Naive Bayes (simple)Class yes: P(C) = 0.625Attribute outlooksunny overcast rainy0.25 0.41666667 0.33333333Attribute temperatureMean: 73 Standard Deviation: 6.164414Attribute humidityMean: 79.11111111 Standard Deviation: 10.21572861Attribute windyTRUE FALSE0.36363636 0.63636364Class no: P(C) = 0.375Attribute outlooksunny overcast rainy0.5 0.125 0.375Attribute temperatureMean: 74.6 Standard Deviation: 7.8930349Attribute humidityMean: 86.2 Standard Deviation: 9.7313925Attribute windyTRUE FALSE0.57142857 0.42857143Time taken to build model: 0 secondsTime taken to test model on training data: 0 seconds=== Error on training data ===Correctly Classified Instances 13 92.8571 % Incorrectly Classified Instances 1 7.1429 % Kappa statistic 0.8372Mean absolute error 0.3003Root mean squared error 0.3431Relative absolute error 64.6705 %Root relative squared error 71.5605 %Total Number of Instances 14=== Confusion Matrix ===a b <-- classified as9 0 | a = yes1 4 | b = no=== Stratified cross-validation ===Correctly Classified Instances 8 57.1429 % Incorrectly Classified Instances 6 42.8571 % Kappa statistic -0.0244Mean absolute error 0.4699Root mean squared error 0.5376Relative absolute error 98.6856 %Root relative squared error 108.9683 %Total Number of Instances 14=== Confusion Matrix ===a b <-- classified as7 2 | a = yes4 1 | b = no。
朴素贝叶斯算法介绍
朴素贝叶斯算法介绍朴素贝叶斯算法的核心思想是基于特征之间的条件独立性假设。
它假设所有特征之间相互独立,即每个特征对分类结果的贡献是独立且独立。
尽管这个假设在现实中很难满足,但在实际应用中,朴素贝叶斯算法表现出了出人意料的优异性能。
算法的基本步骤如下:1.数据准备:收集样本数据并对其进行预处理,将其转化为合适的数据结构,例如向量化或者词袋模型等。
2.计算先验概率:统计训练数据中每个类别的样本数量,并计算每个类别的先验概率。
先验概率即在不知道任何特征情况下,样本属于一些类别的概率。
3.计算条件概率:对于每个特征,统计训练数据中属于每个类别的样本数量,并计算每个类别下每个特征的条件概率。
条件概率即在给定一些特征的条件下,样本属于一些类别的概率。
4.进行分类:对于新的样本数据,根据贝叶斯定理以及条件独立性假设,计算每个类别的后验概率,并选择具有最大后验概率的类别作为分类结果。
然而,朴素贝叶斯算法也有一些局限性。
首先,它基于特征之间的条件独立性假设,这往往不符合现实情况。
其次,朴素贝叶斯算法对于特征的选择非常敏感,不同的特征选择可能导致不同的分类结果。
最后,朴素贝叶斯算法无法处理连续属性,需要对连续属性进行离散化处理。
为了克服朴素贝叶斯算法的一些限制,研究人员提出了各种改进算法,例如高斯朴素贝叶斯、多项式朴素贝叶斯、伯努利朴素贝叶斯等。
这些改进算法针对不同类型的特征数据进行了针对性的优化,提高了朴素贝叶斯算法的分类效果。
总结起来,朴素贝叶斯算法是一种基于贝叶斯定理和条件独立性假设的简单但有效的分类算法。
它在文本分类、垃圾邮件过滤、情感分析等领域具有广泛应用。
同时,研究人员也在朴素贝叶斯算法的基础上做了很多改进,以适用于各种特征类型和实际应用场景。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
( 1 .S c h o o l o f S u r v e y i n g a n d Ma p p i n g ,I n f o r ma t i o n En g i n e e r i n g Un i v e r s i t y, Z h e n g z h o u 4 5 0 0 5 2 , Ch i n a ;2 .Tr o o p s 7 1 8 3 4 ,
第 2 2卷 第 2期
2 0 1 3 年 4 月
测
绘
工
程
Vo l _ 2 2 , No . 2 Ap r . , 2 0 1 3
En g i n e e r i n g o f S u r v e y i n g a n d Ma p p i n g
地 理 信 息 服 务 朴 素 贝 叶 斯 分 类 及 类 别 匹 配 研 究
Re s e a r c h o f g e o g r a V i c e — Na i v e Ba y e s
c l a s s i f i c a t i o n a n d c l a s s i f i c a t i o n ma t c hi ng
Na i v e B a y e s c l a s s i f i c a t i o n c a n r e a c h . t o 7 8 . 1 ,a n d t h e p r e c i s i o n a n d i n q u i r y t i me o f g e o g r a p h i c a l
c l a s s i f i c a t i o n me t h o d o f g e o g r a p h i c a l i n f o r ma t i o n s e r v i c e i s p r o p o s e d ,a n d s e r v i c e c l a s s i f i c a t i o n ma t c h i n g i s p r o v i d e d . Th e p r o c e s s o f t h e c l a s s i f i c a t i o n i n c l u d e s t r a i n i n g s t a g e a n d t e s t s t a g e . Tr a i n i n g s t a g e a i ms t o f o i m a Na i v e B a y e s c l a s s i f i c a t i o n mo d e l ,a n d t e s t s t a g e t o ma k e s e r v i c e c l a s s i f i c a t i o n t e s t s b y t h e mo d e 1 . Ge o g r a p h i c a l i n f o r ma t i o n s e r v i c e c l a s s i f i c a t i o n ma t c h ma k i n g i s b a s e d o n t h e o n t o l o g i e s ,a n d t h e r e s u l t s o n l y c o n f i n e t o t wo p r e c i s e v a l u e s ,EXACT a n d S UBS UM E.Ex p e r i me n t r e s u l t s s h o w t h a t t h e a c c u r a c y o f
理信息服务匹配 。地 理信 息服务朴 素贝叶斯分 类过程 分为训 练阶段 和测试 阶段 , 训 练 阶段 主要是 构造朴 素贝叶斯 分类模 型 , 测试阶段主要是运用分类模型对地理信息服务进行分类测试 。地理信息服务 类别 匹配 基于本体实 现 , 且 只取完全匹配 E XA C T和包含 匹配 S UB S UME 2种精 确匹配结果 。实验 结果 表明 , 地理信息服务朴素 贝叶斯分类 的 准确率可 以达到 7 8 . 1 , 应 用服务分类后 , 地理信息服务发现 的查准率和查询时 间均有较大改善 。 关键词 : 地理信息服务 ; 朴素贝叶斯分类 ; 服务类别 匹配 ; 服务发现性能 中图分类号 : P 2 8 3 文献标 志码 : A 文章 编号 : 1 0 0 6 — 7 9 4 9 ( 2 0 1 3 ) 0 2 — 0 0 0 5 — 0 5
葛 文 , 成 毅 , 孙 亚 飞
( 1 .信 息 工 程 大 学 测 绘 学 院 , 河南 郑州 I 4 5 0 0 5 2 ; 2 .7 1 8 3 4部 队 , 河南 郑州 4 5 0 1 O 0 )
摘
要: 为进一步提高地理信息服务发现效率 , 文 中提 出地理信 息服务 朴素 贝叶斯分类 方法 , 并研 究基 于分 类 的地
Z h e n g z h o u 4 5 0 1 0 0, Ch i n a )
Ab s t r a c t : I n o r de r t o i mpr o ve t he e f f i c i e nc y of ge o gr a ph i c a l i nf or ma t i on s e r vi c e d i s c o v e r y, Na i v e Ba ye s