首页 > 编程语言 >[机器学习] sklearn朴素贝叶斯算法

[机器学习] sklearn朴素贝叶斯算法

时间:2022-12-19 22:56:28浏览次数:64  
标签:脚掌 sklearn 贝叶斯 算法 身高 朴素 times

date: 2018-04-19 00:35:22 +0800                 
tags:
    - 机器学习
    - Python

朴素贝叶斯算法是来利用统计学中的条件概率来进行分类的一种算法。贝叶斯定理和特征条件独立假设就是朴素贝叶斯的两个重要理论基础。

贝叶斯定理

贝叶斯定理如下:

因此上述的公式可以变为

朴素贝叶斯计算

P(B)计算公式如下,由公式可知P(B)为标准化常量,因此P(B)在朴素贝叶斯概率计算中可以省略。因为朴素贝叶斯算法是分类算法,通过比较各个情况发生下的概率的大小,来确定最后的分类,去掉P(B)不影响最后结果。

\[P(B)=\sum_{i=1}^{n}P(x|D_{i})P(D_{i}) \]

又因为朴素贝叶斯算法对条件概率分布作出了独立性的假设。即\(x_{1},x_{2},...,x_{n}\)相互独立则

\[P(x|D_{j})=P(x_{1},x_{2},...,x_{n}|D_{j})=\prod_{i=1}^{n}P(x_{i}|D_{j}) \]

因此朴素贝叶斯算法的分类函数\(f(x)\)可以表示为

\[f(x)=P(D_{j}|x)=argmax P(D_{j})\prod_{i=1}^{n}P(x_{i}|D_{j}) \]

关于朴素贝叶斯分类,根据\(P(x_{i}|y_{k}),P(y_{k})\)的不同计算方法,sklearn库中主要以下三种计算模型:

  • 高斯朴素贝叶斯,主要基于高斯概率密度公式用于分类拟合
  • 多项式朴素贝叶斯,主要用于高维度向量分类
  • 伯努利朴素贝叶斯,主要针对布尔型类型进行分类

高斯朴素贝叶斯计算

当特征X是连续变量的时候,通常假定所有特征取值符合正态分布。用高斯朴素贝叶斯计算概率,即:

\[P(x_{i}|D_{j})=\frac{1}{\sqrt{2\pi\sigma_{ {j,k}}^{2}}}e^{-\frac{(x_{i}-\mu_{ {j,k}})^{2}}{2 \sigma_{ {j,k}}^{2}}} \]

例如下表为一组人类身体特征统计表:

性别 身高(英尺) 体重(磅) 脚掌(英寸)
6 180 12
5.92 190 11
5.58 170 12
5.92 165 10
5 100 6
5.5 150 8
5.42 130 7
5.75 150 9

已知某人身高6英尺,体重130磅,脚掌8英寸,请问该人是男是女。根据前面的朴素贝叶斯分类公式,有:

\[f(x)=P(性别) \times P(身高,体重,脚掌|性别) = P(性别) \times P(身高|性别) \times P(体重|性别) \times P(脚掌|性别) \]

由于身高、体重、脚掌都是连续变量,不能采用离散变量的方法计算概率。而且由于样本太少,所以也无法分成区间计算。这时,可以假设男性和女性的身高、体重、脚掌都是正态分布,通过样本计算出均值和方差,也就是得到正态分布的密度函数。有了密度函数,就可以把值代入,算出某一点的密度函数的值。比如,男性的身高是均值5.855、方差0.035的正态分布。所以,男性的身高为6英尺的概率的相对值等于1.5789(大于1并没有关系,因为这里是密度函数的值,只用来反映各个值的相对可能性)。

例如

\[ P(男) \times P(身高=6|男) \times P(体重=130|男) \times P(脚掌=8|男) = 0.5 \times 1.57888 \times 5.99 \times e^{-6} \times 0.001311 = 6.1984 \times e^{-9}\]

\[P(女) \times P(身高=6|女) \times P(体重=130|女) \times P(脚掌=8|女) = 5.3778 \times e^{-4} \]

可以看到,女性的概率比男性要高出将近10000倍,所以判断该人为女性。sklearn中对应的函数为GaussianNB(),代码如下

import numpy as np
from sklearn.naive_bayes import GaussianNB
 
X = np.array([[6 , 5.92, 5.58, 5.92, 5, 5.5, 5.42, 5.75],
            [180, 190, 170, 165, 100, 150, 130, 150],
            [12, 11, 12, 10, 6, 8, 7, 9]])
X = X.T
y = np.array([-1, -1, -1, -1, 1, 1, 1, 1]) #-1表示男,1表示女
 
clf = GaussianNB().fit(X, y)
 
#预测
p = [[6, 130, 8]]
print(clf.predict_proba(p)) #输出各个标签的概率值,取最大的概率值为输出标签
print(clf.predict(p)) #结果为1

