实验三:获取正态分布的数据

2018/10/02

这部分实验用于真正理解正态分布是什么样子的。一定要理解这个概率密度和真实的分布模样,也回答了一部分实验一中的疑问。
该部分实验的作图代码位于:
/root/OldFile/sklearn/data_distribution

前两天的实验一实验二中使用了这个正态分布的函数,
说到这个函数提一句,就是我看别人还有用别的语句写的。
转载:https://blog.csdn.net/u013571243/article/details/48998619
这个主要是为了演示这个条形图的画法。(貌似跟我理解的有些许不同)
上面这个,写的真不错。我还去搜了numpy.random.randn的具体用法,就是返回一个正态分布的序列。


这个日志是为了解决实验一中的一些疑问,就是自己弄的不明白的那个地方。

怎么说,我一直以来都把这个概率密度曲线和实际的数据分布曲线给弄混了。


正态分布

请看,这是一个均值为0,方差为1的标准正态分布。
但是你能看出来这是一个正态分布吗,因为在我的印象中,那个凸起的形状在我脑海里印象太深刻了。
但是这是真真切切的用正态分布的API画出来的。

所以,我还是对这部分内容给搞混了。
看上面那个网址也好,看下面这个也好,
https://blog.csdn.net/bitcarmanlee/article/details/79153932
他们都利用直方图去把这个内容给展现出来。

先看一个比较糙的。


正态分布及散点图

从这个图就有一点那个趋势了,不太很像,换一个数量多的。


1000个点的正态分布

这部分的代码如下(代码很简单,仅仅作为一个简单的示例):

15 def PlotMy():
 16     Filename = 'normal_dir.png'
 17     dot_nums = 100
 18     y = np.random.normal(0,1,dot_nums)
 19     x = np.arange(-3,3,6.0 /dot_nums)
 20 
 21     plt.scatter(x,y,color = "red")
 22     plt.hist(y,bins = 100)    
 23     plt.savefig(Filename)
 24     import os
 25     os.system("sz "+ Filename)

下面对这部分的内容进行一下解释:
首先我通过np的函数获取了数据的分布,这里需要注意的是,我利用np的随机函数生成的数组序列,他的序列只有一个维度,第一个而且这个数还有小于0 的,这是怎么回事。
仔细想一想,这个东西其实是这个道理,他生成的数据满足这个分布,所以只有一个维度。以前都是从概率密度函数的角度入手,然后想当然的就觉得y轴上就应该是那种凸起。

其次,那既然出现了这种数据,我应该怎么样去看出来他是这个分布呢,先不说那些后面参数检验的东西,就说我从简单的图标上来看出来。所以才有了后面的这个直方图的画法。
一定要注意,这个api接受的是一个序列,他自己回去统计各个部分的频数(不规一化的话)。然后这个时候出现的这个图形就是正态分布了。
为什么?所以这正是我前面疑惑的地方。
现在说明一下正态分布概率密度函数的真正意义,(看来以前都学死了,概率论考了满分有个屁用)以标准正态分布为例。
横轴表示数据分布的取值范围,而竖轴表示在这个x轴上的点的位置,取值的概率。这一点好像不是那么容易理解。拿一个实际的例子来说明,比如书上爱用的,就是灯泡的寿命。从曲线上看来好像靠近均值的部分是真正的出现的多的部分,那么一个灯泡的均值是700,那么就是在700左右的容易取值,那么相应的概率也就搞了。
回答上面的问题,以频率去近似模拟这个概率,不久出来这个正态分布类似的直方图了。
我对那个落球的实验印象很深刻,但是一定要明白,最后是他的数量成为了一个正态分布曲线。
(还得好好吸收一下,并不是那么容易理解,所有后面的话,一定要把那个大数定律给实验一下)


通过相应的拟合操作,画出来的曲线:

归一化后正态概率曲线

但是这里有一个问题就是,不知道为什么这个图没有自动伸缩,我去找一找。
转载自: https://stackoverflow.com/questions/45757260/matplotlibs-autoscale-doesnt-seem-to-work-on-y-axis-for-small-values
这个据说是一个bug,按说不应该出现在我这个里面的,不知道是不是hist的问题。

调整后

目前的代码是:

18 def PlotMy():
 19     Filename = 'normal_dir.png'
 20     dot_nums = 10000
 21     mu = 0
 22     sigma = 1
 23     y = np.random.normal(0,1,dot_nums)
 24     x = np.arange(-3,3,6.0 /dot_nums)
 25                                                                  
 26     n,bins,patched = plt.hist(y,bins = 100,normed=1)
 27     y = scipy.stats.norm.pdf(bins,mu,sigma) 
 28     plt.plot(bins,y,sigma)
 29     dy = (max(y) - min(y)) * 0.1
 30     plt.ylim((0,max(y) + dy))
 31     plt.savefig(Filename)
 32     import os
 33     os.system("sz "+ Filename)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值