2018.09.26朴素贝叶斯算法研究日志
2018.09.26朴素贝叶斯算法研究日志
前些天研究的遗传算法遇到瓶颈,所以转而研究朴素贝叶斯,同时也让自己休息一下,多查询遗传算法的文档然后进一步研究。朴素贝叶斯算法是最简单的一种贝叶斯算法。本文仍然使用Java作为主要语言。
首先给出例题:
算法问题描述:打网球
一个热爱锻炼的人统计了自己打网球与天气等因素的数据,统计表如下,
问:那么他在晴天、凉爽、高湿度和大风的天气时会不会打网球?
Day | Outlook | Temperature | Humidity | Wind | Play Tennis |
---|---|---|---|---|---|
D1 | Sunny | Hot | High | Weak | No |
D2 | Sunny | Hot | High | Strong | No |
D3 | Overcast | Hot | High | Weak | Yes |
D4 | Rain | Mind | High | Weak | Yes |
D5 | Rain | Cool | Normal | Weak | Yes |
D6 | Rain | Cool | Normal | Strong | No |
D7 | Overcast | Cool | Normal | String | Yes |
D8 | Sunny | Mild | High | Weak | No |
D9 | Sunny | Cool | Normal | Weak | Yes |
D10 | Rain | Mild | Normal | Weak | Yes |
D11 | Sunny | Mild | Normal | Strong | Yes |
D12 | Overcast | Mild | High | Strong | Yes |
D13 | Overcast | Hot | Normal | Weak | Yes |
D14 | Rain | Mild | High | Strong | No |
贝叶斯公式
我们给出贝叶斯公式如下:
P(Y∣X1,X2,⋯ ,Xn)=P(X1,X2,⋯ ,Xn∣Y)P(Y)P(X1,X2,⋯ ,Xn)P(Y|X_1,X_2,\cdots,X_n)=\frac{P(X_1,X_2,\cdots,X_n|Y)P(Y)}{P(X_1,X_2,\cdots,X_n)}P(Y∣X1,X2,⋯,Xn)=P(X1,X2,⋯,Xn)P(X1,X2,⋯,Xn∣Y)P(Y)
其中,
- P(X1,X2,⋯ ,Xn∣Y)P(X_1,X_2,\cdots,X_n|Y)P(X1,X2,⋯,Xn∣Y):似然概率Likelihood
- P(Y)P(Y)P(Y):先验概率Prior
- P(X1,X2,⋯ ,Xn)P(X_1,X_2,\cdots,X_n)P(X1,X2,⋯,Xn):归一化常数Normalization Constant
该算法就是根据上述公式预测事件发生的可能性。
朴素贝叶斯
假设前提:
- 各个特征是相互独立的,各个特征出现与其出现的顺序无关,如对于给定的Y和XiX_iXi之间条件独立;
- 各个特征地位同等重要。
即保证下式成立:
贝叶斯分类过程:
算法描述
确定特征属性、录入训练样本
【Sample.java】
public class Sample {/*** 数组第一列:* 0:Sunny 1:Overcast 2:Rain* 数组第二列:* 0:Hot 1:Cool 2:Mild* 数组第三列:* 0:High 1:Normal* 数组第四列:* 0:Weak 1:Strong* 数组第五列:* 0:不打球 1:打球*///int sample[][]={{0,0,0,0,0},{0,0,0,1,0},{1,0,0,0,1},{}};int samples[][]={{0,0,1,2,2,2,1,0,0,2,0,1,1,2},{0,0,0,2,1,1,1,2,1,2,2,2,0,2},{0,0,0,0,1,1,1,0,1,1,1,0,1,0},{0,1,0,0,0,1,1,0,0,0,1,1,0,1},{0,0,1,1,1,0,1,0,1,1,1,1,1,0}};public double[] Prior(){Count count = new Count();//计算先验概率for(int i=0;i<14;i++){if (samples[4][i] == 0){count.NoPlay++;}else{count.Play++;}}double[] pPlay=new double[2];pPlay[1]=count.Play/14.0;pPlay[0]=count.NoPlay/14.0;return pPlay;}public double[][][] Likelihood(){Count count = new Count();double[][][] likelihood = new double[4][3][2];int yes=0,no=0;for (int i=0;i<4;i++){for (int k=0;k<3;k++){for (int j=0;j<14;j++){if (samples[i][j]==k & samples[4][j]==1){yes++;}else if(samples[i][j]==k & samples[4][j]==0){no++;}}likelihood[i][k][0]=(double)no/count.NoPlay;likelihood[i][k][1]=(double)yes/count.Play;yes=0;no=0; //置0}}return likelihood;}
}class Count{public int NoPlay,Play;Count(){NoPlay=0;Play=0;}
}
【Main.java】
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.print("输入第一个条件:");int outlook = sc.nextInt();System.out.print("输入第二个条件:");int temperature = sc.nextInt();System.out.print("输入第三个条件:");int humidity = sc.nextInt();System.out.print("输入第四个条件:");int wind = sc.nextInt();Sample sample = new Sample();double prior[] = new double[2];prior = sample.Prior();double[][][] likelihood = new double[4][3][2];likelihood = sample.Likelihood();double p_Play=prior[1];double p_noPlay=prior[0];int kind[] = {outlook,temperature,humidity,wind};for (int i = 0;i<4;i++){for (int j=0;j<4;j++)p_Play *= likelihood[i][kind[j]][1];}for (int i = 0;i<4;i++){for (int j=0;j<4;j++)p_noPlay *= likelihood[i][kind[j]][0];}System.out.println("打球的概率为:"+p_Play);System.out.println("不打球的概率为:"+p_noPlay);if (p_Play>=p_noPlay){System.out.println("这个人今天会打球!");}else{System.out.println("这个人今天不会打球。");}}
}
2018.09.26朴素贝叶斯算法研究日志相关推荐
- 机器学习算法基础——朴素贝叶斯算法
26.朴素贝叶斯算法原理 联合概率和条件概率 联合概率:包含多个条件,且所有条件同时成立的概率 记作:P(A,B) P(A,B)=P(A)P(B) 条件概率:就是事件A在另外一个事件B已经发生条件下的 ...
- 朴素贝叶斯算法matlab实现以及EM算法
这周,继续学习了朴素贝叶斯算法的一部分知识,看了matlab的贝叶斯分类算法.采用草地潮湿原因模型的一个例子来求证贝叶斯概率以及条件概率.联合概率的分析,详见日志http://blog.sina.co ...
- 机器学习实战---朴素贝叶斯算法实现+使用K折交叉验证(代码详解+创新)
<机器学习实战朴素贝叶斯算法实现+使用K折交叉验证> 未经允许,不得擅自转载! 提供数据集如下(永久有效,需要的自行下载): 链接:https://pan.baidu.com/s/1Sv0 ...
- 朴素贝叶斯算法实现垃圾邮件过滤
朴素贝叶斯算法实现垃圾邮件过滤 1.1 题目的主要研究内容 (1)贝叶斯垃圾邮件过滤技术是一种电子邮件过滤的统计学技术,它使用贝叶斯分类来进行垃圾邮件的判别. (2)贝叶斯分类的运作是借着使用标记(一 ...
- 机器学习 第三讲 机器学习基础、机器学习算法(K-近邻算法、朴素贝叶斯算法)
文章目录 一.机器学习基础 1.明确几点问题 2.机器学习算法的判别依据 3.机器学习算法分类 4.机器学习开发流程 二.机器学习算法 1.sklearn数据集 (1)数据集划分 (2)sklearn ...
- 朴素贝叶斯算法的python实现
朴素贝叶斯 算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对输入数据的准备方式敏感 适用数据类型:标称型数据 算法思想: 朴素贝叶斯 比如我们想判断一个邮件是不是垃圾邮件,那 ...
- [Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- 朴素贝叶斯算法_机器学习第三篇:详解朴素贝叶斯算法
一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...
- 机器学习第三篇:详解朴素贝叶斯算法
一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...
最新文章
- Python诞生30年,《流畅的Python》作者要来中国了
- Xcode10 闪退问题
- Mybatis二级缓存原理
- 《使用Nessus进行渗透测试》- 简介
- php开源问答_PHP基础知识能力问答
- linux 上下文切换监控,[Linux] 查看进程的上下文切换pidstat
- 作者:刘强(1990-),男,中国科学院自动化研究所博士生
- C++函数参数是结构体或者数组(cstdarg/.../va_arg/va_end)
- 如何理解操作系统的不确定性_如何创造可信任的机器学习模型?先要理解不确定性...
- 易筋SpringBoot 2.1 | 第廿六篇:SpringBoot访问缓存抽象Cache
- 亚马逊吸尘器需要提交UL1017测试报告,亚马逊要求提供ISO17025资质机构出具的UL报告
- 亚马逊AWS EC2服务器配置教程
- 【Html】 Html写静态淘宝页面
- 百度网盘四种方法免费提速
- E10下64位浏览器与32位浏览器切换教程
- 深度学习实现安全帽佩戴的检测
- Apache Hive 2.1.1 安装配置超详细过程,配置hive、beeline、hwi、HCatalog、WebHCat等组件...
- [无私分享]最新网盘资源搜索站点
- linux trac apache,Ubuntu下集成Apache+Trac+Git
- 奔腾n6005 怎么样 相当于什么水平