大数据挖掘(8):朴素贝叶斯分类算法原理与实践

合集下载

朴素贝叶斯算法原理

朴素贝叶斯算法原理

朴素贝叶斯算法原理解析1. 介绍朴素贝叶斯算法(Naive Bayes)是一种基于贝叶斯定理和特征条件独立性假设的分类算法。

它被广泛应用于文本分类、垃圾邮件过滤、情感分析等领域。

该算法简单高效,适用于大规模分类问题。

2. 基本原理朴素贝叶斯算法基于贝叶斯定理,通过计算后验概率来进行分类。

在文本分类中,给定一个待分类的文本,我们需要计算该文本属于每个类别的概率,并选择概率最大的类别作为其分类结果。

2.1 贝叶斯定理贝叶斯定理描述了在已知结果的条件下,通过先验概率和条件概率计算后验概率的过程。

P(A|B)=P(B|A)P(A)P(B)其中,P(A)是事件 A 的先验概率,P(A|B)是事件 B 发生的条件下 A 的后验概率,P(B|A)是事件 A 发生的条件下 B 的概率,P(B)是事件 B 的先验概率。

2.2 特征条件独立性假设朴素贝叶斯算法的核心是特征条件独立性假设。

该假设认为给定类别的情况下,特征之间是相互独立的。

特征条件独立性假设表示为:P(x1,x2,...,x n|y)=P(x1|y)⋅P(x2|y)⋅...⋅P(x n|y)其中,x1,x2,...,x n是一个样本的特征,y是样本的类别。

该假设的前提条件是特征之间相互独立,实际上在某些情况下可能并不成立。

然而,该假设通常在实际问题中仍能取得不错的分类效果,原因是朴素贝叶斯算法不关心特征之间的依赖关系,只关注各特征对最终结果的影响程度。

2.3 计算后验概率根据贝叶斯定理和特征条件独立性假设,我们可以计算后验概率来进行分类。

对于一个待分类的文本,假设它的特征向量为x=(x1,x2,...,x n),类别集合为C=(c1,c2,...,c k)。

那么根据贝叶斯定理,我们需要计算每个类别的后验概率P(c i|x),并选择概率最大的类别作为最终的分类结果。

根据贝叶斯定理,后验概率可以表示为:P(c i|x)=P(x|c i)⋅P(c i)P(x)其中,P(x|c i)是在类别c i的条件下特征向量x出现的概率,P(c i)是类别c i的先验概率,P(x)是特征向量x出现的概率。

机器学习技术中的朴素贝叶斯分类算法详解

机器学习技术中的朴素贝叶斯分类算法详解

机器学习技术中的朴素贝叶斯分类算法详解机器学习的发展使得人工智能领域取得了重大突破。

其中,朴素贝叶斯算法是一种广泛应用于文本分类、垃圾邮件过滤和情感分析等领域的机器学习算法。

本文将对朴素贝叶斯分类算法进行详细的解析。

朴素贝叶斯分类算法的原理基于条件概率和贝叶斯定理。

其核心思想是利用特征之间的独立性假设来简化问题。

具体而言,朴素贝叶斯分类器假设所有的特征在给定类别下是相互独立的,即每个特征对于分类的贡献是相互独立的。

这个假设使得朴素贝叶斯分类算法具有较好的性能,并且可以利用较少的样本进行训练。

朴素贝叶斯分类算法的步骤如下:1. 收集训练数据集:首先需要收集一组已经标注好的训练数据集。

训练数据集应该包含特征和对应的类别标签。

2. 特征选择:根据具体的问题,选择合适的特征进行分类。

特征应该具备代表性,且不与其他特征有强相关性。

3. 计算先验概率:对于每个类别,计算该类别在训练数据集中的出现概率。

这个概率称为先验概率。

4. 计算条件概率:对于每个特征,计算该特征在给定类别下的概率。

这个概率称为条件概率。

通常使用频率计数或者贝叶斯估计来计算条件概率。

5. 计算后验概率:根据贝叶斯定理,利用先验概率和条件概率计算后验概率。

后验概率表示给定特征的情况下属于某个类别的概率。

6. 最大后验概率估计:将测试样本的特征向量代入后验概率公式,计算每个类别的后验概率。

选择具有最大后验概率的类别作为预测结果。

