Python统计之Beta分布

文章目录

Beta分布

投硬币,硬币是正还是反,这属于两点分布的问题。

疯狂投硬币,正面出现的次数,服从二项分布【Python】从二项分布到泊松分布

二项分布中,若特定时间内的伯努利试验次数趋于无穷大,那么在某一时刻发生某事件的概率,服从泊松分布

在某一时刻,发生第N次事件,其概率服从 Γ \Gamma Γ分布:【Python】Gamma分布详解

回到抛硬币的问题,如果硬币出现正反的概率是未知的,考虑到时间地点重力等因素的不同,硬币出现正面的概率甚至可能是不稳定的,换言之,硬币出现正面的概率,或许也是服从某种分布的。

暂且将这个概率设为 θ \theta θ,则经过n次伯努利试验,在 θ \theta θ发生的情况下,正面出现 k k k次的概率为

π ( k ∣ θ ) = ( n k ) θ k ( 1 − θ ) n − k \pi(k\vert\theta)=\binom{n}{k}\theta^k(1-\theta)^{n-k} π(kθ)=(kn)θk(1θ)nk

由于这个 θ \theta θ实际上是未知的,但这个 P P P却可通过不断地伯努利试验来去逼近,所以接下来就可以通过贝叶斯公式,来将 θ \theta θ表达出来

π ( θ ∣ k ) = π ( k ∣ θ ) π ( θ ) ∫ π ( k ∣ θ ) π ( θ ) d θ \pi(\theta\vert k)=\frac{\pi(k\vert\theta)\pi(\theta)}{\int\pi(k|\theta)\pi(\theta)\text d\theta} π(θk)=π(kθ)π(θ)dθπ(kθ)π(θ)

其中, π ( θ ∣ k ) \pi(\theta\vert k) π(θk)表示 k k k发生的情况下, θ \theta θ发生的概率; π ( θ ) \pi(\theta) π(θ) θ \theta θ发生的概率。

θ \theta θ服从均匀分布,则在 ( 0 , 1 ) (0,1) (0,1)范围内,其概率密度 π ( θ ) = 1 \pi(\theta)=1 π(θ)=1,于是 π ( θ ∣ k ) \pi(\theta\vert k) π(θk)可以写为

π ( θ ∣ k ) = θ k ( 1 − θ ) n − k ∫ θ k ( 1 − θ ) n − k d θ \pi(\theta\vert k)=\frac{\theta^k(1-\theta)^{n-k}}{\int\theta^k(1-\theta)^{n-k}\text d\theta} π(θk)=θk(1θ)nkdθθk(1θ)nk

由于 Γ ( x ) = ∫ 0 ∞ t x − 1 e − t d t \Gamma(x)=\int^\infty_0t^{x-1}e^{-t}\text dt Γ(x)=0tx1etdt,则上式可写为

π ( θ ∣ k ) = Γ ( n + 1 ) Γ ( k + 1 ) Γ ( n − k + 1 ) θ k ( 1 − θ ) n − k \pi(\theta\vert k)=\frac{\Gamma(n+1)}{\Gamma(k+1)\Gamma(n-k+1)}\theta^k(1-\theta)^{n-k} π(θk)=Γ(k+1)Γ(nk+1)Γ(n+1)θk(1θ)nk

此即 B \Beta B分布。

所以, B \Beta B分布就是在抛 n n n次硬币,出现 k k k次正面后,则单次抛硬币出现正面的概率。

beta函数

在Numpy中,random.beta(a,b)即为 B \Beta B分布,其表达式为 p ( x ) = Γ ( a + b ) Γ ( a ) Γ ( b ) x a − 1 ( 1 − x ) b − 1 p(x)=\frac{\Gamma(a+b)}{\Gamma(a)\Gamma(b)}x^{a-1}(1-x)^{b-1} p(x)=Γ(a)Γ(b)Γ(a+b)xa1(1x)b1

显而易见,当 a = b = 1 a=b=1 a=b=1时, p ( x ) = 1 p(x)=1 p(x)=1,退化为均匀分布。

当a和b的取值不同时, B \Beta B分布表现出不同的分布特性

import numpy as np
import matplotlib.pyplot as plt
from numpy.random import beta

a_s = [0.5, 5, 1, 2, 2]
b_s = [0.5, 1, 3, 2, 5]

for a,b in zip(a_s, b_s):
    xs = beta(a, b, size=20000)
    plt.hist(xs, 100, alpha=0.5, label=f"a={a}, b={b}")

plt.legend()
plt.show()

效果为

在这里插入图片描述

### AS608指纹传感器与STM32的集成 AS608是一款广泛使用的光学指纹传感器,通常通过串口(UART)接口与微控制器通信。对于STM32平台,可以通过标准库或HAL库实现其驱动程序开发。 #### UART配置 在STM32中,AS608主要依赖于UART模块进行数据传输。以下是UART初始化的一个基本示例: ```c #include "stm32f1xx_hal.h" void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 9600; // 默认波特率设置为9600bps huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; HAL_UART_Init(&huart1); } ``` 此部分代码用于初始化USART1外设,确保它能够以指定参数运行[^2]。 #### 数据包结构解析 AS608的数据交互基于特定命令帧格式完成。每一帧由起始字节、地址码、指令码以及校验和组成。发送给AS608的每条命令都需要遵循该协议。 以下是一个简单的函数模板用来构建并发送这些命令至传感器: ```c #define FINGERPRINT_STARTCODE (uint16_t)0xEF01 #define FINGERPRINT_ADDR ((uint8_t[]){0xFF, 0xFF, 0xFF, 0xFF}) // 发送命令到AS608 int sendFingerprintCommand(uint8_t cmdPacket[], uint16_t packetLen){ int i=0; while(i<packetLen){ HAL_UART_Transmit(&huart1,&cmdPacket[i],1,100); i++; } return i; } // 构建完整的命令包 void buildAndSendCmd(uint8_t commandCode,uint8_t paramCount,uint8_t params[]){ uint8_t cmdPacket[12]; uint16_t checksum=0; memcpy(cmdPacket,FINGERPRINT_ADDR,sizeof(FINGERPRINT_ADDR)); cmdPacket[sizeof(FINGERPRINT_ADDR)]=(FINGERPRINT_STARTCODE>>8)&0xFF; cmdPacket[sizeof(FINGERPRINT_ADDR)+1]=FINGERPRINT_STARTCODE&0xFF; cmdPacket[sizeof(FINGERPRINT_ADDR)+2]=(paramCount+4)>>8 & 0xFF ; cmdPacket[sizeof(FINGERPRINT_ADDR)+3]=(paramCount+4) & 0xFF ; cmdPacket[sizeof(FINGERPRINT_ADDR)+4]=commandCode; for(int j=0;j<paramCount;j++){ cmdPacket[sizeof(FINGERPRINT_ADDR)+5+j]=params[j]; checksum+=params[j]; } checksum +=(paramCount+4)+(commandCode+FINGERPRINT_STARTCODE); cmdPacket[sizeof(FINGERPRINT_ADDR)+5+paramCount]=(checksum >>8 )&0xFF; cmdPacket[sizeof(FINGERPRINT_ADDR)+5+paramCount+1]=checksum &0xFF; sendFingerprintCommand(cmdPacket,sizeof(cmdPacket)); } ``` 以上代码片段展示了如何创建一个通用的方法来封装向AS608发出的各种请求操作[^3]。 #### 接收响应处理 当接收到来自AS608的消息时,则需按照相同的帧格式对其进行解码分析。这一步骤同样重要,因为只有正确理解返回的结果才能进一步采取行动。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值