对应于正态分布的拉丁超立方抽样——Python版
拉丁超立方抽样-正态分布
- 0、拉丁超立方抽样的理论基础
- 0.1、概况
- 0.2、基本原理
- 0.3、基本步骤
- 1、导入库和基本准备
- 2、生成两个(具有正态分布的随机变量)参数的随机数
- 2.1、生成第一个参数的随机数
- 2.2、生成第二个参数的随机数
- 3、将生成的随机数输出到Excel中
- 4、将生成的随机数输出到图像中
- 5、代码肯定可以实现抽样,若需一步一步的更详尽解释,请“挪步”佐佑思维公众号→免费、有问必答!
- 6、 ★佐佑思维二维码★
0、拉丁超立方抽样的理论基础
0.1、概况
拉丁超立方体采样(LHS)最早由McKay等提出,并由Iman和Conover进一步发展,在很多领域中具有广泛的应用性。
拉丁超立方抽样也是一种分层抽样,在蒙特∙卡罗抽样方法的基础上对采样策略进行了改进,从而做到在保持统计显著性的同时减小采样规模。根据对每个超立方体内样本点的确定方式不同,可将拉丁超立方抽样技术分为:
- 中值拉丁超立方抽样法
- 拉丁超立方重要抽样法
- 含随机排序法的拉丁超立方抽样
笔者重点介绍含随机排序法拉丁超立方抽样法的基本原理。
0.2、基本原理
拉丁超立方抽样的关键是对累积概率分布进行分层,累积概率在0到1之间,分成相等的间隔块后,根据间隔块的概率值得到样本区间。然后从每个样本区间中随机抽取样本,于是以抽样点代表每个区间的值。
根据n个随机变量x1x_1x1, x2x_2x2,∙∙∙, xkx_kxk,∙∙∙, xnx_nxn建立nnn维向量空间,每个随机变量都遵循一定的概率分布,xkx_kxk的累积概率分布函数可以表示为
yk=f(x)y_{k}=f\left ( x \right ) yk=f(x)
0.3、基本步骤
假设在每一维向量空间中抽取N个样本,得到拉丁超立方抽样模拟的步骤为:
- 将每一维向量空间分成N份,根据式上式的反函数求得对应区间,使得每个区间具有相同的概率;
- 在每一维的每个区间中随机选取一个点作为采样点;
- 对每一维空间选出的样本点进行随机排序组成各自向量;
- 将上面采集到的样本向量进行组合就得到一个k×Nk×Nk×N的样本矩阵。
如下图所示,累积概率分布函数曲线被分成三个区间,每个区间都抽取一个样本,每个区间都有样本取出,且一旦取出后,这个区间将不再被抽样。
避免了在抽样量较少时可能出现的“聚集”问题,样本可以更加准确反映输入概率分布,实际应用时具有高效性。
1、导入库和基本准备
#开头的基础设置
from __future__ import division
import math
import numpy as np
import matplotlib.pyplot as pl
from numpy.random import RandomState #引入伪随机数器
import scipy.stats as st #引入统计函数库,为了引出累计函数的逆函数
#获取随机参数数据
D = 2 #参数个数
N = 100 #拉丁超立方层数,最终生成的数组个数result = np.empty([N, D]) # N行D列的随机数组
e = np.empty([N, D]) # N行D列的随机数组---为了记录每个等概率区域边界的随机变量值
temp = np.empty([N]) #一维随机数组
emp = np.empty([N]) #一维随机数组---为了记录每个等概率区域边界的随机变量值
#print(result,e,temp) #检查到这里之前阶段代码的正确性
d = 1.0 / N
2、生成两个(具有正态分布的随机变量)参数的随机数
2.1、生成第一个参数的随机数
代码转第6条
2.2、生成第二个参数的随机数
代码转第6条
3、将生成的随机数输出到Excel中
代码转第6条
4、将生成的随机数输出到图像中
pl.figure(figsize=(22,22)) # 设置画布大小
pl.grid(linestyle='--') #设置网格线---这里是虚线
#==========字体的引入==========
import matplotlib.font_manager as fm
myfont = fm.FontProperties(fname=r"C:\\WINDOWS\\Fonts\\simsun.ttc") #将所给字体文件转化为此处可以使用的格式,可使用自己电脑自带的其他字体文件,你可以使用自己电脑C:\Windows\Fonts下的字体
#===绘制散点图===
X = result[:,0]
Y = result[:,1]
pl.scatter(X,Y)
#===图的标题---参数(图的标题,字体,字号, 颜色, 位置),注:颜色取值在0到1之间===
pl.title('作图',fontproperties=myfont, fontsize=20, color=(0.4,0.4,0.4), loc='center')
#===设置轴坐标刻度值的大小以及刻度值的字体===#***这个地方会报警告——无视(注意版本太新可能未必有这个命令)***
ax=pl.subplot(111) #注意:一般都在ax中设置,不在plot中设置,这个是用来设置多个子图的位置, labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
#===设置轴坐标的名称以及对应字体格式===
font2 = {'family': 'Times New Roman','weight': 'normal','size': 20,}
pl.xlabel('Dimension-1', font2)
pl.ylabel('Dimension-2', font2)
#===设置轴坐标的其他相关设置===para1=e[:-1,0] #因为正态分布的随机变量由负无穷到正无穷,而坐标值需要是个具体的值,而记录边界值的数组e 不是,包含"正无穷"点,故需要舍掉才容易表示到图上,
para2=e[:-1,1] # 数组e 的第一个数就是从第一个等概率区域的右边界点开始记录的,故相当于已经舍掉“负无穷”点#这里再舍掉“正无穷”点-即最后一个数据就是绘图轴坐标数据
#print(para)
biao_q1=np.around(para1, decimals=3) #numpy.around() 函数---要舍入的小数位数(默认值:0),如果小数为负数,则指定小数点左边的位数。1. 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。2. Decimal还可以用来限定数据的总位数。
biao_q2=np.around(para2, decimals=3)
pl.tick_params(axis='x', labelsize=10) # 设置x轴标签大小
pl.xticks(para1,biao_q1)
pl.xticks(rotation=80) # 设置x轴标签旋转角度
pl.tick_params(axis='y', labelsize=10) # 设置y轴标签大小
pl.yticks(para2,biao_q2)
pl.tight_layout()#自动调整标签使之不重叠,---“整个布局自适应”
#绘图并保存图片,且注意savefig和show的顺序一定不能变
pl.margins(0.01,0.03) #去除空白
fig = pl.gcf()
pl.show()
fig.savefig('LHS.svg', dpi=300) #dpi是设置清晰度的,大于300就比较清晰了
显示结果:
5、代码肯定可以实现抽样,若需一步一步的更详尽解释,请“挪步”佐佑思维公众号→免费、有问必答!
6、 ★佐佑思维二维码★
对应于正态分布的拉丁超立方抽样——Python版相关推荐
- 对应于对数正态分布的拉丁超立方抽样——Python版
拉丁超立方抽样-对数正态分布 0.拉丁超立方抽样的理论基础 0.1.概况 0.2.基本原理 0.3.基本步骤 1.导入库和基本准备 2.生成(具有对数正态分布的随机变量)参数的随机数 3.将生成的随机 ...
- 论文复现:模拟风电不确定性——拉丁超立方抽样生成及缩减场景(Matlab全代码)
风电出力的不确定性主要源于预测误差,而研究表明预测误差(e)服从正态分布且大概为预测出力的10%.本代码采用拉丁超立方抽样实现场景生成[1,2].基于概率距离的快速前代消除法实现场景缩减[3],以此模 ...
- 模拟光伏不确定性——拉丁超立方抽样生成及缩减场景(Matlab全代码)
光伏出力的不确定性主要源于预测误差,而研究表明预测误差(e)服从正态分布且大概为预测出力的10%.本代码采用拉丁超立方抽样实现场景生成[1,2].基于概率距离的快速前代消除法实现场景缩减[3],以此模 ...
- 试验设计——拉丁超立方抽样
目录 1 性质 2 原理 3 实现 4 结果 1 性质 当我们要对某个昂贵函数或者一些试验数据建立代理模型时,前期实验设计对于初始采样点的选取尤为重要,如何尽可能用少量点能够得到空间填冲效果好的初始 ...
- 拉丁超立方抽样 Latin hypercube sampling,java 代码
生成随机样本时,若是简单的随机抽样,会有数据过度聚集的问题,拉丁超立方抽样解决了这个问题. 下面用图说明两者的区别: 图中可以看出,简单随机抽样中的数据大部分在中间,而拉丁立方抽样则均匀产生在各个小区 ...
- 基于拉丁超立方抽样的风,光,负荷场景生成方法 风电功率场景生成 ,光伏功率场景生成,负荷场景生成
基于拉丁超立方抽样的风,光,负荷场景生成方法 风电功率场景生成 ,光伏功率场景生成,负荷场景生成 通过后向场景削减BR得到典型场景及其概率 提供参考文献,完美复现! 语言:MATLAB ID:6430 ...
- 拉丁超立方抽样的Python实现
一.什么是拉丁超立方抽样 拉丁超立方采样是一种分层的蒙特卡洛采样方法,适用于多维空间均匀采样,适合于样本数较少的情况下使用.[1] 采样思想为:假设系统有m个因素,每个因素有n个水平. ...
- matlab 超拉丁,拉丁超立方抽样 专注matlab代码下载 Downma.com 当码网
拉丁超立方抽样 关注次数: 95 下载次数: 9 文件大小: 60K 下载需要积分: 2 代码分类: 开发平台: matlab 上传会员: yhcpp 下载代码 预览代码 Downma.com:专注M ...
- 模拟负荷不确定性——拉丁超立方抽样生成及缩减场景(Matlab全代码)
与风电.光伏不确定性不同,负荷不确定性的分布函数.预测误差有别于风电.光伏出力的不确定性,本代码通过拉丁超立方抽样和快速前代消除法模拟了负荷的不确定性,并提供了如何修改分布函数/概率密度函数的思路. ...
最新文章
- Netty3架构解析
- 【PP生产订单】入门介绍(六)
- Python Unicode与中文处理
- sgi---1 vector
- 信息学奥赛一本通 1059:求平均年龄 | OpenJudge NOI 1.5 01
- C++/CLI学习入门
- dicom格式怎么转换_flv怎么转换成mp4格式?三种最常用的转换方法都在这了!
- 越狱后抹掉所有数据修复 Cydia
- Linux安装应用时需要考虑时区问题并修改时区
- 微信小程序实践——实验2天气查询小程序
- 为做了面向互联网部署(IFD)的Dynamics 365定制登录账号格式
- 软件插件化,大势所趋新势力
- eovs实训报告总结心得_实训报告心得体会
- C/C++中文帮助手册
- 分布式计算系统导论:原理与组成pdf
- 业内人士坦言——猎头公司做不大
- 怎么把raw转换成jpg格式?推荐两个raw转jpg的方法
- 模拟电路 二极管门电路(二)
- 拉普拉斯, 高斯, 高尔顿, 皮尔逊, 戈塞特, 费歇尔对统计学的发展贡献
- odoo开发笔记 -- 官方模块一览表