朴素贝叶斯分类算法的优点是简单且易于实现。

它不需要对大量的特征进行复杂的学习和训练,而是通过计算概率的方式进行分类。

相比于其他复杂的机器学习算法,朴素贝叶斯分类算法具有更低的计算复杂度和更快的执行速度。

然而,朴素贝叶斯分类算法也存在一些限制。

首先,它假设特征之间是相互独立的,这在现实世界的许多问题中并不成立。

其次,朴素贝叶斯分类算法对于数据中的缺失值较为敏感。

当训练数据集中存在缺失值时,需要进行额外的处理来弥补缺失值对分类结果的影响。

朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理

朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理

朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理朴素贝叶斯算法,贝叶斯分类算法,贝叶斯定理原理贝叶斯分类算法是统计学的⼀种分类⽅法,它是⼀类利⽤概率统计知识进⾏分类的算法。

在许多场合,朴素贝叶斯(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),然后选择其中概率最⼤的类别作为其类别。

朴素贝叶斯算法成⽴的前提是各属性之间互相独⽴。

当数据集满⾜这种独⽴性假设时,分类的准确度较⾼,否则可能较低。

另外,该算法没有分类规则输出。

在所有的机器学习分类算法中,朴素贝叶斯和其他绝⼤多数的分类算法都不同。

朴素贝叶斯的基本原理

朴素贝叶斯的基本原理

朴素贝叶斯的基本原理朴素贝叶斯(Naive Bayes)算法是一个简单但有效的分类方法。

它的核心原理是基于贝叶斯定理,即在已知先验条件下给出后验概率。

本文将简要介绍朴素贝叶斯算法的基本原理和应用。

一、贝叶斯定理贝叶斯定理是概率论中的一个重要公式,用于计算一个事件的后验概率。

它的表达式如下:P(A|B) = P(B|A) * P(A) / P(B)其中,P(A)和P(B)分别是事件A和事件B的先验概率,P(B|A)是已知A发生的条件下B发生的概率。

P(A|B)是在已知B发生的条件下A发生的概率,也称为后验概率。

二、朴素贝叶斯算法朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,它的核心思想是根据属性之间的条件独立性来估计后验概率。

在给定一组属性条件下,朴素贝叶斯算法将后验概率估计为每个属性的概率之积,如下所示:P(C|X) = P(X|C) * P(C) / P(X)其中,C是类别变量,X是属性变量,P(C|X)是在给定属性X的条件下类别C发生的概率,P(X|C)是在类别C下属性X发生的概率,P(C)是类别C的先验概率,P(X)是属性X的先验概率。

根据朴素贝叶斯算法的条件独立性假设,在计算P(X|C)时,假设所有属性变量的取值是相互独立的。

三、应用场景朴素贝叶斯算法广泛应用于文本分类、过滤垃圾邮件、情感分析等领域。

在文本分类中,我们可以将每个文本看作一个属性向量,每个单词看作一个属性。

我们可以通过训练集数据学习各个单词在不同类别中的概率,并将其应用于测试集数据中进行分类。

在过滤垃圾邮件中,我们可以将每封邮件看作一个属性向量,每个关键词看作一个属性。

我们可以通过训练集数据学习各个关键词在垃圾邮件和正常邮件中的概率,并将其应用于测试集数据中进行分类。

在情感分析中,我们可以将每个文本看作一个属性向量,每个词语看作一个属性。

我们可以通过训练集数据学习各个词语在不同情感中的概率,并将其应用于测试集数据中进行分类。

朴素贝叶斯模型,策略,算法

朴素贝叶斯模型,策略,算法

朴素贝叶斯模型,策略,算法朴素贝叶斯模型(Naive Bayes Model)是一种基于贝叶斯定理和特征独立性假设的概率分类模型。

它是一种简单但强大的分类算法,在文本分类、垃圾邮件过滤、情感分析等领域中具有广泛应用。

本文将详细介绍朴素贝叶斯模型的概念、原理、策略和算法。

1.朴素贝叶斯模型的概念朴素贝叶斯模型是基于贝叶斯定理的一种分类算法。

贝叶斯定理是概率论中的重要定理,描述了已知某些条件下发生某事件的概率,通过先验概率和条件概率来计算后验概率。

