返回顶部
首页 > 资讯 > 后端开发 > Python >朴素贝叶斯(Naive Bayesian
  • 131
分享到

朴素贝叶斯(Naive Bayesian

朴素贝叶斯Bayesian 2023-01-30 23:01:48 131人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

简介 Naive Bayesian算法 也叫朴素贝叶斯算法(或者称为傻瓜式贝叶斯分类) 朴素(傻瓜):特征条件独立假设 贝叶斯:基于贝叶斯定理 这个算法确实十分朴素(傻瓜),属于监督学习,它是一个常用于寻找决策面的算法。   基本思

  • 简介

Naive Bayesian算法 也叫朴素贝叶斯算法(或者称为傻瓜式贝叶斯分类)

朴素(傻瓜):特征条件独立假设

贝叶斯:基于贝叶斯定理

这个算法确实十分朴素(傻瓜),属于监督学习,它是一个常用于寻找决策面的算法。

 

  • 基本思想

(1)病人分类举例

有六个病人 他们的情况如下:

症状 职业 病名
打喷嚏 护士 感冒
打喷嚏 农夫 过敏
头痛 建筑工人 脑震荡
头痛 建筑工人 感冒
打喷嚏 教师 感冒
头痛 教师 脑震荡

 

 

 

 

 

 

 

根据这张表 如果来了第七个病人 他是一个 打喷嚏 的 建筑工人

那么他患上感冒的概率是多少 

根据贝叶斯定理:

P(A|B) = P(B|A) P(A) / P(B)

可以得到:

P(感冒|打喷嚏x建筑工人) = P(打喷嚏x建筑工人|感冒) x P(感冒) / P(打喷嚏x建筑工人)

假定 感冒 与 打喷嚏 相互独立 那么上面的等式变为:

P(感冒|打喷嚏x建筑工人) = P(打喷嚏|感冒) x P(建筑工人|感冒) x P(感冒) / ( P(打喷嚏) x P(建筑工人) )
P(感冒|打喷嚏x建筑工人) = 2/3 x 1/3 x 1/2 /( 1/2 x 1/3 )= 2/3

因此 这位打喷嚏的建筑工人 患上感冒的概率大约是66%

 

(2)朴素贝叶斯分类器公式

假设某个体有n项特征,分别为F1、F2、…、Fn。现有m个类别,分别为C1、C2、…、Cm。贝叶斯分类器就是计算出概率最大的那个分类,也就是求下面这个算式的最大值:

P(C|F1 x F2 ...Fn) = P(F1 x F2 ... Fn|C) x P(C) / P(F1 x F2 ... Fn)

由于 P(F1xF2 … Fn) 对于所有的类别都是相同的,可以省略,问题就变成了求

P(F1 x F2 ... Fn|C)P(C)

的最大值

根据朴素贝叶斯的朴素特点(特征条件独立假设),因此:

P(F1 x F2 ... Fn|C)P(C) = P(F1|C) x P(F2|C) ... P(Fn|C)P(C)

上式等号右边的每一项,都可以从统计资料中得到,由此就可以计算出每个类别对应的概率,从而找出最大概率的那个类。

 

  • 代码实现

环境:MacOS mojave  10.14.3

python  3.7.0

使用库:scikit-learn    0.19.2

 

在终端输入下面的代码安装sklearn

pip install sklearn

sklearn库官方文档Http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html

>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> Y = np.array([1, 1, 1, 2, 2, 2])
#生成六个训练点,其中前三个属于标签(分类)1 后三个属于标签(分类)2
>>> from sklearn.naive_bayes import GaussianNB
#导入外部模块
>>> clf = GaussianNB()#创建高斯分类器,把GaussianNB赋值给clf(分类器)
>>> clf.fit(X, Y)#开始训练
#它会学习各种模式,然后就形成了我们刚刚创建的分类器(clf)
#我们在分类器上调用fit函数,接下来将两个参数传递给fit函数,一个是特征x 一个是标签y#最后我们让已经完成了训练的分类器进行一些预测,我们为它提供一个新点[-0.8,-1]
>>> print(clf.predict([[-0.8, -1]]))
[1]

上面的流程为:创建训练点->创建分类器->进行训练->对新的数据进行分类

上面的新的数据属于标签(分类)2

 

  • 绘制决策面

对于给定的一副散点图,其中蓝色是慢速区 红色是快速区,如何画出一条线 将点分开

perp_terrain_data.py

生成训练点

import random


def makeTerrainData(n_points=1000):
###############################################################################
### make the toy dataset
    random.seed(42)
    grade = [random.random() for ii in range(0,n_points)]
    bumpy = [random.random() for ii in range(0,n_points)]
    error = [random.random() for ii in range(0,n_points)]
    y = [round(grade[ii]*bumpy[ii]+0.3+0.1*error[ii]) for ii in range(0,n_points)]
    for ii in range(0, len(y)):
        if grade[ii]>0.8 or bumpy[ii]>0.8:
            y[ii] = 1.0

### split into train/test sets
    X = [[gg, ss] for gg, ss in zip(grade, bumpy)]
    split = int(0.75*n_points)
    X_train = X[0:split]
    X_test  = X[split:]
    y_train = y[0:split]
    y_test  = y[split:]

    grade_sig = [X_train[ii][0] for ii in range(0, len(X_train)) if y_train[ii]==0]
    bumpy_sig = [X_train[ii][1] for ii in range(0, len(X_train)) if y_train[ii]==0]
    grade_bkg = [X_train[ii][0] for ii in range(0, len(X_train)) if y_train[ii]==1]
    bumpy_bkg = [X_train[ii][1] for ii in range(0, len(X_train)) if y_train[ii]==1]

#    training_data = {"fast":{"grade":grade_sig, "bumpiness":bumpy_sig}
#            , "slow":{"grade":grade_bkg, "bumpiness":bumpy_bkg}}


    grade_sig = [X_test[ii][0] for ii in range(0, len(X_test)) if y_test[ii]==0]
    bumpy_sig = [X_test[ii][1] for ii in range(0, len(X_test)) if y_test[ii]==0]
    grade_bkg = [X_test[ii][0] for ii in range(0, len(X_test)) if y_test[ii]==1]
    bumpy_bkg = [X_test[ii][1] for ii in range(0, len(X_test)) if y_test[ii]==1]

    test_data = {"fast":{"grade":grade_sig, "bumpiness":bumpy_sig}
            , "slow":{"grade":grade_bkg, "bumpiness":bumpy_bkg}}

    return X_train, y_train, X_test, y_test
#    return training_data, test_data

 

ClassifyNB.py

高斯分类

def classify(features_train, labels_train):   
    ### import the sklearn module for GaussianNB
    ### create classifier
    ### fit the classifier on the training features and labels
    ### return the fit classifier
    
    
    from sklearn.naive_bayes import GaussianNB
    clf = GaussianNB()
    clf.fit(features_train, labels_train)
    return clf
    pred = clf.predict(features_test)
    

 

class_vis.py

绘图与保存图像

import warnings
warnings.filterwarnings("ignore")

import matplotlib 
matplotlib.use('agg')

import matplotlib.pyplot as plt
import pylab as pl
import numpy as np

#import numpy as np
#import matplotlib.pyplot as plt
#plt.ioff()

def prettyPicture(clf, X_test, y_test):
    x_min = 0.0; x_max = 1.0
    y_min = 0.0; y_max = 1.0

    # Plot the decision boundary. For that, we will assign a color to each
    # point in the mesh [x_min, m_max]x[y_min, y_max].
    h = .01  # step size in the mesh
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

    # Put the result into a color plot
    Z = Z.reshape(xx.shape)
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())

    plt.pcolORMesh(xx, yy, Z, cmap=pl.cm.seismic)

    # Plot also the test points
    grade_sig = [X_test[ii][0] for ii in range(0, len(X_test)) if y_test[ii]==0]
    bumpy_sig = [X_test[ii][1] for ii in range(0, len(X_test)) if y_test[ii]==0]
    grade_bkg = [X_test[ii][0] for ii in range(0, len(X_test)) if y_test[ii]==1]
    bumpy_bkg = [X_test[ii][1] for ii in range(0, len(X_test)) if y_test[ii]==1]

    plt.scatter(grade_sig, bumpy_sig, color = "b", label="fast")
    plt.scatter(grade_bkg, bumpy_bkg, color = "r", label="slow")
    plt.legend()
    plt.xlabel("bumpiness")
    plt.ylabel("grade")

    plt.savefig("test.png")

 

Main.py

主程序

from prep_terrain_data import makeTerrainData
from class_vis import prettyPicture
from ClassifyNB import classify

import numpy as np
import pylab as pl


features_train, labels_train, features_test, labels_test = makeTerrainData()

### the training data (features_train, labels_train) have both "fast" and "slow" points mixed
### in together--separate them so we can give them different colors in the scatterplot,
### and visually identify them
grade_fast = [features_train[ii][0] for ii in range(0, len(features_train)) if labels_train[ii]==0]
bumpy_fast = [features_train[ii][1] for ii in range(0, len(features_train)) if labels_train[ii]==0]
grade_slow = [features_train[ii][0] for ii in range(0, len(features_train)) if labels_train[ii]==1]
bumpy_slow = [features_train[ii][1] for ii in range(0, len(features_train)) if labels_train[ii]==1]

clf = classify(features_train, labels_train)

### draw the decision boundary with the text points overlaid
prettyPicture(clf, features_test, labels_test)

 

运行得到分类完成图像:

 

 可以看到并不是所有的点都正确分类了,还有一小部分点被错误分类了

计算分类正确率:

accuracy.py

from class_vis import prettyPicture
from prep_terrain_data import makeTerrainData
from classify import NBAccuracy

import matplotlib.pyplot as plt
import numpy as np
import pylab as pl


features_train, labels_train, features_test, labels_test = makeTerrainData()

def submitAccuracy():
    accuracy = NBAccuracy(features_train, labels_train, features_test, labels_test)
    return accuracy

 

在主程序Main结尾加入一段:

from studentCode import submitAccuracy
print(submitAccuracy())

得到正确率:0.884

 

  • 朴素贝叶斯的优势与劣势

 优点:1、非常易于执行  2、它的特征空间非常大  3、运行非常容易、非常有效

 缺点:它会与间断、由多个单词组成且意义明显不同的词语不太适合(eg:芝加哥公牛)

--结束END--

本文标题: 朴素贝叶斯(Naive Bayesian

本文链接: https://lsjlt.com/news/181211.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 朴素贝叶斯(Naive Bayesian
    简介 Naive Bayesian算法 也叫朴素贝叶斯算法(或者称为傻瓜式贝叶斯分类) 朴素(傻瓜):特征条件独立假设 贝叶斯:基于贝叶斯定理 这个算法确实十分朴素(傻瓜),属于监督学习,它是一个常用于寻找决策面的算法。   基本思...
    99+
    2023-01-30
    朴素 贝叶斯 Bayesian
  • 朴素贝叶斯(Naive Bayes)
            朴素贝叶斯是一个基于概率统计的机器学习算法,作用是用于多分类。         训练集包含已知分类类别的大量样本,每个样本具有n维特征,例如:已知一个人分类为胖或者瘦,有5个特征用于分类,这5个特征分别是体重、身高、年...
    99+
    2023-09-24
    机器学习 人工智能 python
  • 朴素贝叶斯和半朴素贝叶斯(AODE)分类器Python实现
      一、概述  机器学习最后一次实验,要求实现朴素贝叶斯和AODE的半朴素贝叶斯分类器。由于老师说可以调用现成的相关机器学习的库,所以我一开始在做朴素贝叶斯分类器的时候,直接调用了sklearn库,很方便,可是问题来了,在做AODE半朴素贝...
    99+
    2023-06-02
  • 朴素贝叶斯算法的Python实现
    注意:1、代码中的注释请不要放在源程序中运行,会报错。    2、代码中的数据集来源于http://archive.ics.uci.edu/ml/datasets/Car+Evaluation     3、对于朴素贝叶斯的原理,可以查看我的...
    99+
    2023-01-31
    朴素 算法 贝叶斯
  • python中如何使用朴素贝叶斯算法
    这里再重复一下标题为什么是"使用"而不是"实现": 首先,专业人士提供的算法比我们自己写的算法无论是效率还是正确率上都要高。 其次,对于数学不好的人来说,为了实现算法而去研究一堆公式是很痛苦的事情。 再次,...
    99+
    2022-06-04
    如何使用 朴素 算法
  • R语言朴素贝叶斯技术怎么使用
    本篇内容主要讲解“R语言朴素贝叶斯技术怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“R语言朴素贝叶斯技术怎么使用”吧!安装package:> install.packag...
    99+
    2023-06-19
  • Python机器学习应用之朴素贝叶斯篇
    朴素贝叶斯(Naive Bayes,NB):朴素贝叶斯分类算法是学习效率和分类效果较好的分类器之一。朴素贝叶斯算法一般应用在文本分类,垃圾邮件的分类,信用评估,钓鱼网站检测等。 1、...
    99+
    2024-04-02
  • 如何优化数据库的数据朴素贝叶斯
    要优化数据库的数据朴素贝叶斯,可以考虑以下几点: 数据清洗:确保数据质量高,包括去除重复数据、处理缺失值、处理异常值等。 特征选择:选择合适的特征对模型进行训练,可以使用特征选择技术如方差分析、相关性分析等。 数据标准化:对数据...
    99+
    2024-07-03
    数据库
  • web算法中朴素贝叶斯如何实现文档分类
    本篇内容主要讲解“web算法中朴素贝叶斯如何实现文档分类”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web算法中朴素贝叶斯如何实现文档分类”吧!  作业要求:  实验数据在bayes_data...
    99+
    2023-06-02
  • Java利用朴素贝叶斯分类算法实现信息分类
    目录贝叶斯分类算法 代码实例数据集data.txt代码实现输出结果使用场景贝叶斯分类算法  贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类...
    99+
    2024-04-02
  • Python编程之基于概率论的分类方法:朴素贝叶斯
    概率论啊概率论,差不多忘完了。 基于概率论的分类方法:朴素贝叶斯 1. 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础——贝叶斯定理...
    99+
    2022-06-04
    概率论 朴素 方法
  • 机器学习:朴素贝叶斯模型算法原理(含实战案例)
    机器学习:朴素贝叶斯模型算法原理 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍...
    99+
    2023-09-04
    机器学习 人工智能 python 朴素贝叶斯 开发语言
  • Python通过朴素贝叶斯和LSTM分别实现新闻文本分类
    目录一、项目背景二、数据处理与分析三、基于机器学习的文本分类–朴素贝叶斯1. 模型介绍2. 代码结构3. 结果分析四、基于深度学习的文本分类–LSTM1. 模型介绍2. 代码结构3....
    99+
    2024-04-02
  • Python如何通过朴素贝叶斯和LSTM分别实现新闻文本分类
    这篇文章主要介绍Python如何通过朴素贝叶斯和LSTM分别实现新闻文本分类,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!数据处理与分析本次大赛提供的材料是由csv格式编写,只需调用python中的pandas库读取...
    99+
    2023-06-22
  • python机器学习朴素贝叶斯算法及模型的选择和调优详解
    目录一、概率知识基础1.概率2.联合概率3.条件概率二、朴素贝叶斯1.朴素贝叶斯计算方式2.拉普拉斯平滑3.朴素贝叶斯API三、朴素贝叶斯算法案例1.案例概述2.数据获取3.数据处理...
    99+
    2024-04-02
  • 机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
    机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁...
    99+
    2023-10-06
    机器学习 分类 朴素贝叶斯 python 开发语言
  • python机器学习中朴素贝叶斯算法及模型选择和调优的示例分析
    这篇文章将为大家详细讲解有关python机器学习中朴素贝叶斯算法及模型选择和调优的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、概率知识基础1.概率概率就是某件事情发生的可能性。2.联合概率包...
    99+
    2023-06-25
  • python实现贝叶斯推断的例子
    目录1. 前言2. 问题描述3. 贝叶斯规则4. Bayes engine: scalar implementation 5. Bayes engine: vec...
    99+
    2024-04-02
  • Python中的贝叶斯推理的软件包 pystan
    前言PyStan 为 Stan 提供了一个 Python 接口,这是一个使用 No-U-Turn 采样器进行贝叶斯推理的软件包,这是Hamiltonian Monte Carlo 的一种变体。PyStan具有以下依赖项:Python:2.7...
    99+
    2023-06-02
  • PythonMultinomialNaiveBayes多项贝叶斯模型实现原理介绍
    之前在一次跟“某Fish”客户进行交谈时,我在的需求下学习了多项贝叶斯(Multinomial Naive Bayes)这个模型。 在了解多项贝叶斯模型之前,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作