函数其他参数改动可参考官网文档:sklearn.naive_bayes.GaussianNB。接下来介绍其他几种模型结构。

多项式模型

\[P(D_{j})=\frac{N_{D_{j}}+\alpha}{N+k\alpha} \]

\(N\)是总样本个数,\(k\)是类别D中总的类别个数(j=[1, k]),\(N_{D_{j}} \)为\(D_{j}\)的样本个数,α为平滑值,α=[0,1]

\[P(x_{i}|D_{j})=\frac{N_{D_{j},x_{i}}+\alpha}{N_{D_{j}}+(n_{x_{i}})\alpha} \]

\(n_{x_{i}}\)是特征x的维数,\(N_{D_{j},x_{i}}\)是类别\(N_{D_{j}}\)的样本中,第\(i\)维特征的值为\(x_{i}\)的样本个数。sklearn中对应的函数为MultinomialNB,类似于GaussianNB()。代码如下

clf = MultinomialNB().fit(X, y)

函数其他参数改动可参考官网文档:sklearn.naive_bayes.MultinomialNB

伯努利模型

伯努利模型基于以下公式:

  • 当\(x_{i}=1, P(x_{i}|D_{j})=P(x_{i}=1|D_{j})\)
  • 当\(x_{i}=0, P(x_{i}|D_{j})=1-P(x_{i}=1|D_{j})\)

其中\(x_{i}\)只能为0或者-1

sklearn中对应的函数为BernoulliNB,类似于GaussianNB()。代码如下

from sklearn.naive_bayes import BernoulliNB
import numpy as np
 
X = np.random.randint(2, size=(6, 100))
Y = np.array([1, 2, 3, 4, 4, 5])
 
clf = BernoulliNB().fit(X, Y)
p = [X[2]]
print(clf.predict(p)) #[3]

函数其他参数改动可参考官网文档:sklearn.naive_bayes.BernoulliNB

想要了解更多知识见朴素贝叶斯理论推导与三种常见模型

标签:脚掌,sklearn,贝叶斯,算法,身高,朴素,times
From: https://www.cnblogs.com/luohenyueji/p/16993306.html

相关文章

  • 协同过滤算法:在线推荐系统如何工作?
    摘要:个性化推荐系统为电子商务网站提供了一个强大的营销工具,而协同过滤技术被认为是最有前途的个性化推荐技术之一。文中主要介绍了亚马逊的协同过滤推荐系统,并且对比了Fac......
  • 详解逻辑回归与评分卡-用逻辑回归制作评分卡-分箱【菜菜的sklearn课堂笔记】
    视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili分训练集和测试集fromsklearn.model_selectionimporttrain_te......
  • [机器学习] sklearn决策树、随机森林、隐马尔可夫模型
    date:2018-04-1923:36:16+0800tags:-机器学习-Python决策树决策树(DecisionTree)是一种用于处理分类和回归问题的无监督学习算法。如......
  • 数据结构与算法概念
    目录引入概念第一次尝试算法的提出算法的概念算法的五大特性第二次尝试算法效率衡量执行时间反应算法效率单靠时间值绝对可信吗?时间复杂度与“大O记法”如何理解“大O记法......
  • LeetCode 有关二叉树的算法题目(C++)
    0、NULL与nullptr的区别在C语言中,​​NULL​​​通常被定义为:​​#defineNULL((void*)0)​​​。因为在C语言中把空指针赋给​​int​​​和​​char​​​指针的时候,发......
  • RSA非对称加解密算法填充方式(Padding)
    1.padding模式1.1三类常见填充方式RSA加密常用的填充模式有三种:​​RSA_PKCS1_PADDING,RSA_PKCS1_OAEP_PADDING,RSA_NO_PADDING。​​与对称加密算法DES,AES一样,RSA算法也......
  • GPU并行算法读书笔记-chapter3 CUDA线程模型
    目录《GPU并行算法》读书笔记-chapter3CUDA线程模型SIMD模型SIMT模型kernel函数CUDA线程结构blockgrid线程的全局IDCUDA结构与GPU硬件的映射关系CUDA线程设计执行配置什......
  • Tarjan算法求割点
    定义如果在一个图中,删除某个节点连同与之关联的边,会导致整个图的连通分支数增加,那么这个节点叫做割点(ArticulationPoint,CutVertex)如下图:整个图的连通分支数为1,但......
  • 基础算法汇总之二叉搜索树实现
    一.树定义在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层......
  • 基础算法汇总之AVL树实现
    一.什么是AVL树?在说AVL树之前,先回顾一下我们之前研究过的二分查找树(二分搜索树),在极端的情况下,二分搜索树会从一棵二叉树变为链表(按顺序插入数据)这样的查询效率会大打折扣。......