朴素贝叶斯模型假设样本的各个特征都是相互独立的,即特征之间没有依赖关系。

2.朴素贝叶斯模型的原理假设训练数据集为D,特征向量为x = (x1, x2, ..., xn),对应的类别为y。

朴素贝叶斯模型的目标是,根据训练数据集构建条件概率分布P(y|x1, x2, ..., xn),即给定特征x1, x2, ..., xn的情况下,各个类别y的条件概率。

根据贝叶斯定理,可以将条件概率分布表示为:P(y|x1, x2, ..., xn) = P(x1, x2, ..., xn|y) * P(y) / P(x1, x2, ..., xn)由于我们的目标是找到使后验概率最大的类别y,可以将分母P(x1, x2, ..., xn)省略,因为它对所有类别都是一样的。

因为朴素贝叶斯模型假设特征之间相互独立,可以将条件概率分布进一步简化为:P(y|x1, x2, ..., xn) = P(x1|y) * P(x2|y) * ... * P(xn|y)* P(y)其中,P(xk|y)表示在类别y的情况下特征xk出现的概率。

为了判断新样本的类别,根据上述公式,计算每个类别的后验概率,选取后验概率最大的类别作为预测结果。

3.朴素贝叶斯模型的策略朴素贝叶斯模型在构建条件概率分布时,需要估计各个特征在各个类别下的概率。

通常采用的策略有拉普拉斯平滑(Laplace Smoothing)和最大似然估计(Maximum Likelihood Estimation)。

朴素贝叶斯算法实现

朴素贝叶斯算法实现

朴素贝叶斯算法实现一、朴素贝叶斯算法简介朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,其核心思想是利用先验概率和条件概率来进行分类。

它的优点在于简单易懂、计算效率高、对小规模数据表现良好等。

二、朴素贝叶斯算法原理1. 贝叶斯定理贝叶斯定理是指在已知某个条件下,根据这个条件对事件发生的概率进行推断的方法。

其公式为:P(A|B) = P(B|A) * P(A) / P(B)其中,P(A|B)表示在已知B发生的情况下A发生的概率,P(B|A)表示在已知A发生的情况下B发生的概率,P(A)表示A发生的先验概率,P(B)表示B发生的先验概率。

2. 朴素贝叶斯分类器朴素贝叶斯分类器是基于贝叶斯定理和特征独立假设来实现分类的。

具体而言,它将待分类样本中各个特征之间看作相互独立,并根据训练集中各类别样本出现特征值得频度来计算后验概率,从而确定待分类样本所属的类别。

三、朴素贝叶斯算法实现步骤1. 数据预处理对于朴素贝叶斯算法来说,数据预处理是非常重要的一步。

具体而言,需要对原始数据进行去噪、缺失值填充、特征选择等操作,以提高模型的准确性和可靠性。

2. 计算先验概率在进行分类之前,需要首先计算各个类别的先验概率。

具体而言,可以通过以下公式来计算:P(Yi) = Ni / N其中,P(Yi)表示第i个类别的先验概率,Ni表示第i个类别在训练集中出现的次数,N表示训练集中总样本数。

3. 计算条件概率接下来需要计算各个特征在给定类别下的条件概率。

具体而言,可以通过以下公式来计算:P(Xj|Yi) = Nij / Ni其中,P(Xj|Yi)表示在给定类别下第j个特征取值为Xi的条件概率,Nij 表示第i个类别中第j个特征取值为Xi的样本数。

4. 计算后验概率根据贝叶斯定理和条件独立性假设,在已知各个特征的情况下,可以计算待分类样本属于各个类别的后验概率。

具体而言,可以通过以下公式来计算:P(Yi|X) = P(X|Yi) * P(Yi) / P(X)其中,P(Yi|X)表示在给定样本特征下属于第i个类别的后验概率,P(X|Yi)表示在给定类别下样本特征取值为X的条件概率,P(Yi)表示第i个类别的先验概率,P(X)表示样本特征出现的先验概率。

朴素贝叶斯算法的解析与应用

朴素贝叶斯算法的解析与应用朴素贝叶斯算法是一种基于概率统计的机器学习算法。

它最初是由英国数学家托马斯·贝叶斯提出的,用于解决一些关于概率的问题。

