朴素贝叶斯分类器

合集下载

朴素贝叶斯分类器详细介绍

朴素贝叶斯分类器详细介绍

我们希望得到的是男性还是女性哪类的后验概率大。男性的后验概率通过下面 式子来求取
女性的后验概率通过下面式子来求取
证据因子(通常是常数)用来使各类的后验概率之和为 1.
证据因子是一个常数(在正态分布中通常是正数),所以可以忽略。接下来我 们来判定这样样本的性别。
,其中 , 是训练集样本的正态分布参数. 注意,这里 的值大于 1 也是允许的 – 这里是概率密度而不是概率,因为身高是一个连续 的变量.
可以通过将 表示为均值为
处理连续数值问题的另一种常用的技术是通 过离散化连续数值的方法。通常,当训练样本数量较少或者是精确的分布已知 时,通过概率分布的方法是一种更好的选择。在大量样本的情形下离散化的方 法表现更优,因为大量的样本可以学习到数据的分布。由于朴素贝叶斯是一种 典型的用到大量样本的方法(越大计算量的模型可以产生越高的分类精确度), 所以朴素贝叶斯方法都用到离散化方法,而不是概率分布估计的方法。
(变量的均值和方差)。由于变量独立假设,只需要估计各个变量的方法,而 不需要确定整个协方差矩阵。
朴素贝叶斯概率模型[编辑]
理论上,概率模型分类器是一个条件概率模型。
独立的类别变量 有若干类别,条件依赖于若干特征变量 , ,..., 。但 问题在于如果特征数量 较大或者每个特征能取大量值时,基于概率模型列出 概率表变得不现实。所以我们修改这个模型使之变得可行。 贝叶斯定理有以下 式子:
用朴素的语言可以表达为:
实际中,我们只关心分式中的分子部分,因为分母不依赖于 而且特征 的值 是给定的,于是分母可以认为是一个常数。这样分子就等价于联合分布模型。
重复使用链式法则,可将该式写成条件概率的形式,如下所示:
现在“朴素”的条件独立假设开始发挥作用:假设每个特征 是条件独立的。这就意味着

常用nlp算法

常用nlp算法

常用nlp算法NLP(自然语言处理)是计算机科学和人工智能领域的一个重要分支,其主要目的是让计算机能够理解、分析和生成人类语言。

在NLP中,有许多常用的算法,本文将对其中一些进行详细介绍。

一、文本分类算法1. 朴素贝叶斯分类器朴素贝叶斯分类器是一种基于概率统计的分类算法,它假设所有特征都是相互独立的,并且每个特征对结果的影响是相同的。

在文本分类中,每个单词可以看作一个特征,而文本可以看作一个包含多个特征的向量。

朴素贝叶斯分类器通过计算每个类别下每个单词出现的概率来确定文本所属类别。

2. 支持向量机(SVM)SVM是一种常用的二分类算法,在文本分类中也有广泛应用。

它通过找到一个最优超平面来将不同类别的数据分开。

在文本分类中,可以将每个单词看作一个维度,并将所有文本表示为一个高维向量。

SVM通过最大化不同类别之间的间隔来确定最优超平面。

3. 决策树决策树是一种基于树形结构的分类算法,它通过对数据进行逐步划分来确定每个数据点所属的类别。

在文本分类中,可以将每个单词看作一个特征,并将所有文本表示为一个包含多个特征的向量。

决策树通过逐步划分特征来确定文本所属类别。

二、情感分析算法1. 情感词典情感词典是一种包含大量单词及其情感极性的词典,它可以用来对文本进行情感分析。

在情感词典中,每个单词都被标注为积极、消极或中性。

在进行情感分析时,可以统计文本中出现积极和消极单词的数量,并计算出总体情感倾向。

2. 深度学习模型深度学习模型是一种基于神经网络的模型,它可以自动从数据中学习特征并进行分类或回归。

在情感分析中,可以使用卷积神经网络(CNN)或长短期记忆网络(LSTM)等深度学习模型来对文本进行分类。

三、实体识别算法1. 基于规则的方法基于规则的方法是一种手工编写规则来进行实体识别的方法。

在这种方法中,可以通过正则表达式或其他模式匹配算法来识别特定类型的实体。

例如,在医疗领域中,可以通过匹配特定的病症名称或药品名称来识别实体。

朴素贝叶斯分类器详解及中文文本舆情分析(附代码实践)

