失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 分类算法——朴素贝叶斯分类

分类算法——朴素贝叶斯分类

时间:2024-05-06 02:14:11

相关推荐

分类算法——朴素贝叶斯分类

贝叶斯分类是利用概率统计知识进行分类的算法,其分类原理是贝叶斯定理。贝叶斯定理的公式如下:

贝叶斯公式表明,我们可以从先验概率P(A)、条件概率P(B|A)和证据P(B)来计算出后验概率。

朴素贝叶斯分类器就是假设证据之间各个条件相互独立的基础上,根据计算的后验概率选择各类别后验概率最大的类别作为目标证据的类别。

构建朴素贝叶斯分类器的步骤如下:

1、根据训练样例分别计算每个类别出现的概率P(Ai),

2、对每个特征属性计算所有划分的条件概率P(Bi|Ai),

3、对每个类别计算P(B|Ai)*P(Ai),

4、选择3步骤中数值最大项作为B的类别Ak。

在实际编码中,并没有计算各个概率,而是构建了各个属性在各个类别中出现的频次数,根据目标特征计算相应的概率,这样的好处是容易存储和读取,便于使用,具体代码如下:

defbayesian(inX,tranSet,labels):'''贝叶斯分类器:paramtranSet:特征矩阵:paramlabels:类别:return:'''labelsTree={}m,n=tranSet.shapelabelsCount={}xCount=zeros((n,1))foriinarange(m):iflabels[i]notinlabelsTree:labelsTree[labels[i]]={}labelsCount[labels[i]]={}forjinarange(n):ifjnotinlabelsTree[labels[i]]:labelsTree[labels[i]][j]={}#labelsTree[labels[i]][tranSet[i][j]]=labelsTree[labels[i]][tranSet[i][j]].get(labels[i][tranSet[i][j]],0)+1labelsTree[labels[i]][j][tranSet[i,j]]=labelsTree[labels[i]][j].get(tranSet[i,j],0)+1labelsCount[labels[i]][j]=labelsCount[labels[i]].get(j,0)+1ifinX[j]==tranSet[i,j]:xCount[j]=xCount[j]+1pVector={}xProp=(xCount/sum(xCount)).cumprod()[-1]forkeyinlabelsTree.keys():foriinarange(n):pVector[key]=pVector.get(key,1)*labelsTree[key][i].get(inX[i],1)/labelsCount[key].get(i,1)pVector[key]=pVector[key]*sum(array([xforxinlabelsCount[key].values()]))/mreturnpVector,array([xforxinpVector.values()],dtype='float')/xProp

测试代码如下:

fromnumpyimport*importmldata=[['<=30','high','no','fair'],['<=30','high','no','excellent'],['31...40','high','no','fair'],['>40','medium','no','fair'],['>40','low','yes','fair'],['>40','low','yes','excellent'],['31...40','low','yes','excellent'],['<=30','medium','no','fair'],['<=30','low','yes','fair'],['>40','medium','yes','fair'],['<=30','medium','yes','excellent'],['31...40','medium','no','excellent'],['31...40','high','yes','fair'],['>40','medium','no','excellent']]label=['no','no','yes','yes','yes','no','yes','no','yes','yes','yes','yes','yes','no']inX=['<=30','medium','yes','fair']pV=ml.bayesian(array(inX),array(data),array(label))print(pV)

如果觉得《分类算法——朴素贝叶斯分类》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。