蒙特卡洛方法与Q-Q图

文章目录

  • 蒙特卡洛方法与Q-Q图
    • 蒙特卡洛方法
      • 蒙特卡洛的定义和基本步骤
      • 一些常用的概率论相关函数
      • 使用蒙特卡洛验证大数定理
    • Q-Q图
      • Q-Q图的定义及用途
import numpy as np
from numpy.linalg import inv,eig
import matplotlib.pyplot as plt
import pandas as pd
from scipy.stats import norm

蒙特卡洛方法

蒙特卡洛的定义和基本步骤

蒙特卡洛是一个赌场的名字,我对他的理解大概是这一个使用随机数暴力求解的算法。其步骤主要为以下三个:

  • 构造或描述概率过程
  • 实现从已知概率分布抽样
  • 建立各种估计量。

一些常用的概率论相关函数

  • 使用np.random.seed()可以设置随机数种子,随机数种子有三位数的int,设置随机数种子后,每次生成的随机数均相同,不填入种子,则生成的随机数不同。
  • 使用np.random.normal(均值, 标准差, 样本个数) 生成服从N(均值,标准差)N(均值,标准差)N(均值,标准差)的确定个数的样本。
  • 使用np.random.uniform(下界, 上界, n) 生成服从均匀分布U(a,b)U(a,b)U(a,b)的确定个数的样本。
  • 使用np.random.binomial(n, p, n) 生成服从二项分布b(n,p)b(n,p)b(n,p)的确定个数的样本。
  • 使用np.random.exponential(1/lambda): 指数分布,生成服从指数分布EXP(1λ)EXP({1\over{\lambda}})EXP(λ1​)的确定个数的样本。
  • 使用np.random.poisson(lam):生成服从参数λ\lambdaλ确定的泊松分布的确定个数的样本。
mu = 0;sigma = 1;n=10000
x = np.random.normal(mu,sigma,n)
# x =np.random.uniform(2,4,n)
plt.hist(x,bins=300)
plt.axvline(x=mu,color = "red",label="u")
plt.legend()

<matplotlib.legend.Legend at 0x2bd3b09ba00>

使用蒙特卡洛验证大数定理

  • 生成一个确定的分布,我这里使用均匀分布
  • 每次抽样,计算均值,
  • 画均值图像(大数定理表明服从正态分布)
  • 与总体均值比对
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #中文标签
a = 2;b = 5;n = 10000 #抽样个数
e = (a+b)/2 #计算得出的总体均值
E = list()  #样本均值列表
mean_e = list() # 样本均值的均值存储列表
for i in range(1000):x = np.random.uniform(a,b,n) #抽10000个样本E.append(np.mean(x)) #储存每一次x的均值mean_e.append(np.mean(E)) #储存每一次均值的均值
plt.figure("样本均值的分布")
plt.hist(E,bins = 100)
plt.axvline(x=e,color = "red")
plt.title("均值的分布情况")

Text(0.5, 1.0, ‘均值的分布情况’)

由大数定理可以得知,样本的均值是总体均值的无偏估计,即 E(E(Xˉ))=μE( E(\bar{X}) ) = \muE(E(Xˉ))=μ
即当抽样检验的次数越多时,样本均值的数学期望(均值)会越来越接近总体均值

plt.figure(112)
plt.title("均值的期望趋势")
plt.scatter(range(1000),mean_e,label = "均值的期望")
plt.axhline(y=e,color = "red",label = "总体均值")
plt.legend()

<matplotlib.legend.Legend at 0x2bd3d5731f0>

Q-Q图

Q-Q图的定义及用途

  • Q-Q图的横纵坐标均为两个分布的分位数,用于比较两个分布是否一致的情况,若一致,则两个分位数的分位点是相同的。则此时的Q-Q图应是一条直线,若分布完全相同则为 y=xy=xy=x 的直线。
  • 若两个分布相同但参数不同,则呈现为一条直线,如当横轴分布为标准正态分布N(0,1)N(0,1)N(0,1) ,纵轴为正态分布N(μ,σ)N(\mu,\sigma)N(μ,σ)时,直线斜率为σ\sigmaσ,截距μ\muμ。
  • 值得注意的是:如果我们将一个某分布的样本直接根据他们的取值从小到大排列,得到的就是其分位数的函数,因为从小到大排列时,此时函数自变量为个数(即如1%个数的样本),因变量为这1%样本对应的上限值,也就是分位数
from math import sqrt
n = 10000
a = 2;b=3
x = np.random.normal(0,1,n)
y = (x+a)/b #生成(x+a)/b的分布,
y.sort() # 将这些个体从小到大排列的话,便是在横坐标函数的横坐标,即分位数。
prob = (np.arange(n)+1/2)/n #生成[0,1]间连续分布的n个的采样值(概率值)
q = norm.ppf(prob,a/b,1/b) #ppf正态分布求解分位数的函数,第一个参数是对应的概率值,所以使用[0,1]均匀分布的函数
# y 是需要我们验证的分布,因为其是由x变换求得的,q是由a/b、1/b生成的,是用来对比的
plt.scatter(x=q,y=y,color='red',label = "理想计算值分位数散点")
plt.plot(y,y,color = 'blue',label = "y=x参考线")
plt.legend()
plt.title("Q-Q图")
plt.xlabel("理想的分布")
plt.ylabel("实际的散点分布")

Text(0, 0.5, ‘实际的散点分布’)