随着计算机技术的发展,朴素贝叶斯算法被引入到机器学习的领域,成为了一种非常常用的算法。

朴素贝叶斯算法的基本原理是根据一个事件发生的条件概率和该事件的先验概率来计算该事件的后验概率。

在机器学习中,一般将这个事件指定为某个类别(如文本分类中的某个主题),而条件概率则针对某个样本(如一段文本)和该类别进行计算。

朴素贝叶斯算法的“朴素”指的是它假设样本的各个特征是相互独立的,这种假设在实际应用中可能并不完全准确,但是它的精度在很多场景下已经足够高了。

对于文本分类的任务,朴素贝叶斯算法的应用非常广泛。

在这个任务中,我们需要将一篇文本归类到某个主题下,比如“体育”、“政治”、“科技”等。

朴素贝叶斯算法的基本流程可以归纳为以下几步:1. 根据样本集合计算每个类别的先验概率。

这个过程可以简单地理解为计算该类别在整个样本中的出现概率。

2. 对于每个样本,计算它属于各个类别的条件概率,再根据朴素贝叶斯的独立假设,将各个特征的条件概率相乘。

这个过程可以理解为计算该样本属于某个类别的可能性有多大。

3. 选择最大的后验概率对应的类别,将该样本归类到该类别下。

需要注意的是,朴素贝叶斯算法在计算条件概率时,需要结合样本中各个特征的出现情况来计算,这就要求我们首先对样本进行预处理,将每个特征都转换为数字化的形式,比如词袋模型、TF-IDF等。

除了文本分类外,朴素贝叶斯算法还有很多其他的应用场景。

比如在垃圾邮件识别中,我们可以将某些关键词作为特征,然后利用朴素贝叶斯算法来判断一封邮件是否为垃圾邮件。

在信用评估和风险控制中,我们也可以利用朴素贝叶斯算法对客户的信用风险进行预测和控制。

当然,朴素贝叶斯算法也存在一些问题。

首先,它假设样本的各个特征是相互独立的,但在实际应用中,这种假设并不总是成立,因此可能会影响算法的准确性。

大数据下的朴素贝叶斯算法研究论文素材

大数据下的朴素贝叶斯算法研究论文素材一、介绍随着大数据时代的到来,数据量庞大且复杂多样的数据对我们的处理能力提出了更高的要求。

在数据挖掘和机器学习领域,朴素贝叶斯算法作为一种经典的分类算法,在大数据分析中扮演着重要的角色。

本文将探讨大数据下的朴素贝叶斯算法的研究成果,为相关研究提供参考素材。

二、朴素贝叶斯算法概述朴素贝叶斯算法是一种基于贝叶斯理论和特征条件独立假设的分类方法。

该算法通过统计训练数据中特征的频次和类别的概率分布,利用贝叶斯公式计算特征与类别之间的条件概率,进而实现对新样本的分类。

三、朴素贝叶斯算法在大数据中的应用1. 文本分类朴素贝叶斯算法在文本分类任务中具有良好的性能。

通过对已标注的大规模文本数据进行训练,可以得到词频以及词在不同类别下的条件概率分布。

在实际应用中,可以根据新样本中的词频统计和词条件概率计算,快速判断其所属类别,从而实现高效的文本分类。

2. 垃圾邮件过滤大数据环境下,垃圾邮件的数量巨大,给用户带来了很大的困扰。

朴素贝叶斯算法可以通过建立基于训练数据的垃圾邮件模型,利用特定的特征来判断新邮件是否为垃圾邮件。

该算法凭借其高效性和准确性,在垃圾邮件过滤领域得到了广泛应用。

3. 用户兴趣模型构建在电子商务等领域,构建用户兴趣模型是一项重要任务。

朴素贝叶斯算法可以通过分析用户历史行为和商品特征,计算商品在不同用户兴趣下的条件概率,从而为用户推荐符合其兴趣的商品。

在大数据场景中,朴素贝叶斯算法可以快速适应用户的兴趣变化,提供准确有效的推荐结果。

四、大数据下朴素贝叶斯算法的优化尽管朴素贝叶斯算法在大数据分析中具有广泛的应用,但也存在一些问题。

例如,由于特征条件独立假设的限制,算法对特征之间的相关性较为敏感。

