在机器学习任务。我们应该得到一组具有约束的随机w.r.t正态分布。我们可以通过np.random.normal()
得到一个正态分布号,但它不提供任何绑定参数。我想知道如何做到这一点?如何在numpy的范围内获得正态分布?
回答
如果你正在寻找的Truncated normal distribution,SciPy的有一个功能叫truncnorm
这种分布的标准形式是一个标准的正常截断 区间[A,B] - 注意, a和b在标准法线的域 上定义。要转换剪辑的值对于特定均值和 标准偏差,使用:
A,B =(myclip_a - my_mean)/ my_std,(myclip_b - my_mean)/ my_std
truncnorm取A和B作为形状参数。
>>> from scipy.stats import truncnorm
>>> truncnorm(a=-2/3., b=2/3., scale=3).rvs(size=10)
array([-1.83136675, 0.77599978, -0.01276925, 1.87043384, 1.25024188,
0.59336279, -0.39343176, 1.9449987 , -1.97674358, -0.31944247])
上面的例子是由有界-2和2,并返回10个随机变元(使用.rvs()
方法)
>>> min(truncnorm(a=-2/3., b=2/3., scale=3).rvs(size=10000))
-1.9996074381484044
>>> max(truncnorm(a=-2/3., b=2/3., scale=3).rvs(size=10000))
1.9998486576228549
下面是-6直方图,6:
除了@bakkal建议(+1)你可能也想看看Vincent Mazet实现此目的的配方,由Christoph Lassner重写为py-rtnorm模块。
的参数化truncnorm
复杂,所以这里是转换参数化的东西更直观的功能:
from scipy.stats import truncnorm
def get_truncated_normal(mean=0, sd=1, low=0, upp=10):
return truncnorm(
(low - mean)/sd, (upp - mean)/sd, loc=mean, scale=sd)
如何使用它?
实例与参数发生器:意味着,标准偏差,和截断范围:
>>> X = get_truncated_normal(mean=8, sd=2, low=1, upp=10)
然后,可以使用X,以产生值:
>>> X.rvs() 6.0491227353928894
或者,numpy a rray用N产生的值:
>>> X.rvs(10) array([ 7.70231607, 6.7005871 , 7.15203887, 6.06768994, 7.25153472, 5.41384242, 7.75200702, 5.5725888 , 7.38512757, 7.47567455])
甲视觉例
这里是三个不同的截短的正态分布的情节:
X1 = get_truncated_normal(mean=2, sd=1, low=1, upp=10)
X2 = get_truncated_normal(mean=5.5, sd=1, low=1, upp=10)
X3 = get_truncated_normal(mean=8, sd=1, low=1, upp=10)
import matplotlib.pyplot as plt
fig, ax = plt.subplots(3, sharex=True)
ax[0].hist(X1.rvs(10000), normed=True)
ax[1].hist(X2.rvs(10000), normed=True)
ax[2].hist(X3.rvs(10000), normed=True)
plt.show()
精彩的回答,谢谢! – Gabriel
+1。但值得注意的是,如果函数内部立即使用'get_truncated_normal.rvs()',而不是在外部调用该函数,该函数将变得更快。当然,这只有在你想要随机抽签时才有用 –
- 1. 如何在PyTorch的范围[r1,r2]中获得均匀分布?
- 2. Rails在日期范围内获得相同的分段
- 3. 正态分布的范围之间的列的概率
- 4. 如何在mongodb的日期范围内获得记录?
- 5. SQL - 统计正态分布的数量范围
- 6. 如何获得一个月范围内指定日期的范围
- 7. 如何在DATETIME范围内“分组”?
- 8. 动态范围内的VBA范围值
- 9. numpy,如何生成一个正态分布的整数集合
- 10. 如何获得色彩的全范围?
- 11. 如何分配细胞的范围的范围内变化
- 12. 如何获得回调在类范围内使用“this”
- 13. 如何获得邮件在日期范围内?
- 14. 我如何获得范围内的蓝牙设备的名称?
- 15. 如何获得的范围内的两行之间
- 16. 获取分离范围内的值objet
- 17. 如何获得多态关联的范围
- 18. 如何获取URL内容的范围或范围
- 19. 如何获得数量范围内的最大顺序?
- 20. 如何获得给定范围内的文件字节?
- 21. 我如何获得日期范围内的周末天数
- 22. 如何获得使用范围内的整个色谱柱?
- 23. 如何使用window.crypto.getRandomValues获得特定范围内的随机值
- 24. 如何从XmlReader获得范围内的命名空间
- 25. 如何获得dom范围内的所有文本节点?
- 26. 如何获得不是工会范围的部分?
- 27. 如何获得solr结果中的分面范围?
- 28. 如何获得时间范围
- 29. Tinymce IE6 +如何获得工作范围?
- 30. 角度如何获得访问$范围var从模态
当不可t正常的随机样本按定义分布式数据是无界的? – Tom