Naive Bayes是一种非常方便,流行且重要的机器学习算法,尤其适用于文本分析和一般分类。在本文中,我将讨论高斯朴素贝叶斯:算法,其实现和应用于微型维基百科数据集(维基百科中给出的数据集)。

算法:

高斯朴素贝叶斯算法是一种概率算法。它涉及到对数据集中的类和给定类的测试数据分别进行先验概率和后验概率的计算。

先验概率的数学公式…eq-1)

所有类的先验概率都使用相同的公式计算。

eq-2)

给定c类的测试数据x的后验概率的数学公式,它是给定c类的测试数据的所有特征的条件概率的乘积 .....eq-2)

但是,如何获得给定类的测试数据特征的条件概率呢?

这由从高斯(正常)分布获得的概率给出。

eq-3)

给定一个类和x_i是一个测试数据特征,得到该测试特征的条件概率的数学表达式,c是一个类和相关的样本方差σ².....eq-3)

最后,使用贝叶斯定理计算给定实例(测试实例)的每个类的条件概率。

给定测试数据x, c_i类条件概率的数学表达式 ... eq-4)

对所有类重复等式4),并且显示最高概率的类最终被声明为预测结果。

从头开始在Python中实现:

如前所述,从头开始编写算法时,除了Numpy(它为Python提供了matlab类型的环境)和列表/字典相关的库之外,没有使用其他库。4个模块实现了高斯朴素贝叶斯二元分类,每个模块执行不同的操作。

=> pre_prob():它通过将标签集y作为输入,按照eq-1)返回2个类的先验概率。Python实现如下:

# Importing necessary libraries...import collections import numpy as npdef pre_prob(y): y_dict = collections.Counter(y) pre_probab = np.ones(2) for i in range(0, 2): pre_probab[i] = y_dict[i]/y.shape[0] return pre_probab

=> mean_var():在给定特征集X和标签集y作为输入的情况下,该函数返回2个类标签(二元分类)的所有特征的均值和方差。Python实现如下:

def mean_var(X, y): n_features = X.shape[1] m = np.ones((2, n_features)) v = np.ones((2, n_features)) n_0 = np.bincount(y)[np.nonzero(np.bincount(y))[0]][0] x0 = np.ones((n_0, n_features)) x1 = np.ones((X.shape[0] - n_0, n_features))  k = 0 for i in range(0, X.shape[0]): if y[i] == 0: x0[k] = X[i] k = k + 1 k = 0 for i in range(0, X.shape[0]): if y[i] == 1: x1[k] = X[i] k = k + 1  for j in range(0, n_features): m[0][j] = np.mean(x0.T[j]) v[0][j] = np.var(x0.T[j])*(n_0/(n_0 - 1)) m[1][j] = np.mean(x1.T[j]) v[1][j] = np.var(x1.T[j])*((X.shape[0]-n_0)/((X.shape[0] - n_0) - 1)) return m, v # mean and variance 

=> prob_feature_class():通过将均值m,方差v和测试数据x作为输入,返回给定类c(eq-2)的测试数据x的后验概率的函数。Python时如下:

def prob_feature_class(m, v, x): n_features = m.shape[1] pfc = np.ones(2) for i in range(0, 2): product = 1 for j in range(0, n_features): product = product * (1/sqrt(2*3.14*v[i][j])) * exp(-0.5 * pow((x[j] - m[i][j]),2)/v[i][j]) pfc[i] = product return pfc

=> GNB():最后通过获取测试实例x(eq-4)来计算2个类中每个类的条件概率。特征集X,标签集y和测试数据x作为输入并返回

  1. 所有特征的2个等级的平均值
  2. 所有特征的2个类的方差
  3. 数据集中2个类的先验概率
  4. 测试数据的后验概率给出了每类2类
  5. 给定这两类中的每一类的测试数据的后验概率
  6. 高斯朴素贝叶斯算法给出的最终预测

GNB()的Python实现如下:

def GNB(X, y, x): m, v = mean_var(X, y) pfc = prob_feature_class(m, v, x) pre_probab = pre_prob(y) pcf = np.ones(2) total_prob = 0 for i in range(0, 2): total_prob = total_prob + (pfc[i] * pre_probab[i]) for i in range(0, 2): pcf[i] = (pfc[i] * pre_probab[i])/total_prob prediction = int(pcf.argmax()) return m, v, pre_probab, pfc, pcf, prediction

高斯朴素贝叶斯在微型数据集中的应用

维基百科中给出的样本性别数据集已用于实施的高斯朴素贝叶斯的应用。

