朴素贝叶斯(有实例,matlab实现)
来源:互联网 发布:正规淘宝刷销量平台 编辑:程序博客网 时间:2024/06/08 18:59
1 贝叶斯定理
(1)P(H|X):在条件X下,H的后验概率。对于一封具体的邮件,它是垃圾邮件的概率
(2)P(H):只与总体概率分布有关,与抽样无关,是先验概率。在大量的邮件中(大总体)。垃圾邮件的概率
(3):有一封具体的邮件,它是垃圾邮件的概率=(在已知垃圾邮件中包含已给邮件某种特征的概率*垃圾邮件的先验概率)/其特征出现的先验概率
2 朴素贝叶斯,只做最原始的假设:特征相互独立假设
当得到的某个时,可以将其删除,也可以采用拉普拉斯校准法,将每个计数加一,避免概率值为0。
例:以下是数据集,我们要预测是否购买电脑,选取了4个属性,同时将数据集重新编码。
在matlab中运行该程序,得到testdata=[1 3 1 2]这一个样本应分为第一类,也就是说在学生当中,年龄小但经济实力好,当然学生信用基本都好,他们购买电脑可能性大。由于数据量少,正确率不做分析。
clear;clc;load('buycomputer.mat');load('class.mat');M=size(data);count1=0;count2=0;m=M(1);n=M(2);for i=1:n c = size(unique(data(:,i))); b(i)=c(1);endcount_1=zeros(n,max(b));%n为属性个数,max(b)为各个属性的最大取值数量,因为要考虑属性的不平衡count_2=zeros(n,max(b));data=double(data);for i=1:m x=data(i,:); if class(i)==1 count1=count1+1; for j=1:n %指示第j个属性 for k=1:b(j) %第j个属性为哪个值 if x(j)==k count_1(j,k)=count_1(j,k)+1; break; end end end elseif class(i)==2 count2=count2+1; for j=1:n %指示第j个属性 for k=1:b(j) %第j个属性为哪个值 if x(j)==k count_2(j,k)=count_2(j,k)+1; break; end end end endendy1=count1/m;y2=count2/m;for i=1:4 for j=1:b(i) y_1(i,j)=count_1(i,j)/count1; y_2(i,j)=count_2(i,j)/count2; endendy_1=y_1+1;y_2=y_2+1;testdata=[1 3 1 2];w=size(testdata,1);for i=1:w test=testdata(i,:); p1=y1*y_1(1,test(1))*y_1(2,test(2))*y_1(3,test(3))*y_1(4,test(4)); p2=y2*y_2(1,test(1))*y_2(2,test(2))*y_2(3,test(3))*y_2(4,test(4)); if p1>p2 ans=1 else ans=2 endendans = 1
3 总结
贝叶斯算法可用于各种分类场景,但更常见的是应用于文本挖掘,这得益于它可以处理具有大量特征的多分类问题,比如垃圾邮件的分类,网页的自动分类等。但由于有前提假设在先,若在实际场景中违背了这假设,将会影响正确率,当然可以通过增大样本量来提高正确率,但如果样本已无法增加,就应该考虑其他方法。还有一个问题是样本的数据类型,若是连续的,可以将其转化为分类变量,但界限如何划分应着重考虑;也可直接使用连续变量计算概率方法求解。
阅读全文
0 0
- 朴素贝叶斯(有实例,matlab实现)
- 朴素贝叶斯实现垃圾邮件分类------matlab实现
- 模式识别(七):MATLAB 实现朴素贝叶斯分类器
- 朴素贝叶斯分类器:MATLAB工具箱实现
- MATLAB 朴素贝叶斯 工具包
- 朴素贝叶斯算法实现分类以及Matlab实现
- 朴素贝叶斯算法实现分类问题(三类)matlab代码
- 逻辑回归和朴素贝叶斯算法实现二值分类(matlab代码)
- 朴素贝叶斯算法matlab实现以及EM算法
- 朴素贝叶斯算法matlab实现以及EM算法
- 朴素贝叶斯(Python实现)
- 6.2、朴素贝叶斯实例
- 朴素贝叶斯判别法--Matlab
- 朴素贝叶斯的理解实例
- 朴素贝叶斯算法 & 应用实例
- 朴素贝叶斯算法 & 应用实例
- 朴素贝叶斯实现文本分类(1)
- 朴素贝叶斯分类器(Python实现)
- STM32之ADC实例(基于DMA方式)
- IntelliJ IDEA下"Cannot resolve symbol 'log'"的解决方法
- 某公司Java面试题
- 时间戳总结
- C++ 紫薯 6.4 图————用DFS求联通块
- 朴素贝叶斯(有实例,matlab实现)
- Spring 在xml配置里配置事务
- js 身份证验证
- cross entropy,logistic loss 和 KL-divergence的关系和区别
- BAT的AI Lab的不同之处
- Python函数式编程-map()、zip()、filter()、reduce()、lambda()
- 我是小李子,一个前端小白!
- qq UDP TCP 消息 学习
- 微信小程序wxss设置样式