朴素贝叶斯分类器详解及中文文本舆情分析(附代码实践)

朴素贝叶斯分类器详解及中⽂⽂本舆情分析(附代码实践)本⽂主要讲述朴素贝叶斯分类算法并实现中⽂数据集的舆情分析案例,希望这篇⽂章对⼤家有所帮助,提供些思路。

内容包括:1.朴素贝叶斯数学原理知识2.naive_bayes⽤法及简单案例3.中⽂⽂本数据集预处理4.朴素贝叶斯中⽂⽂本舆情分析本篇⽂章为基础性⽂章,希望对你有所帮助,如果⽂章中存在错误或不⾜之处,还请海涵。

同时,推荐⼤家阅读我以前的⽂章了解基础知识。

▌⼀. 朴素贝叶斯数学原理知识朴素贝叶斯(Naive Bayesian)是基于贝叶斯定理和特征条件独⽴假设的分类⽅法,它通过特征计算分类的概率,选取概率⼤的情况,是基于概率论的⼀种机器学习分类(监督学习)⽅法,被⼴泛应⽤于情感分类领域的分类器。

下⾯简单回顾下概率论知识:1.什么是基于概率论的⽅法?通过概率来衡量事件发⽣的可能性。

概率论和统计学是两个相反的概念,统计学是抽取部分样本统计来估算总体情况,⽽概率论是通过总体情况来估计单个事件或部分事情的发⽣情况。

概率论需要已知数据去预测未知的事件。

例如,我们看到天⽓乌云密布,电闪雷鸣并阵阵狂风,在这样的天⽓特征(F)下,我们推断下⾬的概率⽐不下⾬的概率⼤,也就是p(下⾬)>p(不下⾬),所以认为待会⼉会下⾬,这个从经验上看对概率进⾏判断。

⽽⽓象局通过多年长期积累的数据,经过计算,今天下⾬的概率p(下⾬)=85%、p(不下⾬)=15%,同样的 p(下⾬)>p(不下⾬),因此今天的天⽓预报肯定预报下⾬。

这是通过⼀定的⽅法计算概率从⽽对下⾬事件进⾏判断。

2.条件概率若Ω是全集,A、B是其中的事件(⼦集),P表⽰事件发⽣的概率,则条件概率表⽰某个事件发⽣时另⼀个事件发⽣的概率。

假设事件B发⽣后事件A发⽣的概率为:设P(A)>0,则有 P(AB) = P(B|A)P(A) = P(A|B)P(B)。

设A、B、C为事件,且P(AB)>0,则有 P(ABC) = P(A)P(B|A)P(C|AB)。

朴素贝叶斯例子

朴素贝叶斯例子

朴素贝叶斯分类器是一种基于贝叶斯定理和特征条件独立假设的分类方法。

以下是一个简单的例子来说明朴素贝叶斯分类器的工作原理。

假设我们有一个数据集,其中包含两个类别:感冒和过敏,以及两个特征:打喷嚏和职业。

根据先验概率,我们知道感冒的概率为0.5,过敏的概率为0.33。

现在,我们要根据一个人的特征和职业来预测他是否患有感冒或过敏。

首先,我们来看第一个特征“打喷嚏”。

如果一个打喷嚏的人是建筑工人,我们假设“打喷嚏”和“建筑工人”这两个特征是独立的,因此可以使用朴素贝叶斯公式来计算他患感冒的概率。

具体地,我们可以使用以下公式:
P(感冒|打喷嚏x建筑工人) = P(打喷嚏|感冒) x P(建筑工人|感冒) x P(感冒) / P(打喷嚏x建筑工人)
根据已知条件,我们可以将上述公式中的各个概率值代入计算,得到该建筑工人患感冒的概率为0.66。

同样地,我们可以使用朴素贝叶斯公式来计算该建筑工人患过敏的概率,具体公式为:
P(过敏|打喷嚏x建筑工人) = P(打喷嚏|过敏) x P(建筑工人|过敏) x P(过敏) / P(打喷嚏x建筑工人)
代入已知条件计算后,得到该建筑工人患过敏的概率为0.34。

因此,根据朴素贝叶斯分类器的判断,该建筑工人更有可能患有感冒。

以上就是一个简单的朴素贝叶斯分类器的例子。

需要注意的是,在实际应用中,数据集通常包含更多的特征和类别,计算也会更加复杂。

粗糙集理论与朴素贝叶斯分类器的比较与融合

