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
他们都利用直方图去把这个内容给展现出来。
先看一个比较糙的。
从这个图就有一点那个趋势了,不太很像,换一个数量多的。
这部分的代码如下(代码很简单,仅仅作为一个简单的示例):
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)