机器学习(五):高斯朴素贝叶斯(基础篇)

2023-11-03

机器学习(五):高斯朴素贝叶斯(基础篇)

在高斯朴素贝叶斯中,每个特征都是连续的,并且都呈高斯分布。高斯分布又称为正态分布。图画出来以后像一个倒挂的钟,以均值为轴对称,如下图所示:
在这里插入图片描述
GaussianNB 实现了运用于分类的高斯朴素贝叶斯算法。特征的可能性(即概率)假设为高斯分布:
在这里插入图片描述
参数\large \sigma _{y}和\large \mu _{y}使用最大似然法估计。

使用数据集:Iris数据集
代码如下:

import numpy as np
import time
from sklearn import datasets

iris = datasets.load_iris()

def getGaussianCoeff(data_X, data_y):
    values = list(set(data_y.tolist()))  # 需要分表的个数
    # print(values)
    box = []
    coeff = []
    data = np.column_stack((data_X, data_y))  # X,y连接在一起,把数据特征和标签都连接在一起
    #print(data)
    for value in values:  # 按照值进行分表
        zhongjie = []
        for i in range(len(data)):
            if data[i][-1] == value:
                zhongjie.append(data[i].tolist())
        box.append(zhongjie)
    # 对每个属性,计算高斯分布的系数
    box = np.array(box)  # 分表转成ndarray,这是多维数组(3,50,5)
    for i in range(len(values)):  # 对于每个分表
        sigema = []
        uVector = np.average(box[i], axis=0)  # 均值向量,axis表示竖着求均值  (求出均值)
        # print(uVector)
        uVecyorMinusAvg = np.array([(box[i][j] - uVector) for j in range(len(box[i]))])  # x-u
        uVecyorMinusAvgTranspose = uVecyorMinusAvg.T
        xieFangChaMatrix = np.dot(uVecyorMinusAvg, uVecyorMinusAvgTranspose)  # 算出协方差
        # 遍历出[1,1],[2,2]...这些位置上的数字,也就是各个sigema
        for j in range(len(xieFangChaMatrix)):
            for k in range(len(xieFangChaMatrix)):
                if j == k:
                    sigema.append(round(xieFangChaMatrix[j][k], 3))   #保留小数点后三位数
        coeff.append(list(zip(sigema, uVector)))
    return coeff

def gaussiFunc(sigema, u, x):  # 这里的sigema是平方的形式
    outxishu = 1 / (np.sqrt(2 * np.pi * sigema))
    inxishu = -((x - u) ** 2) / (2 * sigema)
    return outxishu * np.exp(inxishu)  #高斯公式


def trainBayes(Data_X, Data_Y, preData):
    # 求出高斯函数的系数
    coeff = getGaussianCoeff(Data_X, Data_Y)  #均值和方差
    if len(Data_X) != len(Data_Y):
        raise TypeError
    if not isinstance(Data_X, list):  # 转成list
        Data_X = Data_X.tolist()
        Data_Y = Data_Y.tolist()
    numOfPreData = len(preData)  # 需要预测的个数
    values = list(set(Data_Y))  # 分表的个数
    preDataY = []
    # 计算出数据归为这个类的概率,
    counts = [0] * len(values)
    for k in range(len(Data_X)):
        for value in values:
            if Data_Y[k] == value:
                counts[values.index(value)] = counts[values.index(value)] + 1
    P1s = [counts[l] / sum(counts) for l in range(len(values))]  # 计算出P1的概率  加权值
    for i in range(numOfPreData):
        probabilities = []
        for j in range(len(values)):  # 每种结果的概率
            # 用上面的高斯分布求每个概率,然后相乘
            P2 = 1
            for m in range(len(Data_X[0])):
                myCoeff = coeff[j][m]  # 是一个tuple,第一个元素是sigema,第二个参数是平均值u
                probaOfOneAtrr = gaussiFunc(myCoeff[0], myCoeff[1], preData[i][m])  # 第i个数据,第m个属性的高斯概率值
                P2 = P2 * probaOfOneAtrr
            probabilities.append(P2 * P1s[j])  # 把所有可能的结果的概率放入
        probabilities = np.array(probabilities)
        index = np.argmax(probabilities)  # 选取那个最大的概率
        preDataY.append(index)  # 每个数据的结果写入
    return preDataY


'''
x = np.linspace(-10,10,100)#高斯函数检测
y = gaussiFunc(1,2,x)
import matplotlib.pyplot as plt
plt.plot(x,y)
plt.show()           
'''
start2 = time.perf_counter()
preData = trainBayes(iris.data, iris.target, iris.data)
end2 = time.process_time()