粗糙集理论与朴素贝叶斯分类器的比较与融合

粗糙集理论与朴素贝叶斯分类器的比较与融合引言:在机器学习和数据挖掘领域,分类器是一种常用的工具,用于将数据集中的实例分配到不同的类别中。

粗糙集理论和朴素贝叶斯分类器是两种常见的分类方法,本文将对它们进行比较与融合,探讨它们的优势和适用场景。

一、粗糙集理论粗糙集理论是由波兰学者Pawlak于1982年提出的一种基于粗糙度的不确定性处理方法。

该理论将数据集分为决策属性和条件属性,通过计算属性间的粗糙度来实现分类。

粗糙集理论的优势在于能够处理不完整和不确定的数据,具有较强的鲁棒性。

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

该分类器通过计算给定特征条件下各类别的后验概率来进行分类。

朴素贝叶斯分类器的优势在于简单快速,对于大规模数据集具有较好的性能。

三、比较与融合粗糙集理论和朴素贝叶斯分类器在分类问题上有着不同的特点和适用场景。

粗糙集理论适用于处理不完整和不确定的数据,能够在数据缺失或噪声较多的情况下仍然有效。

而朴素贝叶斯分类器适用于处理大规模数据集,具有较好的性能和计算效率。

在实际应用中,可以将粗糙集理论和朴素贝叶斯分类器进行融合,充分利用它们各自的优势。

首先,可以使用粗糙集理论对数据进行预处理,处理不完整和不确定的数据,将其转化为可用的形式。

然后,将处理后的数据输入到朴素贝叶斯分类器中进行分类。

这样可以充分利用粗糙集理论的鲁棒性和朴素贝叶斯分类器的性能。

融合粗糙集理论和朴素贝叶斯分类器的方法有多种,可以根据具体问题选择合适的方法。

一种常见的方法是将粗糙集理论和朴素贝叶斯分类器作为两个独立的模块,分别进行数据预处理和分类,最后将它们的结果进行融合。

另一种方法是将粗糙集理论的粗糙度作为朴素贝叶斯分类器的先验概率,通过联合计算得到更准确的分类结果。

融合粗糙集理论和朴素贝叶斯分类器可以提高分类的准确性和鲁棒性,适用于处理复杂的实际问题。

在实际应用中,可以根据具体情况选择合适的方法和参数,进行优化和调整。

朴素贝叶斯分类课件

朴素贝叶斯分类课件

缺点:对异常值和离散特征处理不佳。
01
02
03
04
01
多项式分布假设:朴素贝叶斯分类器假设特征符合多项式分布。
02
数学模型:基于多项式分布的朴素贝叶斯分类器使用以下数学模型进行分类
03
特征概率密度函数为多项式分布。
通过贝叶斯定理计算样本属于每个类别的概率。
缺点:对连续数值特征处理不佳,参数估计困难。
特征编码
03
对特征进行标准化、归一化等预处理,以提高分类器的性能。
特征预处理
根据任务需求和数据特性,调整朴素贝叶斯分类器的超参数,如平滑参数、先验概率等。
通过交叉验证来评估不同超参数组合下的分类器性能,以选择最佳参数组合。
调整分类器参数
使用交叉验证
利用多核CPU或GPU进行并行计算,以提高分类器的训练速度。
对噪声数据敏感
如果数据集中存在噪声或者异常值,朴素贝叶斯分类器的性能可能会受到影响。
对连续特征的处理
朴素贝叶斯分类器通常只能处理离散特征,对于连续特征需要进行离散化或者采用其他方法进行处理。
05
CHAPTER
朴素贝叶斯分类器的应用场景与实例
朴素贝叶斯分类器在文本分类任务中表现出色,例如垃圾邮件、情感分析、新闻分类等。
01
02
高斯朴素贝叶斯假定特征符合高斯分布(正态分布),而多项式朴素贝叶斯则假定特征服从多项式分布。
朴素贝叶斯算法可以分为两类:高斯朴素贝叶斯和多项式朴素贝叶斯。
它是一种基于概率的分类方法,对于缺失数据和异常值具有较好的鲁棒性。
朴素贝叶斯算法在文本分类、情感分析、图像分类等自然语言处理和计算机视觉领域都有广泛的应用。
定义
03
CHAPTER

朴素贝叶斯分类器的超参数调优方法(Ⅲ)

