java naive方法_朴素贝叶斯方法(Naive Bayes Method)
朴素贝叶斯是一种很简单的分类方法,之所以称之为朴素,是因为它有着非常强的前提条件-其所有特征都是相互独立的,是一种典型的生成学习算法。所谓生成学习算法,是指由训练数据学习联合概率分布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)相关推荐
- 《统计学习方法》—— 朴素贝叶斯方法、详细推导及其python3实现(二)
前言 在上一篇博客中,我们介绍了朴素贝叶斯方法以及详细推导.在这篇博客中,我们将介绍朴素贝叶斯的python3实现代码. 这里,我们将算法复述如下: 输入:数据集 T={(x1,y1),(x2,y2) ...
- 《统计学习方法》—— 朴素贝叶斯方法、详细推导及其python3实现(一)
前言 朴素贝叶斯方法通过构造数据生成分布来预测未知数据的类型,属于生成模型.这里之所以称为"朴素",是因为我们假设数据特征之间具有互相独立的假设. 在这篇博客里,我们将介绍朴素贝叶 ...
- 朴素贝叶斯方法在旋转机械故障诊断中的应用
目录 前言 1 贝叶斯和朴素贝叶斯 1.1 贝叶斯定理 1.2 朴素贝叶斯 2 分类 3 朴素贝叶斯分类 3.1 准备阶段 3.2 训练阶段 3.3 应用阶段 4 旋转机械故障诊断案例 4.1 灵活朴 ...
- 鸢尾花python贝叶斯分类_高斯朴素贝叶斯方法进行鸢尾花分类
贝叶斯方法完整代码 import seaborn as sns iris = sns.load_dataset('iris') X_iris = iris.drop('species', axis=1 ...
- java mllib 算法_朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)
朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...
- 【数据挖掘实验】利用朴素贝叶斯方法对百万搜狐新闻文本数据进行分类
一.概述 本实验做的是一个很常见的数据挖掘任务:新闻文本分类. 语料库来自于搜狗实验室2008年和2012年的搜狐新闻数据, 下载地址:https://www.sogou.com/labs/resou ...
- 机器学习-胯下运球之Naive Bayes<朴素贝叶斯法>
Naive Bayes 朴素贝叶斯法 It's a way to find the probability of an event using the probability of other eve ...
- python朴素贝叶斯分布对数据的要求_统计学习方法与Python实现(三)——朴素贝叶斯法...
统计学习方法与Python实现(三)--朴素贝叶斯法 1.定义 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布.然 ...
- bayes什么意思_什么是朴素贝叶斯法?
1) 朴素贝叶斯法(naive Bayes)基于什么理论? 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 2) 朴素贝叶斯法的过程是怎样的? 对于给定的训练数据集,首先基于特征条件独立假 ...
最新文章
- centos6.3下yum安装redis
- java 数据结构容器之HashSet
- request获取数据3种方法
- Packagist发布个人的Composer包
- android 按下缩小效果松开恢复_Android自定义ScrollView实现放大回弹效果
- url编码函数encodeURI和encodeURIComponent
- php测试系统登录超时,thinkphp后台检测用户登录超时的实现方法
- 《原神》移动端总收入达8.74亿美元
- Android px pt dp sp...
- mysql创建表设置数值范围,MySQL创建数据表时设定引擎MyISAM/InnoDB操作
- Android 爆高危漏洞,华为小米皆中招;第三代苹果 AirPods 来了;SQLite 3.30.0 发布 | 极客头条...
- HDU1262 寻找素数对
- python爬虫外贸客户_python实战成功爬取海外批发商价格信息并写入记事本
- Admin.Admin/Login --- 后台项目中的管理员及登录模块
- 二叉树前中后序遍历及其本质
- 计算机流程图代表判断的是什么意思,算法流程图符号含义有哪些?用奇偶数判断算法流程图理解...
- Ubuntu下如何截屏
- 不属于项目管理常用计算机模块的事,管理信息系统题库及答案(4)
- Python_解一元二次方程
- ssm毕设项目基于的少儿编程学习系统2lsiy(java+VUE+Mybatis+Maven+Mysql+sprnig)
热门文章
- python 计算每日累计_一颗韭菜的自我修养:用 Python 分析下股市,练练手
- 需求分析师的基本功:逻辑思维、逻辑分析与逻辑表达
- 【2016年第1期】从政策驱动到技术践行:大数据开辟可持续发展研究新途径
- JAVA——附加作业2——情人节送花
- 跟随我在oracle学习php(51)
- python-标示符和关键字
- WebSocket笔记(一) 初步认识
- idea maven dependencies 总是报红
- 【转】SyntaxError: Non-ASCII character ‘\xe5′ in file
- C# Note5:使用相对路径读取文件