机器学习的概率统计模型(附代码)(一)

2023-11-01

目录

概率论

1.1 离散随机变量分布

1)伯努利分布

 2)二项分布

 3)泊松分布

1.2 连续随机变量分布

1)均匀分布

 2)指数分布

 3)正态分布

总结

 系列文章目录


概率论

概率论,是研究随机现象数量规律的数学分支。随机现象是相对于决定性现象而言的,在一定条件下必然发生某一结果的现象称为决定性现象。

事件的概率是衡量该事件发生的可能性的量度。虽然在一次随机试验中某个事件的发生是带有偶然性的,但那些可在相同条件下大量重复的随机试验却往往呈现出明显的数量规律。

 由于本文章会多次运用到matplotlib库的知识,如有需要请移步前往matplotlib库巩固知识点。 

1.1 离散随机变量分布

1)伯努利分布

        伯努利分布又称为两点分布或0-1分布,指的是对于随机变量X有, 参数为p(0<p<1),如果它分别以概率p和1-p取1和0为值。EX= p,DX=p(1-p)。伯努利试验成功的次数服从伯努利分布,参数p是试验成功的概率。

伯努利分布的概率用python代码绘制如下:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def bernoulli_pmf(p=0.0):
    ber_dist =stats.bernoulli(p)
    x = [0, 1]
    x_name = ['0', '1']
    pmf = [ber_dist.pmf(x[0]),ber_dist.pmf(x[1])]
    plt.bar(x, pmf, width = 0.15)
    plt.xticks(x,x_name)
    plt.ylabel('Probability')
    plt.title('Pmf of bernoulli distribution')
    plt.show()

bernoulli_pmf(p=0.3)

运行结果如下:

 2)二项分布

        如果把一个伯努利分布独立的重复n次,就得到了一个二次分布。二项分布是最重要的离散型概率分布之一。随机变量X要满足这个分布有两个重要条件:

  • 各次试验的条件是稳定的;
  • 各次试验之间是相互独立的;

下面利用python代码模拟抛一枚不均匀的硬币20次,设正面朝上的概率为0.6:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def binom_dis(n=1,p=0.1):
    binom_dis = stats.binom(n,p)
    x = np.arange(binom_dis.ppf(0.0001), binom_dis.ppf(0.9999))
    print(x)
    fig, ax = plt.subplots(1, 1)
    ax.vlines(x, binom_dis.pmf(x), 'bo', label='binom pmf')
    ax.legend(loc='best', frameon = False)
    plt.ylabel('Probability')
    plt.title('PMF of binomial distribution(n={},p={})'.format(n,p))
    plt.show()

binom_dis(n=20,p=0.6)

运行结果如下:

 3)泊松分布

        泊松分布的参数λ是单位时间(或单位面积)内随机事件的平均发生次数。 泊松分布适合于描述单位时间内随机事件发生的次数。当二项分布的n很大而p很小时,泊松分布可作为二项分布的近似,其中λ为np。通常当n≧20,p≦0.05时,就可以用泊松公式近似得计算。事实上,泊松分布正是由二项分布推导而来的。

下面是参数μ=8时的泊松分布python实现,在Scipy中将泊松分布的参数表示为μ:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def poisson_pmf(mu=3):
    poisson_dis= stats.poisson(mu)
    x = np.arange(poisson_dis.ppf(0.001), poisson_dis.ppf(0.999))
    print(x)
    fig, ax = plt.subplots(1, 1)
    ax.plot(x, poisson_dis.pmf(x), 'bo', ms=8, label = 'poisson pmf')
    ax.legend(loc = 'best', frameon = False)
    plt.ylabel('Probability')
    plt.title('PMF of poisson distribution(mu={})'.format(mu))
    plt.show()

poisson_pmf(mu=8)

1.2 连续随机变量分布