针对这一问题,研究者提出了多种改进算法,如半朴素贝叶斯算法、混合模型朴素贝叶斯算法等,以提高算法的分类性能。

此外,大数据环境下,朴素贝叶斯算法需要处理数量庞大的数据,对存储和计算资源的要求较高。

朴素贝叶斯算法原理及应用

朴素贝叶斯算法原理及应用在机器学习领域中,有一种经典的算法,它被称为朴素贝叶斯算法。

这种算法是基于贝叶斯定理的统计学方法,用来推算出某些参数的概率分布。

它在文本分类、垃圾邮件过滤、情感分析等领域中被广泛应用,成为自然语言处理领域中常用的分类器之一。

本文将介绍朴素贝叶斯算法的原理及其在实际应用中的效果。

朴素贝叶斯算法的原理朴素贝叶斯算法最早由英国数学家托马斯•贝叶斯(Thomas Bayes)提出,因此这种算法被称为贝叶斯算法。

基于贝叶斯定理,我们可以从已知概率推算得到一个事件发生的概率。

朴素贝叶斯算法假定各个特征之间相互独立,这是一种朴素的假设。

基于这个假设,我们可以通过独立特征出现的频率来计算样本出现的概率,从而判断分类。

设样本的特征向量为 $x=(x_1, x_2, ..., x_n)$,对于每个特征$x_i$,我们可以计算出它对应类别 $y$ 的条件概率:$P(x_i|y)$,这个值可以通过统计每个类别中特征 $x_i$ 出现的概率得到。

类别$y$ 出现的概率 $P(y)$ 可以通过计算样本中每个类别出现的概率得到。

给定一个新样本 $x'$,我们可以计算出其属于每个类别的后验概率 $P(y|x')$,然后根据概率大小来进行分类。

朴素贝叶斯算法的应用文本分类是朴素贝叶斯算法最著名的应用之一。

在文本分类中,每篇文档都是一个特征向量,其中每个特征都是一个单词或短语。

我们可以使用朴素贝叶斯算法将每个文档分到预定义的几个类别中去,比如正面评价、负面评价等等。

为了应用朴素贝叶斯算法,我们需要预处理文本,将每篇文档转化为特征向量。

对于垃圾邮件过滤,我们可以使用朴素贝叶斯算法来训练一个分类器,该分类器可以将收件箱中的邮件划分为垃圾邮件和非垃圾邮件。

在这种情况下,样本的特征通常是邮件中出现的单词,类别是垃圾邮件和非垃圾邮件。

情感分析是朴素贝叶斯算法的另一个重要应用。

我们可以使用朴素贝叶斯算法来分析一段文本的情感倾向,比如是积极情感还是消极情感。

朴素贝叶斯分类原理

朴素贝叶斯分类:从原理到应用朴素贝叶斯分类是一种基于贝叶斯定理的机器学习算法。

它的原理很简单,但是却可以在很多领域得到应用。

在本文中,我们将详细介绍朴素贝叶斯分类的原理、应用场景及其优缺点。

1. 原理:朴素贝叶斯分类是一种基于贝叶斯定理的机器学习算法。

贝叶斯定理是指,在已知一个条件下,另一个条件发生的概率。

在朴素贝叶斯分类中,我们用贝叶斯定理来计算一个样本属于某个类别的概率,最后选择概率最大的类别作为预测结果。

在实际应用中,我们需要先对样本进行特征提取,然后计算每个特征在每个类别中出现的概率,最后将每个特征的概率乘起来得到样本属于某个类别的概率。

这里需要注意的一点是,朴素贝叶斯分类假设所有特征之间是相互独立的,这也是“朴素”的来源。

2. 应用场景:朴素贝叶斯分类广泛应用于文本分类、垃圾邮件过滤、情感分析等领域。

在文本分类中,我们将文本拆分成若干特征(如词语),然后计算每个词语在每个类别中出现的概率,最后将所有词语的概率乘起来得到文本属于某个类别的概率。

在垃圾邮件过滤中,我们将邮件的各种属性(如发件人、关键词等)作为特征,然后根据特征计算邮件属于垃圾邮件的概率。

在情感分析中,我们将文本的情感作为类别,将文本的各种特征(如词语、情感词等)作为特征,然后根据特征计算文本属于某种情感的概率。