print('我的程序运行的时间是:', end2 - start2)
print((iris.target != preData).sum()/ len(iris.data))

我们看一下结果:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习(五):高斯朴素贝叶斯(基础篇) 的相关文章

  • 朴素贝叶斯Naive Bayes-机器学习ML

    参考 1 统计学习方法 李航 2 先验概率与后验概率的区别 http blog csdn net ouyang linux007 article details 7566339 3 朴素贝叶斯方法 Naive Bayes 原理和实现 htt
  • 决策树(Decision Tree,DT)(ID3、C4.5、剪枝、CART)

    目录 1 算法简介 2 特征选择 3 生成决策树 ID3 C4 5 4 修剪决策树 5 CART算法 CART回归树的生成 CART分类树的生成 CART剪枝 1 算法简介 决策树模型是树形结构 既可以用于分类 也可以用于回归 一颗决策树由
  • AdaBoost算法讲解以及MATLAB实现

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 算法描述 二 算法步骤是什么 三 数据集说明 可以自己增加数据集 四 算法实现MATLAB 1 主函数 2 找到误差率最小的弱函数 3 分别计算弱分类函数 并计
  • 机器学习 之线性回归(包含推导过程)

    参考B站视频新手狂喜 目前B站最全最清晰的 机器学习算法 教程 从零开始详细解读 原理 代码实现 通通都在这里了 收藏慢慢学 决策树 随机森林 聚类分析 人工智能 哔哩哔哩 bilibili 线性回归 eg 银行贷款 数据 工资和年龄 特征
  • 机器学习笔记-回归评价指标scikit-learn

    scikit learn中回归指标 from sklearn metrics import mean squared error 均方误差MSE from sklearn metrics import mean absolute error
  • 信息熵,信息增益

    信息熵 信息增益 概要 实例一 实例二 概要 信息增益表示得知特征A的信息而使得类Z的信息的不确定性减少的程度 特征A对数据集D的信息增益 G D A 定义为集合的信息熵 H D 与特征A给定条件下D的信息条件熵 H D A 之差 即公式为
  • Win10系统安装TensorRT

    一 Win10系统安装GPU版本CUDA Cudnn 二 Win10系统安装TensorRT 文章目录 环境搭建系列文章目录 TensorRT简介 一 版本对应关系 二 下载及安装 1 TensorRT 2 No module named
  • 机器学习(五):高斯朴素贝叶斯(基础篇)

    机器学习 五 高斯朴素贝叶斯 基础篇 在高斯朴素贝叶斯中 每个特征都是连续的 并且都呈高斯分布 高斯分布又称为正态分布 图画出来以后像一个倒挂的钟 以均值为轴对称 如下图所示 GaussianNB 实现了运用于分类的高斯朴素贝叶斯算法 特征
  • python:基于朴素贝叶斯算法的垃圾邮件过滤分类

    目录 一 朴素贝叶斯算法 1 概述 2 推导过程 二 实现垃圾邮件过滤分类 1 垃圾邮件问题背景 2 朴素贝叶斯算法实现垃圾邮件分类的步骤 3 python实现 参考学习网址 https blog csdn net weixin 59450
  • 拉格朗日函数与广义拉格朗日函数

    拉格朗日函数用来求解等式约束的最优化问题 广义拉格朗日函数用来求解不等式约束的最优化问题 无约束优化问题 关于优化问题包括无约束优化问题 等式约束优化问题 不等式约束优化问题 这里简略地介绍一下无约束优化问题 以后再来填坑 考虑无约束优化问
  • Python 朴素贝叶斯(Naive Bayes)分类

    Na ve Bayes 分类的核心是计算条件概率P y x 其中y为类别 x为特征向量 其意义是在x样本出现时 它被划分为y类的可能性 概率 通过计算不同分类下的概率 进而把样本划分到概率最大的一类 根据条件概率的计算公式可以得到 P y
  • 机器学习sklearn之朴素贝叶斯

    朴素贝叶斯 朴素贝叶斯和其他绝大多数的分类算法都不同 对于大多数的分类算法 比如决策树 KNN 逻辑回归 支持向量机等 他们都是判别方法 也就是直接学习出特征输出Y和特征X之间的关系 要么是决策函数Y f X 要么是条件分布P Y X 但是
  • 独孤九剑第五式-朴素贝叶斯模型

    文章适合于所有的相关人士进行学习 各位看官看完了之后不要立刻转身呀 期待三连关注小小博主加收藏 小小博主回关快 会给你意想不到的惊喜呀 各位老板动动小手给小弟点赞收藏一下 多多支持是我更新得动力 文章目录 前言 朴素贝叶斯模型理论讲解 模型
  • NLP系列(2)_用朴素贝叶斯进行文本分类(上)

    作者 寒小阳 龙心尘 时间 2016年1月 出处 http blog csdn net longxinchen ml article details 50597149 http blog csdn net han xiaoyang arti
  • 解决 无法解析名称 NaiveBayes.fit。/i get Undefined variable “NaiveBayes“ or class “NaiveBayes.fit“.

    应用朴素贝叶斯分类器时候 发现报错无法解析名称 NaiveBayes fit 这是因为 你想用NaiveBayes 适用于MATLAB R2018b 根据NaiveBayes的R2014b发布说明 fit被fitNaiveBayes取代 同
  • 机器学习-对范数的理解

    1 范数的概念 参考 https blog csdn net a6333230 article details 87860875 范数 norm 主要是对矩阵和向量的一种描述 矩阵范数 描述矩阵引起变化的大小 AX B 矩阵X变化了A个量级
  • 机器学习——seaborn可视化

    主要记录seaborn可视化学习笔记 明白有哪些绘制图像的函数可用 文章目录 一 seaborn原理 二 变量分布 1 sns boxplot 查看数值变量的取值范围 2 sns displot 查看变量的分布 3 sns jointplo
  • 【美国大学生数学建模比赛】2020C题(总结和原创参赛论文)百度云请自取

    最新想法 本学期选修了下大数据 发现其实本题的解法还涉及到数据库 大数据各个层次数据处理和分布式数据流blabla 而之前那几天美赛做的还停留在最基础的数据处理层 而且我现在觉得如果要做大的话不应该在这个层里面进行深度学习 前面的数据库处理
  • 【机器学习】—各类梯度下降算法 简要介绍

    阅读之前看这里 博主是一名正在学习数据类知识的学生 在每个领域我们都应当是学生的心态 也不应该拥有身份标签来限制自己学习的范围 所以博客记录的是在学习过程中一些总结 也希望和大家一起进步 在记录之时 未免存在很多疏漏和不全 如有问题 还请私
  • 基于朴素贝叶斯的图像分类

    朴素贝叶斯是一种极其简单的分类算法 通过概率统计到的方式进行判别 通过特征的联合概率分布P w1 w2 w3 wn C 进行建模 进而得到P C w1 w2 w3 wn 进而转换成一种监督分类的算法 贝叶斯公式 目标是根据特征得到属于某一类