1)均匀分布

        均匀分布也叫矩形分布,它是对称概率分布,在相同长度间隔的分布概率是等可能的。 均匀分布由两个参数a和b定义,它们是数轴上的最小值和最大值,通常缩写为U(a,b)。

在python中用location和scale分别表示起点和区间长度,代码如下:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def uniform_distribution(loc=0,scale=1):
    uniform_dis = stats.uniform(loc=loc,scale=scale)
    x = np.linspace(uniform_dis.ppf(0.01), uniform_dis.ppf(0.99), 100)
    fig, ax = plt.subplots(1, 1)

    #直接传入参数
    ax.plot(x, stats.uniform.pdf(x, loc=2, scale=4), 'r-', lw=5, alpha=0.6, label='uniform pdf')
    #从冻结的均匀分布取值
    ax.plot(x, uniform_dis.pdf(x), 'k-', lw=2, label='frozen pdf')
    #计算ppf分别等于0.001,0.5,0.999时的x值
    vals = uniform_dis.ppf([0.001, 0.5, 0.999])
    print(vals)#[2.004 4.    5.996]

    #检测cdf和ppf的精确度
    print(np.allclose([0.001, 0.5, 0.999], uniform_dis.cdf(vals)))#结果为True

    r = uniform_dis.rvs(size=10000)
    ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
    plt.ylabel('Probability')
    plt.title(r'PDF of Unit({}, {})'.format(loc, loc+scale))
    ax.legend(loc= 'best', frameon = False)
    plt.show()
    
uniform_distribution(loc=2,scale=4)

运行结果如下:

 2)指数分布

        指数分布(也称为负指数分布)是描述泊松过程中的事件之间的时间的概率分布,即事件以恒定平均速率连续且独立地发生的过程。这表示如果一个随机变量呈指数分布,当s,t>0时有P(T>t+s|T>t)=P(T>s)。即,假如你在排队接受服务的时间长短服从指数分布,那么无论你已经排了多久的队,在排t分钟的概率始终是相同的,代码如下:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

def exponential_dis(loc=0, scale=1.0):
    '''
    指数分布按照定义只有一个参数lambda,这里的scale = 1/lambda
    param loc:定义域的左端点,相当于将整体分布沿x轴平移loc
    param scale:lambda的倒数,loc+scale表示改分布的均值,scale^2表示该分布的方差
    '''
    exp_dis = stats.expon(loc=loc, scale=scale)
    x = np.linspace(exp_dis.ppf(0.000001), exp_dis.ppf(0.999999), 100)
    fig, ax = plt.subplots(1, 1)

     #直接传入参数
    ax.plot(x, stats.expon.pdf(x, loc=loc, scale=scale), 'r-', lw=5, alpha=0.6, label='uniform pdf')
    #从冻结的均匀分布取值
    ax.plot(x, exp_dis.pdf(x), 'k-', lw=2, label='frozen pdf')
    #计算ppf分别等于0.001,0.5,0.999时的x值
    vals = exp_dis.ppf([0.001, 0.5, 0.999])
    print(vals)#[2.004 4.    5.996]

    #检测cdf和ppf的精确度
    print(np.allclose([0.001, 0.5, 0.999], exp_dis.cdf(vals)))

    r = exp_dis.rvs(size=10000)
    ax.hist(r, density=True, histtype='stepfilled', alpha=0.2)
    plt.ylabel('Probability')
    plt.title(r'PDF of Exp(0.5)')
    ax.legend(loc= 'best', frameon = False)
    plt.show()
    
exponential_dis(loc=0, scale=2)

运行结果如下:

 3)正态分布

正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。

