python实现概率分布

简介: 1. 二项分布(离散) import numpy as np from scipy import stats import matplotlib.pyplot as plt ''' # 二项分布 (binomial distribution) # 前提:独立重复试验、有放回...

 

1. 二项分布(离散)

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

'''
# 二项分布 (binomial distribution)
# 前提:独立重复试验、有放回、只有两个结果
# 二项分布指出,随机一次试验出现事件A的概率如果为p,那么在重复n次试验中出现k次事件A的概率为:
# f(n,k,p) = choose(n, k) * p**k * (1-p)**(n-k)
'''

# ①定义二项分布的基本信息
p = 0.4 # 事件A概率0.4
n = 5   # 重复实验5次
k = np.arange(n+1) # 6种可能出现的结果
#k = np.linspace(stats.binom.ppf(0.01,n,p), stats.binom.ppf(0.99,n,p), n+1) #另一种方式


# ②计算二项分布的概率质量分布 (probability mass function)
# 之所以称为质量,是因为离散的点,默认体积(即宽度)为1
# P(X=x) --> 是概率
probs = stats.binom.pmf(k, n, p) 
#array([ 0.07776,  0.2592 ,  0.3456 ,  0.2304 ,  0.0768 ,  0.01024])
#plt.plot(k, probs)


# ③计算二项分布的累积概率 (cumulative density function)
# P(X<=x) --> 也是概率
cumsum_probs = stats.binom.cdf(k, n, p)
#array([ 0.07776,  0.33696,  0.68256,  0.91296,  0.98976,  1.     ])


# ④根据累积概率得到对应的k,这里偷懒,直接用了上面的cumsum_probs
k2 = stats.binom.ppf(cumsum_probs, n, p)
#array([0, 1, 2, 3, 4, 5])


# ⑤伪造符合二项分布的随机变量 (random variates)
X = stats.binom.rvs(n,p,size=20)
#array([2, 3, 1, 2, 2, 2, 1, 2, 2, 3, 3, 0, 1, 1, 1, 2, 3, 4, 0, 3])

#⑧作出上面满足二项分布随机变量的频数直方图(类似group by)
plt.hist(X)

#⑨作出上面满足二项分布随机变量的频率分布直方图
plt.hist(X, normed=True)
plt.show()

 

 

2. 正态分布(连续)

 

'''
标准正态分布
密度函数:f(x) = exp(-x**2/2)/sqrt(2*pi)

'''

x = np.linspace(stats.norm.ppf(0.01), stats.norm.ppf(0.99), 100)


# 概率密度分布函数(Probability density function)
# 之所以称为密度,是因为连续的点,默认体积为0
# f(x) --> 不是概率
probs = norm.pdf(x)
# plt.plot(x, probs, 'r-', lw=5, alpha=0.6, label='norm pdf')


# 累积概率密度函数 Cumulative density function
# 定积分 ∫_-oo^a f(x)dx  --> 是概率
cumsum_probs = stats.norm.cdf(x)


# 伪造符合正态分布的随机变量X
# 通过loc和scale参数可以指定随机变量的偏移和缩放参数。对于正态分布的随机变量来说,这两个参数相当于指定其期望值和标准差:
X = stats.norm.rvs(loc=1.0, scale=2.0, size=1000)

#⑨作出上面正态分布随机变量的频率分布直方图
plt.hist(X, normed=True, histtype='stepfilled', alpha=0.2)
plt.legend(loc='best', frameon=False)
plt.show()

# 对给定的数据进行参数估计。这里偷懒了,就用上面的X
mean, std = stats.norm.fit(X)
#array(1.01810091), array(2.00046946)

 

目录
相关文章
|
5月前
|
算法 数据可视化 数据挖掘
使用Python实现层次聚类算法
使用Python实现层次聚类算法
72 1
|
5月前
|
Python
使用Python实现基本的线性回归模型
使用Python实现基本的线性回归模型
165 8
使用Python实现基本的线性回归模型
|
2月前
|
机器学习/深度学习 数据采集 Python
利用Python实现简单的线性回归模型
【8月更文挑战第29天】本文将引导你了解并实践如何使用Python编程语言实现一个简单的线性回归模型。我们将通过一个实际的数据集,一步步地展示如何进行数据预处理、建立模型、训练及评估模型性能。文章旨在为初学者提供一个易于理解且实用的编程指南,帮助他们快速入门机器学习领域。
|
5月前
|
机器学习/深度学习 Python
python实现判别分析
python实现判别分析
58 1
|
5月前
|
算法 数据可视化 数据挖掘
使用Python实现高斯混合模型聚类算法
使用Python实现高斯混合模型聚类算法
96 3
|
5月前
|
算法 数据可视化 数据挖掘
使用Python实现K均值聚类算法
使用Python实现K均值聚类算法
47 1
|
5月前
|
算法 数据可视化 Python
使用Python实现K近邻算法
使用Python实现K近邻算法
51 3
|
5月前
|
机器学习/深度学习 算法 数据可视化
使用Python实现决策树算法
使用Python实现决策树算法
59 2
|
5月前
|
算法 Python
使用Python实现朴素贝叶斯算法
使用Python实现朴素贝叶斯算法
86 0
|
机器学习/深度学习 算法 数据挖掘
决策树算法及python实现
决策树算法及python实现
109 0
下一篇
无影云桌面