随机推荐

  • vs2008中,在OCX控件中应用doc/view基本步骤

    1 利用向导创建一个MFC ActiveX Control控件CMyOCX 2 在工程中加入ActivDoc头文件和执行文件 class CActiveXDocTemplate public CSingleDocTemplate enum
  • 冒泡排序--python(详解)

    对于一个数组 4 6 3 9 第一轮 第一次比较 4 lt 6 两数不用进行交换 数组不变为 4 6 3 9 第二次比较 6 gt 3 两数进行交换 得到一个新数组 4 3 6 9 第三次比较 6 lt 9 两数不用进行交换 数组不变为 4
  • PHP Fatal error: Call to undefined function curl_init() in xxx

    找到php ini文件中这一行 本人是centos extension curl so 加上这一行 重启服务器 如果服务器报错说找不到curl so文件 下载php源码包http www php net downloads php tar
  • MyBaties 提示org.apache.ibatis.builder.BuilderException: The expression ‘’**' evaluated to a null val

    MyBaties 提示的错误信息 org apache ibatis builder BuilderException The expression evaluated to a null value 错误的原因 SQL 参数为List 集
  • java设计模式——状态模式

    状态模式的定义 一个对象在其内部状态改变的时候改变其行为 状态驱动 由上下文负责 代替if else 代替 switch case 普通方式 public String orderState String state if state eq
  • Percona-mysql server 5.5升级5.6

    http blog csdn net lqx0405 article details 50162557 系统环境 操作系统 CentOS 6 5 64 MySQL Percona server 5 5 5 6 一 升级的目的 为什么MySQ
  • Qt学习:Qt优雅地结束线程

    一 Qt线程 如果一个线程运行完成 就会结束 可很多情况并非这么简单 由于某种特殊原因 当线程还未执行完时 我们就想中止它 不恰当的中止往往会引起一些未知错误 比如 当关闭主界面的时候 很有可能次线程正在运行 这时 就会出现如下提示 QTh
  • noip2007 奖学金 (排序)

    A1159 奖学金 时间限制 1 0s 内存限制 256 0MB 总提交次数 797 AC次数 339 平均分 60 95 将本题分享到 查看未格式化的试题 提交 试题讨论 试题来源 NOIP2007 普及组 问题描述 某小学最近得到了一笔
  • 800-C++ throw(抛出异常)详解

    C throw 抛出异常 详解 抛出 Throw gt 检测 Try gt 捕获 Catch 异常必须显式地抛出 才能被检测和捕获到 如果没有显式的抛出 即使有异常也检测不到 在 C 中 我们使用 throw 关键字来显式地抛出异常 它的用
  • Office Online Server预览不了文件 TLS

    最近Office Online Server预览不了文件 服务器上报 从远程终点接收到一个严重警告 TLS 协议所定义的严重警告代码为 70 错误 经过排查发现TLS 1 1 和 TLS 1 2没有开启 将其开启后文档就能正常访问了 开启T
  • 如何利用R语言怎样处理百分数

    楼主在工作时 遇到一个问题 网上析取的资料中有很多百分数 但是R读取的时候把它默认为是因子类型了 用as numeric 函数也没有用 经过查找资料发现几个将百分数化成小数的小技巧 和大家分享一下 其基本思想就是把百分数按照字符处理 首先将
  • 基于亚博K210开发板——LED(RGB)点灯

    文章目录 开发板 实验目的 实验准备 查看原理图 软件对应SDK GPIO配置函数 什么是 FPIOA 呢 实验代码 LED RGB驱动 主程序控制 实验结果 开发板 实验目的 实现开发板上LED0 LED1以及RGB灯的点亮 实验准备 查
  • 用ISO C++实现自己的信号槽(Qt另类学习)

    有网友抱怨 哪个大牛能帮帮我 讲解一下信号槽机制的底层实现 不要那种源码的解析 只要清楚的讲讲是怎么发送信号 怎么去选择相应的槽 再做出反应 也就是类似于一个信号槽的相应流程 求解啊 看了源码 真的是一头雾水 撞墙的心都有了 本文使用 IS
  • 探索Vue组件通信的秘密:打破隔阂,实现数据共享

    一 Vue组件通信 每个组件都有自己的数据 提供在data中 每个组件的数据是独立的 组件数据无法互相直接访问 合理的 但是如果需要跨组件访问数据 就需要用到组件通信 要是有一万个商品 就要写一万个吗 函数调用 看起来调用时用一个函数 执行
  • js new Promise的基本用法

    function easyShare config return new Promise resolve reject gt try if config true console log 11 config setTimeout gt re
  • 2021秋招复习——CSS

    目录 文章目录 选择器 float布局 position定位 flex布局 水平垂直居中 水平居中 行内元素 块级元素 垂直居中 行内元素 块级元素 BFC 盒模型 CSS3动画 回流 重排 和重绘 响应式布局 选择器 选择器主要包括 选择
  • matlab求解正负因子目标规划,matlab学习系列27多目标规划.docx

    matlab学习系列27多目标规划 docx 27多目标规划一 线性规划的局限性1线性规划要求所求解问题必须满足全部的约束 而实际问题中并非所有约束都需要严格的满足 2线性规划只能处理单目标的优化问题 从而对一些次目标只能转化为约束处理 而
  • AngularJS 截取字符串

    In HTML Template Binding 在HTML的模板绑定中 limitTo expression limitTo limit begin In JavaScript filter limitTo input limit beg
  • 计算机开机键盘屏幕无反应,电脑开机后键盘显示器无反应怎么解决

    电脑开机后主机灯正常 有风扇和机器声音 但是键盘显示器都没有反应 这是怎么回事呢 电脑开机后键盘显示器无反应怎么解决呢 下面学习啦小编就为大家带来了解决电脑开机后键盘显示器无反应的方法 电脑开机后键盘显示器无反应解决方法一 开机状态下把鼠标
  • 机器学习(五):高斯朴素贝叶斯(基础篇)

    机器学习 五 高斯朴素贝叶斯 基础篇 在高斯朴素贝叶斯中 每个特征都是连续的 并且都呈高斯分布 高斯分布又称为正态分布 图画出来以后像一个倒挂的钟 以均值为轴对称 如下图所示 GaussianNB 实现了运用于分类的高斯朴素贝叶斯算法 特征