朴素贝叶斯分类器的超参数调优方法(Ⅲ)

朴素贝叶斯分类器的超参数调优方法朴素贝叶斯分类器是一种基于概率和统计的分类方法,它假设各个特征之间是相互独立的。

在实际应用中,朴素贝叶斯分类器经常被用来处理文本分类等问题,但是在处理实际数据时,我们常常需要对分类器的超参数进行调优,以提高分类器的性能。

本文将介绍朴素贝叶斯分类器的超参数调优方法。

首先,我们需要了解朴素贝叶斯分类器的超参数。

朴素贝叶斯分类器有两个主要的超参数需要调优,分别是平滑参数和特征选择参数。

平滑参数是朴素贝叶斯分类器中的一个重要参数,它用来处理在训练数据中某些类别或特征的概率为零的情况。

常见的平滑参数包括拉普拉斯平滑和Lidstone平滑。

在实际应用中,我们需要通过交叉验证等方法来选择最适合的平滑参数。

特征选择参数是指在朴素贝叶斯分类器中选择哪些特征进行分类的参数。

在实际应用中,我们可能面对大量的特征,而其中只有一部分是对分类有用的。

因此,我们需要通过特征选择方法来选择最优的特征。

接下来,我们将介绍朴素贝叶斯分类器的超参数调优方法。

对于平滑参数的调优,我们可以通过网格搜索或者随机搜索的方法来选择最优的平滑参数。

网格搜索是一种穷举搜索的方法,它将所有可能的参数组合都尝试一遍,然后选择最优的参数组合。

而随机搜索则是通过随机地选择参数组合来进行搜索,一般来说,随机搜索可以在相对短的时间内找到较好的参数组合。

对于特征选择参数的调优,我们可以采用一些常见的特征选择方法,比如方差过滤、相关性过滤、互信息过滤等。

这些方法可以帮助我们在保留最重要的特征的同时,去除一些无用的特征,从而提高分类器的性能。

除了上述方法外,我们还可以尝试使用贝叶斯优化等方法来进行超参数的调优。

贝叶斯优化是一种基于贝叶斯理论的超参数优化方法,它通过不断地更新对参数的后验分布来选择最优的参数组合。

与网格搜索和随机搜索相比,贝叶斯优化在高维参数空间中的效果更好。

最后,我们需要注意的是,朴素贝叶斯分类器的超参数调优并不是一次性的事情,我们需要通过实验和不断地调整参数来寻找最优的参数组合。

利用机器学习技术进行文本分类的方法

利用机器学习技术进行文本分类的方法

利用机器学习技术进行文本分类的方法文本分类是指将一段文本划分到特定的类别或标签中的任务。

随着互联网的发展,人们需要处理大量的文本数据,因此自动文本分类成为一个重要的研究课题。

而利用机器学习技术进行文本分类的方法受到广泛的关注和应用。

在本文中,我们将介绍几种常用的机器学习技术,并分析它们在文本分类中的应用和效果。

一、朴素贝叶斯分类器朴素贝叶斯分类器是一种基于概率统计原理的分类方法。

它假设特征之间是相互独立的,并利用贝叶斯定理进行分类。

在文本分类中,朴素贝叶斯分类器通常使用词袋模型表示文本,将文本转换为向量形式进行计算。

通过计算每个类别下各个词的条件概率,来判断文本属于哪个类别。

朴素贝叶斯分类器在处理大规模文本数据时具有快速训练和预测的优势,在一些简单的文本分类任务中表现良好。

二、支持向量机(SVM)支持向量机是一种二分类模型,通过构造最优超平面来实现分类。

在文本分类中,支持向量机可以将文本数据映射到高维空间中,并尽可能找到一个超平面,使得不同类别数据的间隔最大化。

支持向量机在文本分类中常使用TF-IDF表示文本特征,通过选择合适的核函数(如线性核、多项式核或高斯核)来建模文本间的相似性。

支持向量机在处理文本分类问题上的表现被广泛认为是一种稳定且有效的方法。

三、深度学习模型近年来,深度学习方法在文本分类任务中取得了很好的效果。

深度学习模型通过多层神经网络的组合,能够自动从原始文本数据中学习到复杂的特征表示。

其中,卷积神经网络(CNN)和循环神经网络(RNN)是常用的深度学习模型。

CNN主要用于文本局部特征的提取,而RNN则可以捕捉到文本中的时序信息。