朴素贝叶斯分类器--Dataset(https://en.wikipedia.org/wiki/Naive_Bayes_classifier#Sex_classification)

问题陈述:“ 考虑到身高(以英尺为单位),体重(以磅为单位)和足部尺寸(以英寸为单位),预测该人是男性还是女性 ”

=>数据读取使用Pandas完成,因为数据集包含列的文本标题。

import pandas as pdimport numpy as npdata = pd.read_csv('gender.csv', delimiter = ',')data.head()

=>对Wikipedia中使用的测试实例执行4-module-Gaussian Naive Bayes。

朴素贝叶斯分类器 - 测试(https://en.wikipedia.org/wiki/Naive_Bayes_classifier#Testing)

# converting from pandas to numpy ...X_train = np.array(data.iloc[:,[1,2,3]])y_train = np.array(data['Person'])for i in range(0,y_train.shape[0]): if y_train[i] == "Female": y_train[i] = 0 else: y_train[i] = 1x = np.array([6, 130, 8]) # test instance used in Wikipedia# executing the Gaussian Naive Bayes for the test instance...m, v, pre_probab, pfc, pcf, prediction = GNB(X_train, y_train, x)print(m) # Output given below...(mean for 2 classes of all features)print(v) # Output given below..(variance for 2 classes of features)print(pre_probab) # Output given below.........(prior probabilities)print(pfc) # Output given below............(posterior probabilities)print(pcf) # Conditional Probability of the classes given test-dataprint(prediction) # Output given below............(final prediction)

所有特征(列)的2个类(行)的均值

所有特征(列)的2类(行)的样本方差

类的先验概率, Female and Male

给出两个类别中的每一个的测试数据的后验概率

给出测试数据的2个类的最终条件概率

最终预测

最后,计算和预测结果符合使用相同数据集的Wikipedia中显示的结果。

实现贝叶斯分类器_从头开始在Python中实现高斯朴素贝叶斯相关推荐

  1. python机器学习库sklearn——朴素贝叶斯分类器

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 文档贝叶斯分类器的相关的知 ...

  2. 从零开始学Python【38】--朴素贝叶斯模型(实战部分)

    [前言] 在<从零开始学Python[37]--朴素贝叶斯模型(理论部分)>中我们详细介绍了朴素贝叶斯算法的基本概念和理论知识,在这一期我们继续介绍该算法的实战案例.将会对高斯贝叶斯.多项 ...

  3. 朴素贝叶斯高斯模型_从零开始实现高斯朴素贝叶斯独立贝叶斯模型

    朴素贝叶斯高斯模型 "Why is Google censuring me?!" Claire asked (true story). Sure, she's always bee ...

  4. #第26篇分享:一个文本分类的数据挖掘(python语言:sklearn 朴素贝叶斯NB)(2)

    #sklearn 朴素贝叶斯NB算法常用于文本分类,尤其是对于英文等语言来说,分类效果很好:它常用于垃圾文本过滤.情感预测.推荐系统等:是基于概率进行预测的模型,可以做二分类及多分类( 朴素贝叶斯是个 ...

  5. Python 高斯朴素贝叶斯的优缺点

    关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 Sklearn基于这些分布以及这些分布上的概率估计的改进,为我们提供了四个朴素贝叶斯的分类器 类 含义 naive_bayes.Bernoul ...

  6. Python小案例:朴素贝叶斯分类器

    朴素贝叶斯分类器是一个以贝叶斯定理为基础,广泛应用于情感分类领域的优美分类器.本文我们尝试使用该分类器来解决上一篇文章中影评态度分类. 1.贝叶斯定理 假设对于某个数据集,随机变量C表示样本为C类的概 ...

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

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

  8. python37从零开始学_从零开始学Python【37】--朴素贝叶斯模型(理论部分)

    [知识铺垫] 在介绍如何使用贝叶斯概率公式计算后验概率之前,先回顾一下概率论与数理统计中的条件概率和全概率公式: 如上等式为条件概率的计算公式,表示在已知事件A的情况下事件B发生的概率,其中P(AB) ...

  9. Python实现文本自动分类(朴素贝叶斯方法)

    使用机器学习方法 做文档的自动分类 套路: 1.根据每个文件 生成该文件的一个特征 2.根据特征 选择 分类器 进行文本分类 3.(可选)根据 2 步结果,调整参数/特征等

最新文章

  1. 第十六届全国大学生智能车竞赛线上比赛(广东+西南科技大学)成绩排名与获奖信息
  2. Eclipse(STS) 初次搭建Spring Cloud项目之断路器Hystrix(五)
  3. 浙大python判断两个字符串是否为变位词_python数据结构与算法 变位词
  4. 大数据日知录(一)数据分片与路由
  5. 职场与生活 八条原则 让你不再浪费时间和提高效率
  6. IntelliJ IDEA汉化版jar包
  7. spring小实验 用spring的方式管理JDBC
  8. android 内存检测开源库 翻译,开源 | 哈佛大学NLP组开源神经机器翻译工具包OpenNMT:已达到生产可用水平...
  9. Java基础之三大特性
  10. 被“樊登读书”、“得到”与“混沌大学”围剿的创业者们
  11. excel填充序列_分分钟搞定10万个序号自动填充,拒绝加班,你还在手动输入吗?...
  12. android 打印图片乱码,Android 无线连接WiFi打印机打印图片全部乱码
  13. DRAM Devices Organization
  14. 2019.07.一年级暑假——自动随机生成100以内加减法算术题的python实现
  15. imp oracle错误3114,imp时发生错误ORA-01114
  16. 苹果笔记本用户使用Mac版本微博软件Maipo,如何添加账户与高级授权?
  17. BugkuCTF之misc题之图穷匕见
  18. thinksns java_社交系统ThinkSNS+技术概要
  19. “基于医疗知识图谱的问答系统”代码解析(一)
  20. Unity CPU优化卡顿

热门文章

  1. mysql using btree_mysql 索引中的USING BTREE 的意义
  2. 快速上手Tomcat(eclipse中配置tomcat)
  3. 启动VMware中的虚拟机,报.vmdk”或它所依赖的某个快照磁盘
  4. 开源 区块链_区块链如何补充开源
  5. 详解 | 求你别用效率低下的I/O了,要不试试这种I/O
  6. Bootstrap输入框组中可以使用的元素
  7. Bootstrap 默认栅格系统
  8. 休息是为了更好的出发
  9. 飞利浦css6530b评测,带多种输入模式 无线接收器很方便_飞利浦 CSS6530B/93_音频评测-中关村在线...
  10. map的key可以试一个数组吗?_二维数组的 DP