朴素贝叶斯分类器设计方案v1.0
朴素贝叶斯分类器的超参数调优方法(十)
朴素贝叶斯分类器的超参数调优方法朴素贝叶斯分类器是一种基于贝叶斯定理的机器学习算法,它在文本分类、垃圾邮件过滤、情感分析等领域有着广泛的应用。
尽管朴素贝叶斯分类器具有简单、高效的特点,但是在实际应用中,对其超参数的调优仍然是一个重要的课题。
本文将介绍一些常见的朴素贝叶斯分类器超参数调优方法,以及它们的优缺点。
1. 数据预处理在进行朴素贝叶斯分类器的超参数调优之前,首先需要进行数据预处理。
数据预处理包括数据清洗、特征提取、特征选择等步骤。
在数据清洗方面,需要处理缺失值、异常值等问题,以确保数据的质量。
在特征提取和选择方面,可以采用词袋模型、TF-IDF等技术,以提取有效的特征并降低特征的维度。
2. 贝叶斯估计朴素贝叶斯分类器的核心是基于贝叶斯定理进行分类。
在贝叶斯估计中,存在一个重要的超参数——平滑参数。
平滑参数的选择对分类器的性能有着重要的影响。
常见的平滑参数包括拉普拉斯平滑、Lidstone平滑等。
在实际应用中,可以通过交叉验证等方法选择最优的平滑参数。
3. 特征选择朴素贝叶斯分类器在特征选择方面有着其独特的优势。
在进行特征选择时,可以采用互信息、卡方检验等方法,以选择对分类器性能有着重要影响的特征。
此外,还可以采用特征组合、特征降维等方法,以提高分类器的效果。
4. 样本平衡在实际应用中,样本不均衡是一个常见的问题。
对于不均衡样本,朴素贝叶斯分类器的性能会受到影响。
因此,在进行超参数调优时,需要考虑样本平衡的问题。
可以采用过采样、欠采样等方法,以提高分类器对不均衡样本的适应能力。
5. 多分类问题朴素贝叶斯分类器通常用于二分类问题,但在一些实际应用中,需要处理多分类问题。
对于多分类问题,需要对朴素贝叶斯分类器进行相应的调优。
可以采用一对一、一对多等方法,以解决多分类问题。
6. 结合其他算法朴素贝叶斯分类器可以与其他算法进行结合,以提高分类器的性能。
例如,可以将朴素贝叶斯分类器与支持向量机、决策树等算法进行融合,以提高分类器的泛化能力。
朴素贝叶斯分类器详解及中文文本舆情分析(附代码实践)
朴素贝叶斯分类器详解及中⽂⽂本舆情分析(附代码实践)本⽂主要讲述朴素贝叶斯分类算法并实现中⽂数据集的舆情分析案例,希望这篇⽂章对⼤家有所帮助,提供些思路。
内容包括: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)。
朴素贝叶斯分类算法的设计与分析
朴素贝叶斯分类算法的设计与分析朴素贝叶斯分类算法是一种常用于文本分类的算法,其核心思想是基于贝叶斯公式和特征条件独立假设,利用已有的样本数据集建立模型,进而对新样本进行分类。
1. 特征提取在分类之前,需要将文本数据转化为可计算的特征向量。
常见的特征提取方法包括词袋模型、TF-IDF等。
其中,词袋模型将一篇文本表示为一个词集合,即将文本中出现的所有单词组合成一个无序的集合;而TF-IDF则是根据某个词在文本中的出现频率和在整个文本集合中的逆文档频率来计算每个词的权重。
2. 模型训练在训练阶段,需要利用带有标签的样本数据集来构建分类器。
一般地,用$D={(x_1,y_1),(x_2,y_2),...,(x_n,y_n)}$表示训练样本集合,其中$x_i$表示文本的特征向量,$y_i$表示该文本所属的类别。
可以利用训练集中出现次数计算每个类别的先验概率$P(y)$,以及对于每个类别$y$,特征向量$x$在该类别下的条件概率$P(x|y)$。
具体而言,对于一个特征向量$x$和类别$y$,其条件概率可以用以下公式来计算:$P(x|y)=P(x_1,x_2,...,x_n|y)=P(x_1|y)*P(x_2|y)*...*P(x_n|y)$其中,特征条件独立假设是指假设在每个类别下,特征之间相互独立。
这个假设在实际情况中并不总是成立,但是由于其简化了模型的复杂度,并且在很多情况下可以得到不错的结果,因此被广泛应用。
3. 模型预测当拥有了训练好的模型之后,就可以对新的文本进行分类。
具体而言,对于一个特定的文本$x$,其所属类别$y$可以用以下公式来计算:$P(y|x) = \frac{P(y)*P(x|y)}{\sum_{y^\prime}P(y^\prime)*P(x|y^\prime)}$其中,分母是归一化项,其目的是保证概率的总和为1。
在实际应用中,通常只需要比较不同类别$y$的后验概率$P(y|x)$,将概率最大的类别作为该文本的分类结果即可。
朴素贝叶斯分类器及Python实现
朴素贝叶斯分类器及Python实现贝叶斯定理贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进⾏修正的定理,在概率论中具有重要地位。
先验概率分布(边缘概率)是指基于主观判断⽽⾮样本分布的概率分布,后验概率(条件概率)是根据样本分布和未知参数的先验概率分布求得的条件概率分布。
贝叶斯公式:P(A∩B) = P(A)*P(B|A) = P(B)*P(A|B)变形得:P(A|B)=P(B|A)*P(A)/P(B)其中P(A)是A的先验概率或边缘概率,称作"先验"是因为它不考虑B因素。
P(A|B)是已知B发⽣后A的条件概率,也称作A的后验概率。
P(B|A)是已知A发⽣后B的条件概率,也称作B的后验概率,这⾥称作似然度。
P(B)是B的先验概率或边缘概率,这⾥称作标准化常量。
P(B|A)/P(B)称作标准似然度。
朴素贝叶斯分类(Naive Bayes)朴素贝叶斯分类器在估计类条件概率时假设属性之间条件独⽴。
⾸先定义x = {a1,a2,...}为⼀个样本向量,a为⼀个特征属性div = {d1 = [l1,u1],...} 特征属性的⼀个划分class = {y1,y2,...}样本所属的类别算法流程:(1) 通过样本集中类别的分布,对每个类别计算先验概率p(y[i])(2) 计算每个类别下每个特征属性划分的频率p(a[j] in d[k] | y[i])(3) 计算每个样本的p(x|y[i])p(x|y[i]) = p(a[1] in d | y[i]) * p(a[2] in d | y[i]) * ...样本的所有特征属性已知,所以特征属性所属的区间d已知。
可以通过(2)确定p(a[k] in d | y[i])的值,从⽽求得p(x|y[i])。
(4) 由贝叶斯定理得:p(y[i]|x) = ( p(x|y[i]) * p(y[i]) ) / p(x)因为分母相同,只需计算分⼦。
朴素贝叶斯分类器
朴素贝叶斯分类方法1朴素贝叶斯分类方法概述朴素贝叶斯分类方法是在严谨的数学理论作支撑和假设分类项的各个属性相互独立的情况下基于贝叶斯定理而得出的一类分简单常用类方法。
假设一个属性对给定类的影响独立于其他属性,当条件独立性假设成立时,朴素贝叶斯分类算法具有最小的误分类率。
2数学知识准备2.1概率空间定义如果是上的一个实值函数,即对每一个,有一个实函数与之对应,并且满足一下三点:非负性规范性可列可加性若是R中的两两不相容的事件,则称是上的一个概率测度, 称为事件A的概率,三元组称为概率空间。
2.2条件概率定义设为一概率空间,,且则称为已知A发生时B的条件概率。
2.3 全概率公式定义设两两不相容,且,则对任何事件。
2.4 贝叶斯公式定义设两两不相容,则对于任何满足的B,,有:3朴素贝叶斯分类方法流程:3.1第一阶段——准备阶段:该阶段为朴素贝叶斯分类做必要的准备。
主要是依据具体情况确定特征属性,并且对特征属性进行适当划分。
然后就是对一部分待分类项进行人工划分,以确定训练样本。
这一阶段的输入是所有的待分类项,输出时特征属性和训练样本。
分类器的质量很大程度上依赖于特征属性及其划分以及训练样本的质量。
3.2第二阶段——分类器训练阶段:主要工作是计算每个类别在训练样本中出现频率以及每个特征属性划分对每个类别的条件概率估计。
输入是特征属性和训练样本,输出是分类器。
3.3第三阶段——应用阶段:这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。
这一阶段也是机械性阶段,由程序完成。
4朴素贝叶斯分类方法详细操作过程:4.1朴素贝叶斯分类或简单贝叶斯分类的工作过程(1)每个数据样本用一个n 维特征向量{}12,,...n X x x x =表示,分别描述对n 个属性A 1,A 2,…A n 样本的n 个度量。
(2)假定有m 个类C 1,C 2,…C m 。
给定一个未知的数据样本X (即没有类标号),分类法将预测X 属于具有最高后验概率(条件X 下)的类。
朴素贝叶斯分类器
朴素贝叶斯分类器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)所属分类。
朴素贝叶斯分类算法演示
基本概念
与ID3分类算法相关的基本概念包括:
信息熵 信息增益
信息熵
熵(entropy,也称信息熵)用来度量一个属性的信 息量。
假定S为训练集,S的目标属性C具有m个可能的类标 号值,C={C1,C2,…,Cm},假定训练集S中,Ci在所 有样本中出现的频率为 (i=1,2,3,…,m),则该训练集S 所包含的信息熵定义为:
Single Married Single Married
125K 100K 70K 120K
婚姻状态
Single, Divorced Married NO > 80K YES
Divorced 95K Married 60K
年收入
< 80K NO
Divorced 220K Single Married Single 85K 75K 90K
分类与回归的区别
分类和回归都有预测的功能,但是:
分类预测的输出为离散或标称的属性; 回归预测的输出为连续属性值;
分类与回归的例子:
预测未来某银行客户会流失或不流失,这是分类任务; 预测某商场未来一年的总营业额,这是回归任务。
分类的步骤
分类的过程描述如下:
1)首先将数据集划分为2部分:训练集和测试集。 2) 第一步:对训练集学习,构建分类模型。
回归分析
回归分析可以对预测变量和响应变量之间的 联系建模。
在数据挖掘环境下,预测变量是描述样本的感兴 趣的属性,一般预测变量的值是已知的,响应变 量的值是我们要预测的。当响应变量和所有预测 变量都是连续值时,回归分析是一个好的选择。
朴素贝叶斯分类器算法
朴素贝叶斯分类器是一种基于贝叶斯定理和特征条件独立性假设的概率分类算法。
它在文本分类、垃圾邮件过滤等领域得到广泛应用。
下面是朴素贝叶斯分类器的基本算法步骤:
数据准备:收集并准备带有标记的训练数据集,包括已知类别的样本以及对应的特征向量。
特征提取:从每个样本中提取出特征,这些特征可以是文本中的单词、词频、关键词等信息,也可以是其他类型的特征。
模型训练:根据训练数据集,计算每个类别的先验概率(即每个类别出现的概率)和每个特征在不同类别下的条件概率。
模型构建:根据训练数据计算得到的先验概率和条件概率构建朴素贝叶斯模型。
测试样本分类:对于未知类别的测试样本,通过计算后验概率来确定其属于哪个类别。
后验概率由贝叶斯定理计算得到,选择具有最大后验概率的类别作为测试样本的分类结果。
评估模型性能:将测试样本的分类结果与真实标签进行比较,计算分类器的准确率、精确率、召回率等指标来评估模型的性能。
需要注意的是,朴素贝叶斯分类器基于特征条件独立性假设,即假设每个特征与其他特征相互独立。
这在某些情况下可能不成立,但朴素贝叶斯分类器仍然可以在实践中表现出良好的性能。
同时,对于连续型特征,通常需要进行概率密度函数估计,如高斯分布等。
朴素贝叶斯分类器
朴素贝叶斯分类器朴素贝叶斯分类方法1朴素贝叶斯分类方法概述朴素贝叶斯分类方法是在严谨的数学理论作支撑和假设分类项的各个属性相互独立的情况下基于贝叶斯定理而得出的一类分简单常用类方法。
假设一个属性对给定类的影响独立于其他属性,当条件独立性假设成立时,朴素贝叶斯分类算法具有最小的误分类率。
2数学知识准备2.1概率空间定义如果是上的一个实值函数,即对每一个,有一个实函数与之对应,并且满足一下三点:非负性规范性可列可加性若是R中的两两不相容的事件,则称是上的一个概率测度, 称为事件A的概率,三元组称为概率空间。
2.2条件概率定义设为一概率空间,,且则称为已知A发生时B的条件概率。
2.3 全概率公式定义设两两不相容,且,则对任何事件。
2.4 贝叶斯公式定义设两两不相容,则对于任何满足的B,,有:3朴素贝叶斯分类方法流程:3.1第一阶段——准备阶段:该阶段为朴素贝叶斯分类做必要的准备。
主要是依据具体情况确定特征属性,并且对特征属性进行适当划分。
然后就是对一部分待分类项进行人工划分,以确定训练样本。
这一阶段的输入是所有的待分类项,输出时特征属性和训练样本。
分类器的质量很大程度上依赖于特征属性及其划分以及训练样本的质量。
3.2第二阶段——分类器训练阶段:主要工作是计算每个类别在训练样本中出现频率以及每个特征属性划分对每个类别的条件概率估计。
输入是特征属性和训练样本,输出是分类器。
3.3第三阶段——应用阶段:这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。
这一阶段也是机械性阶段,由程序完成。
4朴素贝叶斯分类方法详细操作过程:4.1朴素贝叶斯分类或简单贝叶斯分类的工作过程(1)每个数据样本用一个n 维特征向量{}12,,...n X x x x =表示,分别描述对n 个属性A 1,A 2,…A n 样本的n 个度量。
(2)假定有m 个类C 1,C 2,…C m 。
朴素贝叶斯分类算法介绍及python代码实现案例
朴素贝叶斯分类算法介绍及python代码实现案例朴素贝叶斯分类算法1、朴素贝叶斯分类算法原理1.1、概述贝叶斯分类算法是⼀⼤类分类算法的总称贝叶斯分类算法以样本可能属于某类的概率来作为分类依据朴素贝叶斯分类算法是贝叶斯分类算法中最简单的⼀种注:朴素的意思是条件概率独⽴性P(A|x1x2x3x4)=p(A|x1)*p(A|x2)p(A|x3)p(A|x4)则为条件概率独⽴P(xy|z)=p(xyz)/p(z)=p(xz)/p(z)*p(yz)/p(z)1.2、算法思想朴素贝叶斯的思想是这样的:如果⼀个事物在⼀些属性条件发⽣的情况下,事物属于A的概率>属于B的概率,则判定事物属于A通俗来说⽐如,你在街上看到⼀个⿊⼈,我让你猜这哥们哪⾥来的,你⼗有⼋九猜⾮洲。
为什么呢?在你的脑海中,有这么⼀个判断流程:1、这个⼈的肤⾊是⿊⾊ <特征>2、⿊⾊⼈种是⾮洲⼈的概率最⾼ <条件概率:⿊⾊条件下是⾮洲⼈的概率>3、没有其他辅助信息的情况下,最好的判断就是⾮洲⼈这就是朴素贝叶斯的思想基础。
再扩展⼀下,假如在街上看到⼀个⿊⼈讲英语,那我们是怎么去判断他来⾃于哪⾥?提取特征:肤⾊:⿊语⾔:英语⿊⾊⼈种来⾃⾮洲的概率: 80%⿊⾊⼈种来⾃于美国的概率:20%讲英语的⼈来⾃于⾮洲的概率:10%讲英语的⼈来⾃于美国的概率:90%在我们的⾃然思维⽅式中,就会这样判断:这个⼈来⾃⾮洲的概率:80% * 10% = 0.08这个⼈来⾃美国的概率:20% * 90% =0.18我们的判断结果就是:此⼈来⾃美国!其蕴含的数学原理如下:p(A|xy)=p(Axy)/p(xy)=p(Axy)/p(x)p(y)=p(A)/p(x)*p(A)/p(y)* p(xy)/p(xy)=p(A|x)p(A|y)P(类别 | 特征)=P(特征 | 类别)*P(类别) / P(特征)1.3、算法步骤1、分解各类先验样本数据中的特征2、计算各类数据中,各特征的条件概率(⽐如:特征1出现的情况下,属于A类的概率p(A|特征1),属于B类的概率p(B|特征1),属于C类的概率p(C|特征1)......)3、分解待分类数据中的特征(特征1、特征2、特征3、特征4......)4、计算各特征的各条件概率的乘积,如下所⽰:判断为A类的概率:p(A|特征1)*p(A|特征2)*p(A|特征3)*p(A|特征4).....判断为B类的概率:p(B|特征1)*p(B|特征2)*p(B|特征3)*p(B|特征4).....判断为C类的概率:p(C|特征1)*p(C|特征2)*p(C|特征3)*p(C|特征4)..... ......5、结果中的最⼤值就是该样本所属的类别1.4、算法应⽤举例⼤众点评、淘宝等电商上都会有⼤量的⽤户评论,⽐如:1、⾐服质量太差了!!!!颜⾊根本不纯!!!2、我有⼀有种上当受骗的感觉!!!!3、质量太差,⾐服拿到⼿感觉像旧货!!!4、上⾝漂亮,合⾝,很帅,给卖家点赞5、穿上⾐服帅呆了,给点⼀万个赞6、我在他家买了三件⾐服!!!!质量都很差!0 0 0 1 1 0其中1/2/3/6是差评,4/5是好评现在需要使⽤朴素贝叶斯分类算法来⾃动分类其他的评论,⽐如:a、这么差的⾐服以后再也不买了b、帅,有逼格……1.5、算法应⽤流程1、分解出先验数据中的各特征(即分词,⽐如“⾐服”“质量太差”“差”“不纯”“帅”“漂亮”,“赞”……)2、计算各类别(好评、差评)中,各特征的条件概率(⽐如 p(“⾐服”|差评)、p(“⾐服”|好评)、p(“差”|好评) 、p(“差”|差评)……)3、分解出待分类样本的各特征(⽐如分解a: “差” “⾐服” ……)4、计算类别概率P(好评) = p(好评|“差”) *p(好评|“⾐服”)*……P(差评) = p(差评|“差”) *p(差评|“⾐服”)*……5、显然P(差评)的结果值更⼤,因此a被判别为“差评”1.6、朴素贝叶斯分类算法案例⼤体计算⽅法:P(好评 | 单词1,单词2,单词3) = P(单词1,单词2,单词3 | 好评) * P(好评) / P(单词1,单词2,单词3) 因为分母都相同,所以只⽤⽐较分⼦即可--->P(单词1,单词2,单词3 | 好评) P(好评) 每个单词之间都是相互独⽴的---->P(单词1 | 好评)P(单词2 | 好评)P(单词3 | 好评)*P(好评) P(单词1 | 好评) = 单词1在样本好评中出现的总次数/样本好评句⼦中总的单词数P(好评) = 样本好评的条数/样本的总条数同理:P(差评 | 单词1,单词2,单词3) = P(单词1,单词2,单词3 | 差评) * P(差评) / P(单词1,单词2,单词3) 因为分母都相同,所以只⽤⽐较分⼦即可--->P(单词1,单词2,单词3 | 差评) P(差评) 每个单词之间都是相互独⽴的---->P(单词1 | 差评)P(单词2 | 差评)P(单词3 | 差评)*P(差评) 1#!/usr/bin/python2# coding=utf-83from numpy import *45# 过滤⽹站的恶意留⾔侮辱性:1 ⾮侮辱性:06# 创建⼀个实验样本7def loadDataSet():8 postingList = [['my','dog','has','flea','problems','help','please'],9 ['maybe','not','take','him','to','dog','park','stupid'],10 ['my','dalmation','is','so','cute','I','love','him'],11 ['stop','posting','stupid','worthless','garbage'],12 ['mr','licks','ate','my','steak','how','to','stop','him'],13 ['quit','buying','worthless','dog','food','stupid']]14 classVec = [0,1,0,1,0,1]15return postingList, classVec1617# 创建⼀个包含在所有⽂档中出现的不重复词的列表18def createVocabList(dataSet):19 vocabSet = set([]) # 创建⼀个空集20for document in dataSet:21 vocabSet = vocabSet | set(document) # 创建两个集合的并集22return list(vocabSet)2324# 将⽂档词条转换成词向量25def setOfWords2Vec(vocabList, inputSet):26 returnVec = [0]*len(vocabList) # 创建⼀个其中所含元素都为0的向量27for word in inputSet:28if word in vocabList:29# returnVec[vocabList.index(word)] = 1 # index函数在字符串⾥找到字符第⼀次出现的位置词集模型30 returnVec[vocabList.index(word)] += 1 # ⽂档的词袋模型每个单词可以出现多次31else: print"the word: %s is not in my Vocabulary!" % word32return returnVec3334# 朴素贝叶斯分类器训练函数从词向量计算概率35def trainNB0(trainMatrix, trainCategory):36 numTrainDocs = len(trainMatrix)37 numWords = len(trainMatrix[0])38 pAbusive = sum(trainCategory)/float(numTrainDocs)39# p0Num = zeros(numWords); p1Num = zeros(numWords)40# p0Denom = 0.0; p1Denom = 0.041 p0Num = ones(numWords); # 避免⼀个概率值为0,最后的乘积也为042 p1Num = ones(numWords); # ⽤来统计两类数据中,各词的词频43 p0Denom = 2.0; # ⽤于统计0类中的总数44 p1Denom = 2.0 # ⽤于统计1类中的总数45for i in range(numTrainDocs):46if trainCategory[i] == 1:47 p1Num += trainMatrix[i]48 p1Denom += sum(trainMatrix[i])49else:50 p0Num += trainMatrix[i]51 p0Denom += sum(trainMatrix[i])52# p1Vect = p1Num / p1Denom53# p0Vect = p0Num / p0Denom54 p1Vect = log(p1Num / p1Denom) # 在类1中,每个次的发⽣概率55 p0Vect = log(p0Num / p0Denom) # 避免下溢出或者浮点数舍⼊导致的错误下溢出是由太多很⼩的数相乘得到的56return p0Vect, p1Vect, pAbusive5758# 朴素贝叶斯分类器59def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):60 p1 = sum(vec2Classify*p1Vec) + log(pClass1)61 p0 = sum(vec2Classify*p0Vec) + log(1.0-pClass1)62if p1 > p0:63return 164else:65return 06667def testingNB():68 listOPosts, listClasses = loadDataSet()69 myVocabList = createVocabList(listOPosts)70 trainMat = []71for postinDoc in listOPosts:72 trainMat.append(setOfWords2Vec(myVocabList, postinDoc))73 p0V, p1V, pAb = trainNB0(array(trainMat), array(listClasses))74 testEntry = ['love','my','dalmation']75 thisDoc = array(setOfWords2Vec(myVocabList, testEntry))76print testEntry, 'classified as: ', classifyNB(thisDoc, p0V, p1V, pAb)77 testEntry = ['stupid','garbage']78 thisDoc = array(setOfWords2Vec(myVocabList, testEntry))79print testEntry, 'classified as: ', classifyNB(thisDoc, p0V, p1V, pAb)8081# 调⽤测试⽅法----------------------------------------------------------------------82 testingNB()运⾏结果:。
(3条消息)朴素贝叶斯分类器(NaiveBayesianClassifier)
(3条消息)朴素贝叶斯分类器(NaiveBayesianClassifier)写作本博文只为学习与分享知识。
所以如果本系列教程对你有帮助,麻烦不吝在github的项目上点个star吧!非常感谢!本博客是基于对周志华教授所著的《机器学习》的“第7章贝叶斯分类器”部分内容的学习笔记。
朴素贝叶斯分类器,顾名思义,是一种分类算法,且借助了贝叶斯定理。
另外,它是一种生成模型(generative model),采用直接对联合概率P(x,c)建模,以获得目标概率值的方法。
文章目录•预备知识o先验概率与后验概率o贝叶斯定理(Bayesian Theorem)•朴素贝叶斯分类器o何为“朴素”:属性条件独立性假设o分类准则o离散属性与连续属性值的分别处理•例子讲解o拉普拉斯修正(Laplacian correction)预备知识先验概率与后验概率先验概率(摘自维基百科):In Bayesian statistical inference, a prior probability distribution, often simply called the prior, of an uncertain quantity is the probability distribution that would express one's beliefs about this quantity before some evidence is taken into account.翻译:在贝叶斯统计推断论中,一个未确定数目的先验概率分布(一般简称为先验)是一种表达了某人对于该数目的信仰的一种概率分布,这种信仰是没有考虑到一些(当前的)证据的。
解释:通俗来说,对于某一个概率事件,我们都会有基于自己已有的知识,对于这个概率事件会分别以什么概率出现各种结果会有一个预先的估计,而这个估计并未考虑到任何相关因素。
举例来说,假如你考试没及格,老师要求大家拿卷子回家给爸妈签字,按照你已有的对爸妈脾气的了解,以及他们对自己成绩的要求,你在不考虑其它任何因素的情况下,自己已经有了一个对把卷子拿回家给他们签字的后果预估(先验):•被胖揍一顿:70%•被简单地数落一下:20%•被温情地鼓励:10%暂停,让我们再来看看后验概率是什么:In Bayesian statistics, the posterior probability of a random event or an uncertain proposition is the conditional probability that is assigned after the relevant evidence or background is taken into account. "Posterior", in this context, means after taking into account the relevant evidence related to the particular case being examined.翻译:在贝叶斯推断中,一个随机事件的后验概率是指:当与事件相关的一些证据或背景也被考虑进来时的条件概率。
贝叶斯分类器(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)的计算,当然,使⽤这个假设是有代价的,⼀般情况下,⼤量样本的特征之间独⽴这个条件是弱成⽴的,毕竟哲学上说联系是普遍的,所以我们使⽤朴素贝叶斯会降低⼀些准确性;如果实际问题中的事件的各个属性⾮常不独⽴的话,甚⾄是⽆法使⽤朴素贝叶斯的。
朴素贝叶斯分类器
朴素贝叶斯算法案例
朴素贝叶斯算法案例概述朴素贝叶斯算法是一种基于贝叶斯定理的分类算法,它假设特征之间相互独立,从而简化了计算过程。
本文将通过一个案例来详细介绍朴素贝叶斯算法的原理和应用。
朴素贝叶斯算法原理朴素贝叶斯算法是一种概率模型,它通过贝叶斯定理计算后验概率,然后基于最大后验概率进行分类。
其基本原理如下:1.计算先验概率:根据已知数据统计每个类别的先验概率,即每个类别出现的频率。
2.计算似然概率:对于给定的特征向量,计算在各个类别下特征的条件概率。
3.计算后验概率:根据贝叶斯定理,计算给定特征向量的条件下,各个类别的后验概率。
4.选择最大后验概率:根据计算得到的后验概率,选择具有最高概率的类别作为最终分类结果。
朴素贝叶斯算法案例:垃圾邮件分类垃圾邮件分类是朴素贝叶斯算法的典型应用之一。
我们将通过一个垃圾邮件分类的案例来详细讲解朴素贝叶斯算法的应用。
数据准备首先,我们需要准备一份带有标签的训练数据集,该数据集包含一些已分类的垃圾邮件和非垃圾邮件。
我们将邮件内容转化为特征向量表示,并将每封邮件对应的类别作为标签。
特征提取在进行分类之前,我们需要从邮件内容中提取一些特征,以便于算法计算。
常见的特征提取方法包括词袋模型、TF-IDF等。
词袋模型将每个词作为一个特征,TF-IDF用于计算每个词对于邮件分类的重要性。
接下来,我们使用训练数据集来训练朴素贝叶斯分类器。
训练过程包括计算各个类别的先验概率和各个特征在各个类别下的条件概率。
分类预测训练完成后,我们可以使用训练好的朴素贝叶斯分类器进行分类预测。
给定一个新的邮件,我们将其转化为特征向量表示,并计算其在各个类别下的后验概率。
选择具有最高后验概率的类别作为最终分类结果。
模型评估为了评估分类器的性能,我们可以将一部分数据集作为测试集,用来评估分类器在未知数据上的预测准确率。
常用的评估指标包括准确率、精确率、召回率、F1值等。
案例实现步骤载入数据集首先,我们从文件中读取训练数据集和测试数据集。
第3章 朴素贝叶斯分类器
pre=[]#存储预测结果 count_good=count_bad=0 for index in range(len(dataTrain)):
color=dataTrain[index,0] sound = dataTrain[index, 2] lines = dataTrain[index, 3] #统计在好瓜和坏瓜的情况下不同特征的概率 c_good,c_bad=featureFrequency(color,'c',dataTrain,y) p_c_good,p_c_bad=feaConProbability(c_good,c_bad,dataTrain,y) print('颜色概率', p_c_good, p_c_bad)
3.1贝叶斯定理相关概念
一个单变量正态分布密度函数为: 其正态分布的概率密度函数如图所示。
与μ越近的值,其概率越大,反之,其概率值越小。σ描述数据分布的离散程度,σ越 大,数据分布越分散,曲线越扁平;σ越小,数据分布越集中,曲线越瘦高。
3.1贝叶斯决策理论基础
对于多变量的正态分布,假设特征向量是服从均值向量为 态分布,其中,类条件概率密度函数为:
perch_Variance_Light=np.var(perch_train[:,1]) print('鲈鱼长度均值:',perch_Mean_Length) print('鲈鱼亮度均值:',perch_Mean_Light) print('鲈鱼长度方差:',perch_Variance_Length) print('鲈鱼亮度方差:',perch_Variance_Light) print('鲈鱼长度均值:',perch_Mean_Length) print('鲈鱼亮度均值:',perch_Mean_Light) print('鲈鱼长度方差:',perch_Variance_Length) print('鲈鱼亮度方差:',perch_Variance_Light)
朴素贝叶斯分类器应用实例
朴素贝叶斯分类器应用实例## 1. 朴素贝叶斯分类器的工作原理朴素贝叶斯分类器是基于贝叶斯定理的一种简单且高效的分类算法。
其基本原理是通过计算训练样本中各个特征在不同类别下的条件概率,然后利用贝叶斯定理来计算样本属于各个类别的后验概率,最终选择后验概率最大的类别作为样本的分类结果。
具体来说,朴素贝叶斯分类器假设特征之间是条件独立的,即给定类别下各个特征之间是相互独立的。
这个假设在实际应用中往往并不成立,但在很多情况下,朴素贝叶斯分类器依然能取得不错的分类效果。
## 2. 文本分类实例在文本分类领域,朴素贝叶斯分类器常常被用来进行文本的分类。
下面我们通过一个实际的应用实例来展示朴素贝叶斯分类器在文本分类中的应用。
### 2.1 数据准备我们选取新闻数据集作为我们的实验数据,在数据集中,每篇新闻都有一个分类标签,我们的目标是根据新闻的内容将其分类到正确的类别中。
我们首先需要对数据集进行预处理,包括去除停用词、进行分词、构建词袋模型等操作。
我们将数据集划分为训练集和测试集,其中训练集用于训练朴素贝叶斯分类器,测试集用于评估分类器的性能。
### 2.2 特征提取在文本分类中,我们通常将文本表示为向量形式,每个向量代表一篇文本,向量的每个维度对应一个词,在这篇文本中出现过的词对应的维度值为1,否则为0。
这样,我们就将文本转化为了数学可处理的形式。
### 2.3 模型训练我们使用训练集数据对朴素贝叶斯分类器进行训练,计算各个词在不同类别下的条件概率,并计算类别的先验概率。
在训练过程中,我们需要注意平滑处理,以避免概率为0的情况发生。
### 2.4 模型评估在模型训练完成后,我们使用测试集数据来测试分类器的性能。
我们可以计算分类器的准确率、精确率、召回率等指标来评估分类器的性能。
## 3. 结果分析通过对文本分类实例的实验,我们得到了如下结果:准确率为85%,精确率为89%,召回率为82%。
这说明我们训练的朴素贝叶斯分类器在文本分类任务中表现优异,可以进行较为准确地分类。
朴素贝叶斯分类算法的设计与分析
朴素贝叶斯分类算法的设计与分析一、算法设计:1. 数据准备:朴素贝叶斯算法需要一定数量的已标记数据集作为训练样本。
每个样本包含多个特征及其对应的类别标签。
2. 特征提取:特征提取是朴素贝叶斯算法的重要一步。
在文本分类任务中,可以使用词袋模型(Bag of Words)将文本转化为向量表示。
词袋模型忽略了文本中词语之间的顺序和语法,将文本表示为一个词的集合,每个词对应一个特征。
3. 概率计算:朴素贝叶斯算法假设各个特征之间相互独立。
给定一个待分类的样本,计算该样本属于每个类别的概率,并选择概率最大的类别作为分类结果。
具体计算方法为:- 计算每个类别的先验概率,即该类别在训练样本中出现的概率。
- 计算每个特征在每个类别下的条件概率,即在给定类别下该特征出现的概率。
- 将待分类样本的特征带入条件概率计算公式,计算每个类别下该样本的概率。
- 根据贝叶斯定理,将先验概率和条件概率相乘,得到样本属于每个类别的后验概率。
- 选择后验概率最大的类别作为分类结果。
4. 模型训练与分类:通过以上步骤即可得到朴素贝叶斯分类器。
模型训练阶段,将训练样本的特征和类别标签输入朴素贝叶斯分类器,用于估计先验概率和条件概率。
分类阶段,将待分类样本的特征输入分类器,得到分类结果。
二、算法分析:朴素贝叶斯分类算法具有以下优点和特点:1. 算法简单、高效:朴素贝叶斯算法基于贝叶斯定理和特征条件独立性假设,计算简单、快速,适用于大规模数据集和实时分类任务。
2. 低内存消耗:朴素贝叶斯算法只需要存储先验概率和条件概率,不需要存储大量的训练数据,减少内存消耗。
3. 可解释性好:朴素贝叶斯算法将特征之间的条件独立性假设转化为计算上的简化,同时能够给出每个特征对于分类结果的贡献程度,提供解释分类结果的能力。
4. 对小样本领域效果好:朴素贝叶斯算法在小样本领域表现良好,对于特征空间稀疏或者特征之间存在关联性的问题,可以通过特征选择、平滑处理等方法进行优化。
朴素贝叶斯实验
朴素贝叶斯实验实验算法朴素贝叶斯分类器实验【实验名称】朴素贝叶斯实验【实验要求】掌握朴素贝叶斯分类模型应用过程,根据模型要求进行数据预处理,建模,评价与应用;【背景描述】贝叶斯分类是一类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。
而朴素贝叶斯分类是分类中最简单的,也是常见的一种分类方法。
【知识准备】了解贝叶斯分类器模型的使用场景,数据标准。
了解Python/Spark数据处理一般方法。
了解spark 模型调用,训练以及应用方法【实验设备】Windows或Linux 操作系统的计算机。
部署Spark,Python,本实验提供centos6.8环境。
【实验说明】采用UCI机器学习库中的wine数据集作为算法数据,把数据集随机划分为训练集和测试集,分别对模型进行训练和测试。
【实验环境】Spark2.3.1,Pyrhon3.X,实验在命令行pyspark中进行,或者把代码写在py脚本,由于本次为实验,以学习模型为主,所以在命令行中逐步执行代码,以便更加清晰地了解整个建模流程。
【实验步骤】第一步:启动pyspark:命令行中键入pyspark--masterlocal[4],本地模式启动spark与python:第二步:导入用到的包,并读取数据,数据源地址为/opt/algorithm/naiveBayes/wine.txt,具体命令如下所示:frompysparkimportSparkContext,SQLContextimportp yspark.ml.featureaspmfimportpyspark.ml.classificati onaspmcfrompyspark.sql.functionsimportcolimportpysp ark.sql.functionsasfunsqlContext=SQLContext(sc)df_w ine=sc.textFile(ufile:/opt/algorithm/naiveBayes/win e.txt).map(lambdax:str(x).split(,)).map(lambdax:[fl oat(z)forzinx])df_wine_rdd=sqlContext.createDataFra me(df_wine)df_wine_rdd.show()第三步:数据预处理(1).数据集划分(df_wine_rdd_train,df_wine_rdd_test)=df_wine_rdd.ra ndomSplit([7.0,3.0])(2).数据聚合,按ml贝叶斯模型,需要输入label|vos(data)cols=df_wine_rdd.columnsmodel_VA=pmf.VectorAssembler().setInputCols(cols[1:]).setOutput Col(F)VA_train=model_VA.transform(df_wine_rdd_train)VA_test=model_VA.transform(df_wine_rdd_test)VA_tra in.show(20,False)(3).类型编码,把类别变量编码为double型,实际上是让spark明白这是个类别变量,因为ml模型需要以Double作为输入model_lable=pmf.StringIndexer().setInputCol(cols[0] ).setOutputCol(label).fit(VA_train)VA_lable_train=m odel_lable.transform(VA_train)VA_lable_test=model_l able.transform(VA_test)VA_lable_train.show(20,False )第四步:构建模型并进行预测(1).建立模型model=pmc.NaiveBayes(featuresCol="F",labelCol="labe l",predictionCol="pred",probabilityCol="prob",rawPr edictionCol=rawpred,smoothing=1.0).fit(VA_lable_tra in)(2).模型预测prob=model.transform(VA_lable_test)prob.select(labe l,pred,prob,rawpred).show(20,False)第五步:构建模型评估方法arr=prob.select(col(label),col(pred),col(prob),col( rawpred),(col(label)==col(pred)).alias(check)).filt er(col(check)).count()*1.0/prob.count()第六步:输出模型效果print(模型准确率+str(arr*100)+%)第七步:通过Spark-Submit直接提交整个python文件,进行运算/opt/spark-2.3.1/bin/spark-submit/opt/algorithm/nai veBayes/NaiveBayes.py【问题与回答】1、Q:朴素贝叶斯分类器与一般的贝叶斯分类器有什么区别?A:最大的不同是朴素贝叶斯假设特征之间是独立,互不影响。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.数据库基本表格设计
针对贝叶斯分类器所需数据结构设计以下4个表格
新闻类别表:
包括以下3个字段:ID(int),类别编号(int),类别名称(string)
ID
categorynum
category
1
19005
哲学
上表就记录了一条记录,哲学类的编号为19005。
一条记录代表一个新闻类别。不同记录,新闻类别应该保持不同。只有出现新的新闻类别的时候,这个表格才会增加一条记录。
4.增量学习
这里不讨论增加的样本包含新的标签,或者属于新的新闻类别。
当数据样本增加的时候,可以修正统计参数表中对应的参数,分以下几种情况:
1.新增样本中,类别是C1,同样这个样本中出现的标签编号在样本空间中同类别中也出现过。
首先修改,categorynum是C1的所有行的total++.
然后修改这个样本所属类别的出现的概率,P(C1)对应的number++,更新计算概率probability.
一条记录代表一个标签。不同记录,标签名应该保持不同。只有出现新的标签的时候,这个表格才会增加一条记录。
实际应用中,标签库的规模应该会在百万级别的范围之内。因此,ID可以直接采用数据库里自增长的int字段即可。标签编号根据设计的编号规则采用合适的数据字段,比如用纯数字编号,就可采用int存储。标签名采用string类别字段。
样本标签向量:
X = (10,30,57,98,104,25,1980,996,5668,87)
我们定义A = {10,30,57,98,104,25,1980,996,5668,87}。用~A表示所有标签减去A中的剩下的标签集合。
我们计算这个样本属于C1这个类别的概率P0。
P0=logP(C1) + +
统计指定类别中某个标签出现的概率:在样本数据表中,这个类别出现的次数Nc在上面已经统计出来了。只需要统计指定标签出现的次数,根据样本数据表的第3列和第4列统计出指定类别指定标签出现的次数Nc,i。最后概率就是(Nc,i+ 1)/(Nc+ 2)。
3.测试过程
针对每一个测试样本,利用贝叶斯定理计算出这个样本属于类别库里每一个类别的概率值,最后找到最大的那个,就是该样本所属的类别。
5.新增标签
标签新增加一个,那么在标签库表中增加一条记录。
增加含有这个标签的样本放到样本数据表里。
根据新增加的样本类别,按照增量学习中第2种情况计算。
6.新增类别
新闻类别增加一个,那么新闻类别表增加一条记录。
增加这类新闻的训练样本到样本数据表里。
统计参数表中:
1.由于类别增加,更新所有的类出现概率值。样本总数更新,类别总数更新。因此,其它类的出现概率要更新。
如果标签编号为-1.那么这行数据就代表样本空间中,这个类别出现的概率。number就是这个类别出现的次数,total就是总样本数量。
probability= (number + 1)/(total + N)。N代表样本空间中样本类别的种数。即新闻类别表的记录条数。
2.训练过程
标签编号表和类别编号表的存储略过。
1
19
19005
0.0103
30
3000
2
-1
19005
0.05996
3000
50000
如果标签编号不是负数。这条记录表示标签编号为19的这个标签,在类别编号为19005的这个类别中出现的概率为probability。number是标签在这个类别里出现的次数,total就是类别出现的次数。
probability= (number + 1)/(total + 2)(1,2是拉普拉斯修正数)
实际应用中,新闻类别总数数量级应该是很小的(100这个级别)。因此,ID可以直接采用数据库里自增长的int字段即可。类别编号和类别名称可以采用国家标准,采用对应的字段类型。
标签库表:
包括以下3个字段:ID(int),标签编号(int),标签名(string)
ID
labelnum
label
1
19
蜜蜂
蜜蜂这个标签的编号为19
其中P(C1)是类别C1在样本空间中的出现概率。这个值在统计参数表里一定存在的。
是在样本空间中类别C1中标签编号是a出现的概率。这些值在统计参数表如果存在就取出来直接用,如果这个值没有出现,说明样本中,C1类的样本标签编号是a的都没有出现,因此出现的概率就是1– (Nc+ 1)/(Nc+ 2)。
是在样本空间中类别C1中标签编号是a不出现的概率。这些值在统计参数表如果存在,存储的是出现的概率,1-取出来的值就就不出现的概率。如果这个值没有出现,说明样本中,C1类的样本标签编号是a的都没有出现,因此出概率就是(Nc+ 1)/(Nc+ 2)。
2.针对这个新出现的类别,统计样本中这类样本出现的所有标签的概率。以新纪录添加到统计数据表中。
在统计指定类别中,某个标签出现的次数时,就可以根据第三列和第四列统计出来对应的次数。
Hale Waihona Puke 统计参数表:包括以下6个字段:
ID(int),标签编号(int),类别编号(int),概率(float),个数(int),总个数(int)
ID
labelnum
categorynum
probability
number
total
19005
9
1
1230
19005
10
1
679
19005
如果一个样本提取10个关键词,那么表示这一个样本,就需要10条记录,例如上表。其中,样本号和类别编号一样,表示这个样本属于哪一种类,只是这10个关键词的标签编号不同。第一条记录的含义就是,在19005类别中,标签编号为2的标签出现了一次。
如果每一个文本都提取10个关键词,那么在样本库里统计每一个类别的个数时,就统计第四列出现了多少次这个类别编号,然后除以10,就是这个类别出现的次数。考虑到后面可能每一个文本提取的关键词个数发生改变了,那么上述方法就不行了。因此设计记录样本编号。这样统计某个类别出现的次数时,就可以再加上第二列排重即可。
样本数据表:
包括以下4个字段:ID(int),样本号(int),标签编号(int),类别编号(string)
ID
sampleId
labelnum
categorynum
1
1
2
19005
2
1
7
19005
3
1
19
19005
4
1
25
19005
5
1
30
19005
6
1
100
19005
7
1
350
19005
8
1
3790-
样本存储过程:
根据提取每个样本的10个标签,找到这10个标签对应的标签编号,以及这个样本所属类别的编号。把这10条数据存储到样本数据表中。注意,这10个数据的样本编号都一样。
训练过程:
贝叶斯分类器的训练过程,就是在样本中,统计各个种类出现的概率以及标签在类别中出现的概率。
统计类别出现的概率:首先统计出样本所有的类别个数Nk在样本数据表中,统计出样本个数N,找到对应类别以及样本编号不一样的个数,即是这个类别出现的次数Nc。最后概率就是(Nc+1)/(N+Nk).
最后更新这个样本中出现的标签编号对应记录中的number++,更新计算概率probability。
2.新增样本中,类别是C1,但是这个样本里出现了以前C1类中从未出现过的标签编号。
重复上一种情况的操作。
针对这个类里新出现的标签编号。新加一条记录。Number= 1.Total是这个类别出现的总次数。更新计算概率。