若随机变量X服从一个数学期望为μ、方差为σ2的正态分布,记为N(μ,σ2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

import numpy as np
import matplotlib.pyplot as plt
import math

u = 0
#均值μ
u01 = -2
sig = math.sqrt(0.2)
#标准差

x = np.linspace(u-3*sig, u+3*sig, 50)
y_sig = np.exp(-(x-u)**2/(2*sig**2))/(math.sqrt(2*math.pi)*sig)
print(x)
print('='*20)
print(y_sig)
plt.plot(x, y_sig, 'r-', linewidth=2)
plt.grid(True)
plt.show()


总结

        本文为大家重点介绍了与人工智能有关的梳理统计方法,概率统计知识在人工智能领域发挥着非常重要的作用,如深度学习理论,概率图模型等都依赖于概率分布作为框架的基本建模语言,学习了解机器学习的概率统计对你的掌握百利无一害~~

        欢迎大家留言一起讨论问题~~~


 系列文章目录

第二章:机器学习的概率统计模型(附代码)(一)

第二章:机器学习的概率统计模型(附代码)(二)

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

机器学习的概率统计模型(附代码)(一) 的相关文章

  • 如何在Python中选择要写入(.csv)的列

    import csv f csv reader open lmt csv r open input file for reading Date Open Hihh mLow Close Volume zip f s plit it into
  • 组和平均 NumPy 矩阵

    假设我有一个任意的 numpy 矩阵 如下所示 arr 6 0 12 0 1 0 7 0 9 0 1 0 8 0 7 0 1 0 4 0 3 0 2 0 6 0 1 0 2 0 2 0 5 0 2 0 9 0 4 0 3 0 2 0 1 0
  • Python 的 mysqldb 晦涩文档

    Python 模块 mysqldb 中有许多转义函数 我不理解它们的文档 而且我努力查找它们也没有发现任何结果 gt gt gt print mysql escape doc escape obj dict escape any speci
  • 类型错误:float() 参数必须是字符串或数字,而不是“列表”python

    我的 Python 有问题 这是我的代码 def calcola a input b float a 0 split c float a 0 split d float a 0 split e float a 0 split j float
  • 使用 pandas 将字符串对象转换为 int/float

    import pandas as pd path1 home supertramp Desktop 100 life 180 data csv mydf pd read csv path1 numcigar Never 0 1 5 Ciga
  • Paramiko SSHException 通道已关闭

    我一直在使用 Paramiko 在 Linux Windows 机器上发送命令 它可以很好地在 Ubuntu 机器上远程执行测试 但是 它不适用于 Windows 7 主机 以下是我收到的错误 def unit for event self
  • Perl 是否有相当于 Python 的 `if __name__ == '__main__'` 的功能?

    有没有一种方法可以确定当前文件是否是 Perl 源中正在执行的文件 在 Python 中 我们使用以下结构来做到这一点 if name main This file is being executed raise NotImplemente
  • 张量流和线程

    下面是来自 Tensorflow 网站的简单 mnist 教程 即单层 softmax 我尝试通过多线程训练步骤对其进行扩展 from tensorflow examples tutorials mnist import input dat
  • reStructuredText:README.rst 未在 PyPI 上解析

    我有一个托管在 Github 和 PyPI 上的 Python 项目 在 Github 上 https github com sloria TextBlob blob master README rst https github com s
  • 将列表中的 None 替换为最左边的非 none 值

    Given a None 1 2 3 None 4 None None I d like a None 1 2 3 3 4 4 4 目前我已经用以下方法强制它 def replaceNoneWithLeftmost val last Non
  • 在seaborn中对箱线图x轴进行排序

    我的数据框round data看起来像这样 error username task path 0 0 02 n49vq14uhvy93i5uw33tf7s1ei07vngozrzlsr6q6cnh8w 39 png 1 0 10 n49vq
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • Django Rest Framework POST 更新(如果存在或创建)

    我是 DRF 的新手 我阅读了 API 文档 也许这是显而易见的 但我找不到一个方便的方法来做到这一点 我有一个Answer与 a 具有一对一关系的对象Question 在前端 我曾经使用 POST 方法来创建发送到的答案api answe
  • 在Python中连续解析文件

    我正在编写一个脚本 该脚本使用 HTTP 流量行解析文件 并取出域 目前仅将它们打印到屏幕上 我正在使用 httpry 将流量连续写入文件 这是我用来删除域名的脚本 usr bin python import re input open r
  • Python 导入非常慢 - Anaconda python 2.7

    我的 python import 语句变得非常慢 我使用 Anaconda 包在本地运行 python 2 7 导入模块后 我编写的代码运行得非常快 似乎只是导入需要很长时间 例如 我使用以下代码运行了一个 tester py 文件 imp
  • 更新 SQLAlchemy 中的特定行

    我将 SQLAlchemy 与 python 一起使用 我想更新表中等于此查询的特定行 UPDATE User SET name user WHERE id 3 我通过 sql alchemy 编写了这段代码 但它不起作用 session
  • 如何在Tensorflow中保存估计器以供以后使用?

    我按照教程 TF Layers 指南 构建卷积神经网络 以下是代码 https github com tensorflow tensorflow blob r1 1 tensorflow examples tutorials layers
  • Streamlabs API 405 响应代码

    我正在尝试使用Streamlabs API https dev streamlabs com Streamlabs API 使用 Oauth2 来创建应用程序 因此 首先我将使用我的应用程序的用户发送到一个授权链接 其中包含我的应用程序的客
  • 如何从 nltk 下载器中删除数据/模型?

    我在 python3 NLTK 中安装了一些 NLTK 包 通过nltk download 尝试过它们 但不需要它们 现在想删除它们 我怎样才能删除例如包large grammars来自我的 NLTK 安装 我不想删除完整的 NLTK 安装
  • 如何使用 Python 3 正确显示倒计时日期

    我正在尝试获取将显示的倒计时 基本上就像一个世界末日时钟哈哈 有人可以帮忙吗 import os import sys import time import datetime def timer endTime datetime datet

随机推荐

  • chatgpt赋能python:如何利用Python绘制窗口

    如何利用Python绘制窗口 作为一门高级编程语言 Python具备强大的绘图能力 可以用来创建各种窗口应用程序 本篇文章将介绍如何利用Python绘制窗口 并分析其在搜索引擎优化方面的作用 绘制窗口的基本步骤 要利用Python绘制窗口
  • 测试-python筑基1.1-(列表/元组/字典/集合/字符串)

    列表 列表 列表 一种将多个数据组合到一起的容器 标识符 关键字 list 给列表赋值变量名的时候 不要用关键字 list 1 定义一个空列表 list 2 1 2 3 4 5 定义一个有值的列表 不是数组 print type list
  • Spring+mybatis+Druid+AbstractRoutingDataSource配置多数据源切换进行读写分离

    自我理解是这样的 首先配置事务管理器设置设置方法是否是只读创建一个DynamicDataSourceTransactionManager的类继承DataSourceTransactionManager去重写doBegin与doCleanup
  • SPSS数据分析中出现的常见问题总结

    总结最近数据分析过程中遇到的一些问题的思考 1 问卷中多选题的录入与分析 2 数据分析流程的第一步 对所分析的样本数据本身的特征结构进行预分析 3 根据数据中的某个因素的几个水平来分析数据总体的差异性 4 根据数据中的变量之间的相关性 了解
  • 如何使用 MSYS2 编译最新版的 coreutils 源码(目前最新版本为 coreutils-9.4)

    文章目录 一 coreutils 源码下载 二 MSYS2 安装编译工具 1 pacman Suy 更新软件仓库 2 pacman S msys gcc 安装gcc 3 pacman S msys make 安装make工具 4 解压缩 c
  • python基础练习(猜拳游戏、扎金花游戏、购物小程序)

    猜拳游戏 需求分析 使用面向对象和python的基础语法 运用简单的逻辑处理实现猜拳游戏 要求游戏可以多次玩耍 要求统计分数 要求可以选择角色 玩家自己的类 class Owns chose 1 石头 2 剪刀 3 布 def init s
  • Java foreach语句的用法

    Java foreach语句用法使用 如何使用Java1 5出现的foreach语句 foreach语句 for循环 foreach语句的使用注意事项 如何使用Java1 5出现的foreach语句 foreach在遍历数组 集合方面 fo
  • 【图像分割】实现snake模型的活动轮廓模型以进行图像分割研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 图像分割是计算机视觉领域的一个重要研究方向
  • element中el-table根据状态改变样式,你不能错过的技能

    前言 在开发中 如何根据数据的状态来改变表格的样式一直是一个常见的难题 如果你也曾经为此苦恼过 那么本文将为你介绍如何使用 element 中的 el table 来实现这一目标 让你的数据展示更加直观 易于理解 需求效果 需求 表格中当前
  • 筛选kepler.csv中未下载到的kepid

    In 1 判断输入字符串是否在路径中函数 import os def findfile2 keyword keyword 9d int keyword judgeExist False root os path join C Users 9
  • snapgene设计引物_分子克隆之引物设计(一)

    分子克隆之引物设计 一 目的 将目的基因Homosapiens interleukin 37利用引物扩增表达带上限制酶酶切位点 再与载体pcDNA3 1 3xFlag C酶切连接 师兄给定的酶切位点是 固定 BamH I GGATCC Xh
  • bilibili直播间接收监听和发送弹幕api

    参考文 https blog csdn net fei347795790 article details 111164254 Python实现自动发送B站直播弹幕软件 https blog csdn net fzq13994952987 a
  • 双目相机计算稠密深度点云详解教程

    点击上方 计算机视觉工坊 选择 星标 干货第一时间送达 作者 本文为3D视觉开发者社区特约作者 熊猫飞天授权发布 引言 本教程主要内容为介绍如何使用双目相机计算出稠密的3D点云 主要涉及到elas包的使用 通过KITTI数据集和ZED相机进
  • node生成唯一设备id(node-machine-id)

    npm安装 npm install node machine id yarn安装 yarn add node machine id 有 异步 同步 两种生成方式 import machineId machineIdSync from nod
  • MYSQL

    regexp extract regexp extract str regexp idx str是被解析的字符串或字段名 regexp 是正则表达式 idx是返回结果 取表达式的哪一部分 默认值为1 0表示把整个正则表达式对应的结果全部返回
  • Synchronized锁对象详解

    synchronized 是我们的同步的一种选择 加锁就要有对应的钥匙 这个钥匙分为 当前类对象 当前class对象 第三方对象 synchronized 可以修饰 变量 方法 我们以方法举例可以有如下的几种情况 修饰静态方法 这里默认的锁
  • Netty和Tomcat区别

    Netty与Tomcat区别 它们的区别不少 最大的区别就在于通信协议 这是众所周知的 Tomcat是一个服务器 它一定是基于Http协议的 它的实质是一个基于http协议的web容器 Netty则不同 Netty可以通过编程自定义各种协议
  • docker学习:dockerfile介绍

    这里主要是介绍dockerfile dockerfile就是用来构建docker镜像的脚本 脚本就意味着会有相关的dockerfile命令 也是我们要学习的一部分 构建步骤 1 编写一个Dockerfile文件 2 docker build
  • win10网络诊断为DNS服务器未响应,Windows10网络诊断DNS服务器未响应的解决办法

    Windows10网络诊断DNS服务器未响应怎么办 不少win10系统用户在遇到网络无法连接的时候 诊断网络会提示Windows10网络诊断DNS服务器未响应 那么这个问题要如何解决呢 下面小编为大家带来详细的解决办法 Windows10网
  • 机器学习的概率统计模型(附代码)(一)

    目录 概率论 1 1 离散随机变量分布 1 伯努利分布 2 二项分布 3 泊松分布 1 2 连续随机变量分布 1 均匀分布 2 指数分布 3 正态分布 总结 系列文章目录 概率论 概率论 是研究随机现象数量规律的数学分支 随机现象是相对于决