此外,可以使用预训练的词向量(如Word2Vec或GloVe)来初始化神经网络的词嵌入层,进一步提高分类性能。

深度学习模型对于大规模文本数据的处理能力强大,但也需要更多的计算资源和数据量来支持训练,并且在参数调整和算法优化上相对复杂一些。

四、集成学习方法集成学习方法是通过组合多个分类器,以增强分类性能的方式。

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

朴素贝叶斯分类器Naive Bayesian ClassifierC语言实现信息电气工程学院计算本1102班20112212465马振磊1.贝叶斯公式通过贝叶斯公式,我们可以的知在属性F1-Fn成立的情况下,该样本属于分类C的概率。

而概率越大,说明样本属于分类C的可能性越大。

若某样本可以分为2种分类A,B。

要比较P(A | F1,F2......) 与P(B | F1,F2......)的大小只需比较,P(A)P(F1,F2......| A) ,与P(B)P(F1,F2......| B) 。

因为两式分母一致。

而P(A)P(F1,F2......| A)可以采用缩放为P(A)P(F1|A)P(F2|A).......(Fn|A)因此,在分类时,只需比较每个属性在分类下的概率累乘,再乘该分类的概率即可。

分类属性outlook 属性temperature 属性humidity 属性wind no sunny hot high weakno sunny hot high strongyes overcast hot high weakyes rain mild high weakyes rain cool normal weakno rain cool normal strongyes overcast cool normal strongno sunny mild high weakyes sunny cool normal weakyes rain mild normal weakyes sunny mild normal strongyes overcast mild high strongyes overcast hot normal weakno rain mild high strong以上是根据天气的4种属性,某人外出活动的记录。

若要根据以上信息判断(Outlook = sunny,Temprature = cool,Humidity = high,Wind = strong)所属分类。

P(yes| sunny ,cool ,high ,strong )=P(yes)P(sunny|yes)P(cool |yes)P(high|yes)P(strong|yes)/KP(no| sunny ,cool ,high ,strong )=P(no)P(sunny|no)P(cool |no)P(high|no)P(strong|no)/KK为缩放因子,我们只需要知道两个概率哪个大,所以可以忽略K。

P(yes)=9/14 P(no)=5/14P(sunny|yes)=2/9 P(cool|yes)=1/3 P(high|yes)=1/3 P(strong|yes)=1/3P(sunny|no)=3/5 P(cool|no)=1/5 P(high|no)=4/5 P(strong|no)=3/5P(yes| sunny ,cool ,high ,strong)=9/14*2/9*1/3*1/3*1/3=0.00529P(no| sunny ,cool ,high ,strong )=5/14*3/5*1/5*4/5*3/5=0.20571No的概率大,所以该样本实例属于no分类。

2.数据结构及代码实现1.属性及分类我们限定分类器的属性不大于9个,每个属性拥有不大于9个值。

于是,我们考虑采用一个9 X 9的表格存储属性及其值。

属性1 值1 值2 值3 值4 值5 值6 值7 值8 值9属性2 值1 值2 值3 值4 值5 值6 值7 值8 值9属性3 值1 值2 值3 值4 值5 值6 值7 值8 值9属性4 值1 值2 值3 值4 值5 值6 值7 值8 值9属性5 值1 值2 值3 值4 值5 值6 值7 值8 值9属性6 值1 值2 值3 值4 值5 值6 值7 值8 值9属性7 值1 值2 值3 值4 值5 值6 值7 值8 值9属性8 值1 值2 值3 值4 值5 值6 值7 值8 值9属性9 值1 值2 值3 值4 值5 值6 值7 值8 值9为了调用数据方便,我们把数据从第一行开始储存。

为了充分利用存储空间,我们把第零行储存分类数据。

分类1 分类2 分类3 分类4 分类5 分类6 分类7 分类8 分类9属性1 值1 值2 值3 值4 值5 值6 值7 值8 值9属性2 值1 值2 值3 值4 值5 值6 值7 值8 值9属性3 值1 值2 值3 值4 值5 值6 值7 值8 值9属性4 值1 值2 值3 值4 值5 值6 值7 值8 值9属性5 值1 值2 值3 值4 值5 值6 值7 值8 值9属性6 值1 值2 值3 值4 值5 值6 值7 值8 值9属性7 值1 值2 值3 值4 值5 值6 值7 值8 值9属性8 值1 值2 值3 值4 值5 值6 值7 值8 值9属性9 值1 值2 值3 值4 值5 值6 值7 值8 值9现在,我们可以采用一个10 X 10 的表格来储存数据了。