3. 优缺点:优点:朴素贝叶斯分类具有训练速度快、预测速度快、对于文本分类等离散数据的处理效果很好等优点。

缺点:基于独立假设的限制会导致模型的预测精度不够高,对于特征之间存在依赖关系的数据无法处理。

4. 结论:通过对朴素贝叶斯分类的原理和应用进行介绍,我们可以发现朴素贝叶斯分类具有易于理解、应用范围广等特点。

在实际应用中,我们需要根据具体情况选择不同的特征提取方法和分类器,以达到最好的预测效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据挖掘(8):朴素贝叶斯分类算法原理与实践隔了很久没有写数据挖掘系列的文章了,今天介绍一下朴素贝叶斯分类算法,讲一下基本原理,再以文本分类实践。

一个简单的例子朴素贝叶斯算法是一个典型的统计学习方法,主要理论基础就是一个贝叶斯公式,贝叶斯公式的基本定义如下:这个公式虽然看上去简单,但它却能总结历史,预知未来。

公式的右边是总结历史,公式的左边是预知未来,如果把Y看出类别,X看出特征,P(Yk|X)就是在已知特征X的情况下求Yk类别的概率,而对P(Yk|X)的计算又全部转化到类别Yk的特征分布上来。

举个例子,大学的时候,某男生经常去图书室晚自习,发现他喜欢的那个女生也常去那个自习室,心中窃喜,于是每天买点好吃点在那个自习室蹲点等她来,可是人家女生不一定每天都来,眼看天气渐渐炎热,图书馆又不开空调,如果那个女生没有去自修室,该男生也就不去,每次男生鼓足勇气说:“嘿,你明天还来不?”,“啊,不知道,看情况”。

然后该男生每天就把她去自习室与否以及一些其他情况做一下记录,用Y表示该女生是否去自习室,即Y={去,不去},X是跟去自修室有关联的一系列条件,比如当天上了哪门主课,蹲点统计了一段时间后,该男生打算今天不再蹲点,而是先预测一下她会不会去,现在已经知道了今天上了常微分方法这么主课,于是计算P(Y=去|常微分方程)与P(Y=不去|常微分方程),看哪个概率大,如果P(Y=去|常微分方程) >P(Y=不去|常微分方程),那这个男生不管多热都屁颠屁颠去自习室了,否则不就去自习室受罪了。

P(Y=去|常微分方程)的计算可以转为计算以前她去的情况下,那天主课是常微分的概率P(常微分方程|Y=去),注意公式右边的分母对每个类别(去/不去)都是一样的,所以计算的时候忽略掉分母,这样虽然得到的概率值已经不再是0~1之间,但是其大小还是能选择类别。

后来他发现还有一些其他条件可以挖,比如当天星期几、当天的天气,以及上一次与她在自修室的气氛,统计了一段时间后,该男子一计算,发现不好算了,因为总结历史的公式:这里n=3,x(1)表示主课,x(2)表示天气,x(3)表示星期几,x(4)表示气氛,Y仍然是{去,不去},现在主课有8门,天气有晴、雨、阴三种、气氛有A+,A,B+,B,C五种,那么总共需要估计的参数有8*3*7*5*2=1680个,每天只能收集到一条数据,那么等凑齐1 680条数据大学都毕业了,男生打呼不妙,于是做了一个独立性假设,假设这些影响她去自习室的原因是独立互不相关的,于是有了这个独立假设后,需要估计的参数就变为,(8+3+7+5)*2 = 46个了,而且每天收集的一条数据,可以提供4个参数,这样该男生就预测越来越准了。

朴素贝叶斯分类器讲了上面的小故事,我们来朴素贝叶斯分类器的表示形式:当特征为为x时,计算所有类别的条件概率,选取条件概率最大的类别作为待分类的类别。

由于上公式的分母对每个类别都是一样的,因此计算时可以不考虑分母,即朴素贝叶斯的朴素体现在其对各个条件的独立性假设上,加上独立假设后,大大减少了参数假设空间。

在文本分类上的应用文本分类的应用很多,比如垃圾和垃圾短信的过滤就是一个2分类问题,新闻分类、文本情感分析等都可以看成是文本分类问题,分类问题由两步组成:训练和预测,要建立一个分类模型,至少需要有一个训练数据集。

