朴素贝叶斯是一种很简单的分类方法,之所以称之为朴素,是因为它有着非常强的前提条件-其所有特征都是相互独立的,是一种典型的生成学习算法。所谓生成学习算法,是指由训练数据学习联合概率分布P(X,Y),然后求得后验概率P(X|Y)。具体来说,利用训练数据学习P(X|Y)和p(Y)的估计,得到联合概率分布:

概率估计可以是极大似然估计,或者贝叶斯估计。

假设输入 X 为n维的向量集合,输出 Y 为类别,X 和 Y 都是随机变量。P(X,Y)是X和Y的联合概率分布,训练数据集为:

首先,我们要明确我们求解的目标是:,即给定某个输入X,我们要判断其所属类别Ck。由概率论知识,我们有:

其中,

代入公式得:

这是朴素贝叶斯分类的基本公式。于是,朴素贝叶斯分类器可以表示为

由于,分母对所有的Ck都是相同的,所以

那么如果给定一个输入 X,我们只需要找到一个类别Ck,使得最大。那么Ck,就是 X 的最佳类别了。

下面我们来讲讲朴素贝叶斯法的参数估计,为什么要估计朴素贝叶斯的参数呢,这些参数是什么?首先,我们要明确。现实中,给定我们一批数据,我们就知道其分布,但是具体的数据分布的概率我们是不知道的。也就是说先验概率和条件概率我们是不知道的,这就需要我们来利用其数据的分布估计其先验概率和条件概率了。统计学习中最常用的参数估计就是极大似然估计了,这里我们也可以用贝叶斯估计,其实就是在极大似然估计基础上添加了拉普拉斯平滑(Laplace smoothing)。

由于极大似然估计之前已经讲到过,这里公式我也没有具体来推,所以先验概率和条件概率直接给出来。

先验概率P(Y = Ck)和条件概率的极大似然估计如下:

这样,给定具体的数据,我们就可以估计其先验概率和条件概率,进而计算出后验概率得到所属类别。

同样,贝叶斯估计和极大似然估计差不多,贝叶斯估计只是在极大似然估计上添加了一个拉普拉斯平滑。具体如下:

条件概率的贝叶斯估计如下:

先验概率的贝叶斯估计如下:

下面来给出一个简单的朴素贝叶斯实现代码,代码比较容易理解。只是课本上给出的特征是离散的,而code里面的特征是连续的。原理上其实是一样一样的~

1: % NAIVE BAYES CLASSIFIER

2:

3: clear

4: tic

5: disp('--- start ---')

6:

7: distr='normal';

8: distr='kernel';

9:

10: % read data

11: White_Wine = dataset('xlsfile', 'White_Wine.xlsx');

12: X = double(White_Wine(:,1:11));

13: Y = double(White_Wine(:,12));

14:

15: % Create a cvpartition object that defined the folds

16: c = cvpartition(Y,'holdout',.2);

17:

18: % Create a training set

19: x = X(training(c,1),:);

20: y = Y(training(c,1));

21: % test set

22: u=X(test(c,1),:);

23: v=Y(test(c,1),:);

24:

25: yu=unique(y);

26: nc=length(yu); % number of classes

27: ni=size(x,2); % independent variables

28: ns=length(v); % test set

29:

30: % compute class probability

31: for i=1:nc

32: fy(i)=sum(double(y==yu(i)))/length(y);

33: end

34:

35: switch distr

36:

37: case 'normal'

38:

39: % normal distribution

40: % parameters from training set

41: for i=1:nc

42: xi=x((y==yu(i)),:);

43: mu(i,:)=mean(xi,1);

44: sigma(i,:)=std(xi,1);

45: end

46: % probability for test set

47: for j=1:ns

48: fu=normcdf(ones(nc,1)*u(j,:),mu,sigma);

49: P(j,:)=fy.*prod(fu,2)';

50: end

51:

52: case 'kernel'

53:

54: % kernel distribution

55: % probability of test set estimated from training set

56: for i=1:nc

57: for k=1:ni

58: xi=x(y==yu(i),k);%the feature of dimension-k with respect to label yu(i)

59: ui=u(:,k);

60: fuStruct(i,k).f=ksdensity(xi,ui);

61: end

62: end

63: % re-structure

64: for i=1:ns

65: for j=1:nc

66: for k=1:ni

67: fu(j,k)=fuStruct(j,k).f(i);

68: end

69: end

70: P(i,:)=fy.*prod(fu,2)';

71: end

72:

73: otherwise

74:

75: disp('invalid distribution stated')

76: return

77:

78: end

79:

80: % get predicted output for test set

81: [pv0,id]=max(P,[],2);

82: for i=1:length(id)

83: pv(i,1)=yu(id(i));

84: end

85:

86: % compare predicted output with actual output from test data

87: confMat=myconfusionmat(v,pv);

88: disp('confusion matrix:')

89: disp(confMat)

90: conf=sum(pv==v)/length(pv);

91: disp(['accuracy = ',num2str(conf*100),'%'])

92:

93: toc

1: function confMat=myconfusionmat(v,pv)

