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朴素贝叶斯算法研究日志相关推荐

  1. 机器学习算法基础——朴素贝叶斯算法

    26.朴素贝叶斯算法原理 联合概率和条件概率 联合概率:包含多个条件,且所有条件同时成立的概率 记作:P(A,B) P(A,B)=P(A)P(B) 条件概率:就是事件A在另外一个事件B已经发生条件下的 ...

  2. 朴素贝叶斯算法matlab实现以及EM算法

    这周,继续学习了朴素贝叶斯算法的一部分知识,看了matlab的贝叶斯分类算法.采用草地潮湿原因模型的一个例子来求证贝叶斯概率以及条件概率.联合概率的分析,详见日志http://blog.sina.co ...

  3. 机器学习实战---朴素贝叶斯算法实现+使用K折交叉验证(代码详解+创新)

    <机器学习实战朴素贝叶斯算法实现+使用K折交叉验证> 未经允许,不得擅自转载! 提供数据集如下(永久有效,需要的自行下载): 链接:https://pan.baidu.com/s/1Sv0 ...

  4. 朴素贝叶斯算法实现垃圾邮件过滤

    朴素贝叶斯算法实现垃圾邮件过滤 1.1 题目的主要研究内容 (1)贝叶斯垃圾邮件过滤技术是一种电子邮件过滤的统计学技术,它使用贝叶斯分类来进行垃圾邮件的判别. (2)贝叶斯分类的运作是借着使用标记(一 ...

  5. 机器学习 第三讲 机器学习基础、机器学习算法(K-近邻算法、朴素贝叶斯算法)

    文章目录 一.机器学习基础 1.明确几点问题 2.机器学习算法的判别依据 3.机器学习算法分类 4.机器学习开发流程 二.机器学习算法 1.sklearn数据集 (1)数据集划分 (2)sklearn ...

  6. 朴素贝叶斯算法的python实现

    朴素贝叶斯 算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对输入数据的准备方式敏感 适用数据类型:标称型数据 算法思想: 朴素贝叶斯 比如我们想判断一个邮件是不是垃圾邮件,那 ...

  7. [Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  8. 朴素贝叶斯算法_机器学习第三篇:详解朴素贝叶斯算法

    一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...

  9. 机器学习第三篇:详解朴素贝叶斯算法

    一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...

最新文章

  1. Python诞生30年,《流畅的Python》作者要来中国了
  2. Xcode10 闪退问题
  3. Mybatis二级缓存原理
  4. 《使用Nessus进行渗透测试》- 简介
  5. php开源问答_PHP基础知识能力问答
  6. linux 上下文切换监控,[Linux] 查看进程的上下文切换pidstat
  7. 作者:刘强(1990-),男,中国科学院自动化研究所博士生
  8. C++函数参数是结构体或者数组(cstdarg/.../va_arg/va_end)
  9. 如何理解操作系统的不确定性_如何创造可信任的机器学习模型?先要理解不确定性...
  10. 易筋SpringBoot 2.1 | 第廿六篇:SpringBoot访问缓存抽象Cache
  11. 亚马逊吸尘器需要提交UL1017测试报告,亚马逊要求提供ISO17025资质机构出具的UL报告
  12. 亚马逊AWS EC2服务器配置教程
  13. 【Html】 Html写静态淘宝页面
  14. 百度网盘四种方法免费提速
  15. E10下64位浏览器与32位浏览器切换教程
  16. 深度学习实现安全帽佩戴的检测
  17. Apache Hive 2.1.1 安装配置超详细过程,配置hive、beeline、hwi、HCatalog、WebHCat等组件...
  18. [无私分享]最新网盘资源搜索站点
  19. linux trac apache,Ubuntu下集成Apache+Trac+Git
  20. 奔腾n6005 怎么样 相当于什么水平

热门文章

  1. mysql以及DBeaver的使用
  2. “华为云企业级Java编程规范”学习笔记
  3. 5GNR漫谈14:TM一致性测试
  4. 拼多多关键词搜索接口,item_search - 根据关键词取拼多多商品列表接口解决方案
  5. Swift - 判等
  6. 故障分析 | MongoDB 5.0 报错 Illegal instruction 解决
  7. Centos7虚拟机下安装配置Tomcat
  8. 数字钱包(IOST)使用指南
  9. 电脑不接扩展屏时,打开应用后,窗口跑到屏幕外,怎末办?
  10. 安装配置群晖 DS918+ NAS及常用技巧