而每个单元格的内容需要占用一定的储存空间,我们可以用一个三维数组char feature[10][10][10]来表示这种结构的数据。

用来容纳9个属性的9个值。

第0行,我们用来储存分类数据。

而第一行的第一列没有被使用,而其中含有10个char类型的数据我们可以用它来储存属性值的多少。

如图:分类的个数属性1值的个数属性2值的个数........... 属性9值的个数前一段的数据:分类:yes no属性outlook :sunny overcast rain属性temperature:hot mild cool属性humidity:high normal属性wind:strong weak如下图yes nooutlook sunny overcast rainTempera hot mild coolhumidity high normalwind strong weak第0行,第0列2 3 3 2 2代码如下:int x=1,y;printf("请输入属性名称(小于9个字符):");gets(feature[x][0]);printf("该属性有几种值(不多于9个值):");scanf("%c",&feature[0][0][x]); //把属性值储存入feature[0][0][x];feature[0][0][x]-=48; //feature[0][0][x]是由字符格式输入的-48变为数字getchar();system("cls");for(y=1;y<=feature[0][0][x];y++) //根据feature[0][0][x]循环输入,将属性的值存入数组{printf("请输入第%d个值:",y);gets(feature[x][y]);}x++;通过这段代码的循环,输入属性及其值进入feature数组。

通过以下代码将分类数据存入数组第0行。

printf("该事物可以被分为几种类别:");scanf("%c",&feature[0][0][0]); //分类数目存入feature[0][0][0]feature[0][0][0]-=48;getchar();system("cls");for(y=1;y<=feature[0][0][0];y++) //通过循环将分类存入第0行{printf("请输入第%d种类别的名称:",y);gets(feature[0][y]);}2.训练样本每个训练样本的属性最多有9个值,再加上分类一个值,所以,我们采用一个10列的表格储存训练样本数据。

no sunny hot high weakno sunny hot high strongyes overcast hot high weakyes rain mild high weakyes rain cool normal weakno rain cool normal strongyes overcast cool normal strongno sunny mild high weakyes sunny cool normal weakyes rain mild normal weakyes sunny mild normal strongyes overcast mild high strongyes overcast hot normal weakno rain mild high strong同样,每个单元格里限制最多有9个字符,加上一个’\0’终止符,共十个。

而样本数量,也就是行数,可以适当的多一点,暂设为30。

因此我们采用三维数组char sample[30][10][10]来容纳样本数据。

X的初始值为1for(y=1;y<=FeatureNum;y++){printf("特征%s的取值:",feature[y][0]);gets(sample[x-1][y]);}printf("该样本归于哪一种分类:");gets(sample[x-1][0]);x++;SampleNum++; //统计样本的数量3.计算概率class probability{public:int id; //给每个概率值一个定位ID,方便查找double p;probability(){p=0;}};probability prob[729];采用一729个类来存放每个属性值在不同分类下的概率。

至多有9种属性,每个属性至多拥有9个值,而要计算这9个属性的9种值在9种不同分类下的概率,所以我们用了729个类。

并且在构造函数里面初始化概率p 为0.接下来,统计各种分类出现的个数。

9种分类出现的数目,分别储存在SampleClassNum[9]的不同单元格里。

int SampleClassNum[9]={0,0,0,0,0,0,0,0,0};for(c=1;c<=feature[0][0][0];c++)for(x=0;x<SampleNum;x++)if(strcmp(feature[0][c],sample[x][0])==0)SampleClassNum[c-1]++;然后,我们可以开始计算概率了。

for(c=1;c<=feature[0][0][0];c++)for(x=1;x<=FeatureNum;x++)for(y=1;y<=feature[0][0][x];y++){prob[counter].id=c*100+x*10+y;for(i=0;i<SampleNum;i++){if(strcmp(feature[x][y],sample[i][x])==0 &&strcmp(feature[0][c],sample[i][0])==0)prob[counter].p++; //统计某一值在某一分类下的出现个数}prob[counter].p=prob[counter].p/SampleClassNum[c-1]; //出现个数除以分类出//现总数,计算出概率counter++;}每个概率的ID为3位整数,百位记录了分类信息,个位十位分别是,其属性值在表格中的X,Y坐标。

相关文档
最新文档