贝叶斯模型可以很自然地应用到文本分类上:现在有一篇文档d(Document),判断它属于哪个类别ck,只需要计算文档d 属于哪一个类别的概率最大:在分类问题中,我们并不是把所有的特征都用上,对一篇文档d,我们只用其中的部分特征词项<t1,t2,…,tnd>(nd表示d中的总词条数目),因为很多词项对分类是没有价值的,比如一些停用词“的,是,在”在每个类别中都会出现,这个词项还会模糊分类的决策面,关于特征词的选取,我的这篇文章有介绍。

用特征词项表示文档后,计算文档d的类别转化为:注意P(Ck|d)只是正比于后面那部分公式,完整的计算还有一个分母,但我们前面讨论了,对每个类别而已分母都是一样的,于是在我们只需要计算分子就能够进行分类了。

实际的计算过程中,多个概率值P(tj|ck)的连乘很容易下溢出为0,因此转化为对数计算,连乘就变成了累加:我们只需要从训练数据集中,计算每一个类别的出现概率P(ck)和每一个类别中各个特征词项的概率P(tj|ck),而这些概率值的计算都采用最大似然估计,说到底就是统计每个词在各个类别中出现的次数和各个类别的文档的数目:其中,Nck表示训练集中ck类文档的数目,N训练集中文档总数;Tjk表示词项tj在类别ck中出现的次数,V是所有类别的词项集合。

这里对词的位置作了独立性假设,即两个词只要它们出现的次数一样,那不管它们在文档的出现位置,它们大概率值P(tj |ck)都是一样,这个位置独立性假设与现实很不相符,比如“放马屁”跟“马放屁”表述的是不同的容,但实践发现,位置独立性假设得到的模型准确率并不低,因为大多数文本分类都是靠词的差异来区分,而不是词的位置,如果考虑词的位置,那么问题将表达相当复杂,以至于我们无从下手。

然后需要注意的一个问题是ti可能没有出现在ck类别的训练集,却出现在ck类别的测试集合中,这样因为Tik为0,导致连乘概率值都为0,其他特征词出现得再多,该文档也不会被分到ck类别,而且在对数累加的情况下,0值导致计算错误,处理这种问题的方法是采样加1平滑,即认为每个词在各个类别中都至少出现过一次,即下面这个例子来自于参考文献1,假设有如下的训练集合测试集:现在要计算docID为5的测试文档是否属于China类别,首先计算个各类的概率,P(c =China)=3/4,P(c!=China)=1/4,然后计算各个类中词项的概率:注意分母(8+6)中8表示China类的词项出现的总次数是8,+6表示平滑,6是总词项的个数,然后计算测试文档属于各个类别的概率:可以看出该测试文档应该属于CHina类别。

文本分类实践我找了搜狗的搜狐新闻数据的历史简洁版,总共包括汽车、财经、it、健康等9类新闻,一共16289条新闻,搜狗给的数据是每一篇新闻用一个txt文件保存,我预处理了一下,把所有的新闻文档保存在一个文本文件中,每一行是一篇新闻,同时保留新闻的id,i d的首字母表示类标,预处理并分词后的示例如下:我用6289条新闻作为训练集,剩余1万条用于测试,采用互信息进行文本特征的提取,总共提取的特征词是700个左右。

分类的结果如下: 1 8343 10000 0.8343总共10000条新闻,分类正确的8343条,正确率0.8343,这里主要是演示贝叶斯的分类过程,只考虑了正确率也没有考虑其他评价指标,也没有进行优化。

贝叶斯分类的效率高,训练时,只需要扫描一遍训练集,记录每个词出现的次数,以及各类文档出现的次数,测试时也只需要扫描一次测试集,从运行效率这个角度而言,朴素贝叶斯的效率是最高的,而准确率也能达到一个理想的效果。