2:

3: yu=unique(v);

4: confMat=zeros(length(yu));

5: for i=1:length(yu)

6: for j=1:length(yu)

7: confMat(i,j)=sum(v==yu(i) & pv==yu(j));

8: end

9: end

如果想要实验数据的话,请在博客下面评论区域注明,我看到了会第一时间上传。

java naive方法_朴素贝叶斯方法(Naive Bayes Method)相关推荐

  1. 《统计学习方法》—— 朴素贝叶斯方法、详细推导及其python3实现(二)

    前言 在上一篇博客中,我们介绍了朴素贝叶斯方法以及详细推导.在这篇博客中,我们将介绍朴素贝叶斯的python3实现代码. 这里,我们将算法复述如下: 输入:数据集 T={(x1,y1),(x2,y2) ...

  2. 《统计学习方法》—— 朴素贝叶斯方法、详细推导及其python3实现(一)

    前言 朴素贝叶斯方法通过构造数据生成分布来预测未知数据的类型,属于生成模型.这里之所以称为"朴素",是因为我们假设数据特征之间具有互相独立的假设. 在这篇博客里,我们将介绍朴素贝叶 ...

  3. 朴素贝叶斯方法在旋转机械故障诊断中的应用

    目录 前言 1 贝叶斯和朴素贝叶斯 1.1 贝叶斯定理 1.2 朴素贝叶斯 2 分类 3 朴素贝叶斯分类 3.1 准备阶段 3.2 训练阶段 3.3 应用阶段 4 旋转机械故障诊断案例 4.1 灵活朴 ...

  4. 鸢尾花python贝叶斯分类_高斯朴素贝叶斯方法进行鸢尾花分类

    贝叶斯方法完整代码 import seaborn as sns iris = sns.load_dataset('iris') X_iris = iris.drop('species', axis=1 ...

  5. java mllib 算法_朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)

    朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...

  6. 【数据挖掘实验】利用朴素贝叶斯方法对百万搜狐新闻文本数据进行分类

    一.概述 本实验做的是一个很常见的数据挖掘任务:新闻文本分类. 语料库来自于搜狗实验室2008年和2012年的搜狐新闻数据, 下载地址:https://www.sogou.com/labs/resou ...

  7. 机器学习-胯下运球之Naive Bayes<朴素贝叶斯法>

    Naive Bayes 朴素贝叶斯法 It's a way to find the probability of an event using the probability of other eve ...

  8. python朴素贝叶斯分布对数据的要求_统计学习方法与Python实现(三)——朴素贝叶斯法...

    统计学习方法与Python实现(三)--朴素贝叶斯法 1.定义 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布.然 ...

  9. bayes什么意思_什么是朴素贝叶斯法?

    1) 朴素贝叶斯法(naive Bayes)基于什么理论? 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 2) 朴素贝叶斯法的过程是怎样的? 对于给定的训练数据集,首先基于特征条件独立假 ...

最新文章

  1. centos6.3下yum安装redis
  2. java 数据结构容器之HashSet
  3. request获取数据3种方法
  4. Packagist发布个人的Composer包
  5. android 按下缩小效果松开恢复_Android自定义ScrollView实现放大回弹效果
  6. url编码函数encodeURI和encodeURIComponent
  7. php测试系统登录超时,thinkphp后台检测用户登录超时的实现方法
  8. 《原神》移动端总收入达8.74亿美元
  9. Android px pt dp sp...
  10. mysql创建表设置数值范围,MySQL创建数据表时设定引擎MyISAM/InnoDB操作
  11. Android 爆高危漏洞,华为小米皆中招;第三代苹果 AirPods 来了;SQLite 3.30.0 发布 | 极客头条...
  12. HDU1262 寻找素数对
  13. python爬虫外贸客户_python实战成功爬取海外批发商价格信息并写入记事本
  14. Admin.Admin/Login --- 后台项目中的管理员及登录模块
  15. 二叉树前中后序遍历及其本质
  16. 计算机流程图代表判断的是什么意思,算法流程图符号含义有哪些?用奇偶数判断算法流程图理解...
  17. Ubuntu下如何截屏
  18. 不属于项目管理常用计算机模块的事,管理信息系统题库及答案(4)
  19. Python_解一元二次方程
  20. ssm毕设项目基于的少儿编程学习系统2lsiy(java+VUE+Mybatis+Maven+Mysql+sprnig)

热门文章

  1. python 计算每日累计_一颗韭菜的自我修养:用 Python 分析下股市,练练手
  2. 需求分析师的基本功:逻辑思维、逻辑分析与逻辑表达
  3. 【2016年第1期】从政策驱动到技术践行:大数据开辟可持续发展研究新途径
  4. JAVA——附加作业2——情人节送花
  5. 跟随我在oracle学习php(51)
  6. python-标示符和关键字
  7. WebSocket笔记(一) 初步认识
  8. idea maven dependencies 总是报红
  9. 【转】SyntaxError: Non-ASCII character ‘\xe5′ in file
  10. C# Note5:使用相对路径读取文件