可以看出 y=x+aby={x+a\over{b}}y=bx+a​ 服从N(ab,1b)N({a\over{b}},{1\over{b}})N(ba​,b1​),
符合我们的计算 E(y)=E(xb)+E(ab)=0+abE(y)= E({x\over{b}})+E({a\over{b}})=0+{a\over{b}}E(y)=E(bx​)+E(ba​)=0+ba​
D(y)=D(xb)+D(ab)=1b2∗1+0=1b2==>σ=1bD(y) = D({x\over{b}})+D({a\over{b}}) = {1\over{b^2}}*1 + 0 = {1\over{b^2}} ==> \sigma = {1\over{b}}D(y)=D(bx​)+D(ba​)=b21​∗1+0=b21​==>σ=b1​

jupyter源文件在此处

机器学习实战2--蒙特卡洛方法与Q-Q图(2022/10/12)相关推荐

  1. 机器学习笔记马尔可夫链蒙特卡洛方法(二)马尔可夫链与平稳分布

    机器学习笔记之马尔可夫链蒙特卡洛方法--马尔可夫链与平稳分布 引言 回顾:蒙特卡洛方法 马尔可夫链与平稳分布 马尔可夫链 平稳分布 细致平衡 关于平稳分布的补充 马尔可夫链的本质 平稳分布的收敛性证明 ...

  2. 机器学习day12 机器学习实战adaboost集成方法与重新进行疝马病的预测

    今天终于完成了分类器的学习,SVM基本不怎么会,很是头疼,先放一下吧,有机会问问大神讲解一下.接下来的几天进行监督学习回归部分的学习,先看看adaboost的理解. 我们再决定一个重要的事情时,往往不 ...

  3. 机器学习笔记之马尔可夫链蒙特卡洛方法(三)MH采样算法

    机器学习笔记之马尔可夫链蒙特卡洛方法--MH采样算法 引言 回顾:马尔可夫链与平稳分布 马尔可夫链 平稳分布 MH采样算法 采样思路 MH采样算法过程 引言 上一节介绍了马尔可夫链(Markov Ch ...

  4. 机器学习笔记之马尔可夫链蒙特卡洛方法(四)吉布斯采样

    机器学习笔记之马尔可夫链蒙特卡洛方法--吉布斯采样 引言 回顾:MH采样算法 基于马尔可夫链的采样方式 细致平衡原则与接收率 MH采样算法的弊端 吉布斯采样方法 吉布斯采样的采样过程 吉布斯采样的推导 ...

  5. 《机器学习实战》笔记(04):基于概率论的分类方法 - 朴素贝叶斯分类

    基于概率论的分类方法:朴素贝叶斯分类 Naive Bayesian classification 这大节内容源于带你理解朴素贝叶斯分类算法,并非源于<机器学习实战>.个人认为<机器学 ...

  6. 《机器学习实战》学习笔记(四):基于概率论的分类方法 - 朴素贝叶斯

    欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...

  7. 统计学方法机器学习实战(二) K近邻算法

    目录 一.前言: 二.理论难点: 距离度量: 欧式距离: 三.数据可视化 四.数据归一化: 五.代码实践: 理论补充 实验一: 海伦约会 实验二 使用sklearn实现knn 六.总结 1.kNN算法 ...

  8. Python机器学习实战:掌握这四个特征选择方法,提升模型预测性能

    机器学习实战:这里没有艰深晦涩的数学理论,我们将用简单的案例和大量的示例代码,向大家介绍机器学习的核心概念.我们的目标是教会大家用Python构建机器学习模型,解决现实世界的难题. 当数据集包含很多特 ...

  9. 机器学习实战之基于概率论的分类方法:朴素贝叶斯

    基于概率论的分类方法:朴素贝叶斯 引入 1 基于贝叶斯决策理论的分类方法 1.1 条件概率 1.2 使用条件概率来分类 1.3 使用朴素贝叶斯进行文档分类 2 使用Python进行文本分类 2.1 准 ...

最新文章

  1. 一图读懂《“十四五”软件和信息技术服务业发展规划》
  2. Visual Studio的一些快捷键(转载)
  3. for java_Java For循环
  4. Docker网络配置进阶
  5. Swagger UI
  6. BugkuCTF-Misc:come_game
  7. 【转载保存】hadoop学习之wordcount运行错误处理
  8. oracle创建多个游标,Oracle——游标的创建和使用
  9. 疫情蔓延让这项CV技术突然火了,盘点开源代码
  10. another app is currently holding the yum lock;waiting for it to exit...
  11. Sublime Text4添加配色主题
  12. pandas python groupby_python – pandas groupby方法实际上是如何工作的?
  13. 手动配置gradle
  14. 未能创建可接受的游标。
  15. java模板和回调机制学习总结
  16. vector容器v1、v2之间相互赋值的三种方法及易错点详解
  17. Linux系统CentOS7破解密码
  18. 七、入门python第七课
  19. 树莓派Linux开机使用root自动运行python的pyqt文件
  20. 研究生院校推荐——复旦大学工研院

热门文章

  1. Ubuntu 16.04 安装pyk4a
  2. Android 意图(Intent)
  3. 不敢说最快!但是这款CRAS C700绝对是我们见过最漂亮的SSD
  4. 版权概念小结(音乐方面)
  5. vs读取txt文件 中文乱码
  6. Java学习的第一道垲
  7. 《版权与版权贸易》第二章 版权的内容
  8. 任何物体都在以光速运动,你能理解这一认识吗?
  9. 计算机主机通常包括( ) a运算器,通常我们把( )称为计算机主机. A. 运算器 B. 运算器.控制器和内存 C. 运算器和控制器 D. 运算器和内存...
  10. 基于vue的todolist案例