我的实现代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 #!encoding=utf-8import randomimport sysimport mathimport collectionsimport sysdef shuffle():'''将原来的文本打乱顺序,用于得到训练集和测试集'''datas = [line.strip() for line in sys.stdin]random.shuffle(datas)for line in datas:print line13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56lables = ['A','B','C','D','E','F','G','H','I']def lable2id(lable):for i in xrange (len (lables)):if lable == lables[i]:return iraise Exception('Error lable %s' % (lable))def docdict():return [0]*len (lables)def mutalInfo(N,Nij,Ni_,N_j):#print N,Nij,Ni_,N_jreturn Nij * 1.0 / N * math.log(N * (Nij +1)*1.0/(Ni_*N_j))/ math.log(2)def countForMI():'''基于统计每个词在每个类别出现的次数,以及每类的文档数'''docCount = [0] * len (lables)#每个类的词数目wordCount = collections.defaultdict(docdict)for line in sys.stdin:lable,text = line.strip().split(' ',1)index = lable2id(lable[0])words = text.split(' ')for word in words:wordCount[word][index] += 1docCount[index] += 1miDict = collections.defaultdict(docdict)#互信息值N = sum (docCount)for k,vs in wordCount.items():for i in xrange (len (vs)):N11 = vs[i]N10 = sum (vs) - N11N01 = docCount[i] - N11N00 = N - N11 - N10 - N01mi = mutalInfo(N,N11,N10+N11,N01+N11) + mutalInfo(N,N10,N10+N11,N00+N10)+ mutalInfo(N,N01,N01+N11,N01+N00)+ mutalInfo(N,N00,N00+N10,N00+N01)miDict[k][i] = mifWords = set ()for i in xrange (len (docCount)):keyf = lambda x:x[1][i]sortedDict = sorted (miDict.items(),key =keyf,reverse =True )for j in xrange (100):57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 10 fWords.add(sortedDict[j][0])print docCount #打印各个类的文档数目for fword in fWords:print fworddef loadFeatureWord():'''导入特征词'''f = open ('feature.txt')docCounts = eval (f.readline())features = set ()for line in f:features.add(line.strip())f.close()return docCounts,featuresdef trainBayes():'''训练贝叶斯模型,实际上计算每个类中特征词的出现次数'''docCounts,features = loadFeatureWord()wordCount = collections.defaultdict(docdict)tCount = [0]*len (docCounts)#每类文档特征词出现的次数for line in sys.stdin:lable,text = line.strip().split(' ',1)index = lable2id(lable[0])words = text.split(' ')for word in words:if word in features:tCount[index] += 1wordCount[word][index] += 1for k,v in wordCount.items():scores = [(v[i]+1) * 1.0 / (tCount[i]+len (wordCount)) for i in xrange (len (v))]#加1平滑 print '%s\t%s' % (k,scores)def loadModel():'''导入贝叶斯模型'''f = open ('model.txt')scores = {}for line in f:word,counts = line.strip().rsplit('\t',1)scores[word] = eval (counts)f.close()return scoresdef predict():0 10 1 10 2 10 3 10 4 10 5 10 6 10 7 10 8 10 9 11 0 11 1 11 2 11 3 11 4 11 5 11 6 11 7 11 8 11 9 12 0 12 1 12'''预测文档的类标,标准输入每一行为一个文档'''docCounts,features = loadFeatureWord()docscores = [math.log(count *1.0/sum(docCounts)) for count in docCounts] scores = loadModel()rCount =0docCount =0for line in sys.stdin:lable,text = line.strip().split(' ',1)index = lable2id(lable[0])words = text.split(' ')preValues =list(docscores)for word in words:if word in features:for i in xrange(len(preValues)):preValues[i]+=math.log(scores[word][i])m =max(preValues)pIndex = preValues.index(m)if pIndex == index:rCount +=1print lable,lables[pIndex],textdocCount +=1print rCount,docCount,rCount *1.0/ docCountif __name__=="__main__":#shuffle()#countForMI()#trainBayes()predict()2123124125127128代码里面,计算特征词与训练模型、测试是分开的,需要修改main方法,比如计算特征词:1 $cat train.txt | python bayes.py > feature.txt训练模型:1 $cat train.txt | python bayes.py > model.txt预测模型:1 $cat test.txt | python bayes.py > predict.out总结本文介绍了朴素贝叶斯分类方法,还以文本分类为例,给出了一个具体应用的例子,朴素贝叶斯的朴素体现在条件变量之间的独立性假设,应用到文本分类上,作了两个假设,一是各个特征词对分类的影响是独立的,另一个是词项在文档中的顺序是无关紧要的。

相关文档
最新文档