Python统计分析(1)——几种重要的概率分布:正态分布

2018年10月12日

正态分布

在统计学发展历史中,正态分布有着非常重要的地位,因为它允许从数学上近似不确定性和变异性。

虽然原始数据通常并不符合正态分布,但误差通常是符合正态分布的,对于大规模样本的均值和总数,也是一样的。

要将数据转换为z分数,需要减去数据的均值,再除以标准偏差。这样,所生成的数据才可以与正态分布进行对比。

标准化:标准化(也称为归一化),通过减去均值并除以标准偏差,将所有变量置于同一尺度。该方式避免了变量的原始测量规模对模型产生过度的影响。
我们一般称如上的标准化的值为z分数。这时,测量值可以用“偏离均值的标准偏差”表示,这样,变量对模型的影响就不会受到原始变量规模的影响。

绘制正态分布曲线

#导入工具包

import numpy as np

import matplotlib.pyplot as plt #绘图模块

import scipy.stats as stats  #该模块包含了所有的统计分析函数

import matplotlib.style as style

from IPython.core.display import HTML

​

#PLOTTING CONFIG 绘图配置

%matplotlib inline

style.use('fivethirtyeight')

plt.rcParams['figure.figsize']=(14,7)

plt.figure(dpi=100)

<matplotlib.figure.Figure at 0x1bd827ec6d8>

<matplotlib.figure.Figure at 0x1bd827ec6d8>

#PDF 概率密度函数 

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100))) #从(-4,4)中随机选取100个数,绘制该事件的概率密度函数

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100)),alpha=.15)#对曲线内部进行填充

​

#CDF 累积概率密度函数 

plt.plot(np.linspace(-4,4,100),stats.norm.cdf(np.linspace(-4,4,100))) #cdf函数表示之前的概率累积的结果,-4处为0,4处为1

​

#LEGEND 图例

plt.text(x=-1.5,y=0.7,s="pdf(normed)",rotation=.65,weight="bold",color="#008fd5")

plt.text(x=-0.4,y=0.5,s="cdf",rotation=.65,weight="bold",color="#fc4f30")

​

#Ticks 坐标轴

plt.tick_params(axis="both",which="major",labelsize=18)

plt.axhline(y=0,color="black",linewidth=1.3,alpha=.7)

​

在这里插入图片描述
#可以看出pdf是一个标准的正态分布曲线,均值为0,方差为1,符合该事件的规律。

#CDF 累积概率密度函数

plt.plot(np.linspace(-4,4,100),stats.norm.cdf(np.linspace(-4,4,100))) #cdf函数表示之前的概率累积的结果,-4处为0,4处为1

#LEGEND 图例

plt.text(x=-0.4,y=0.5,s="cdf",rotation=.65,weight="bold",color="#fc4f30")

Text(-0.4,0.5,'cdf')

在这里插入图片描述

均值

#不同的均值绘制出来的正态分布曲线形状也不同

​

#PDF  MU默认为0时

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100)))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100)),alpha=.15)

​

#PDF MU=2时

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),loc=2))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100)),alpha=.15)

​

#PDF MU=-2时

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),loc=-2))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100)),alpha=.15)

​

#LEGEND 图例

plt.text(x=-1,y=.35,s="$ \mu=0$",rotation=.65,alpha=.75,weight="bold",color="#008fd5")

plt.text(x=1,y=.35,s="$ \mu=2$",rotation=.65,alpha=.75,weight="bold",color="#fc4f30")

plt.text(x=-3,y=.35,s="$ \mu=-2$",rotation=.65,alpha=.75,weight="bold",color="#e5ae38")

​

#Ticks 坐标轴

plt.tick_params(axis="both",which="major",labelsize=18)

plt.axhline(y=0,color="black",linewidth=1.3,alpha=.7)

<matplotlib.lines.Line2D at 0x1bd859b9208>

在这里插入图片描述
#标准差

#当标准差不同时,正态分布曲线的形状也不同

plt.figure(dpi=100)

​

#PDF SIGMA=1

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=1))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=1),alpha=.15)

​

#PDF SIGMA=1

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=2))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=2),alpha=.15)

​

#PDF SIGMA=1

plt.plot(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=0.5))

plt.fill_between(np.linspace(-4,4,100),stats.norm.pdf(np.linspace(-4,4,100),scale=0.5),alpha=.15)

​

#LEGEND 图例

plt.text(x=-1,y=.35,s="$ \sigma=1$",rotation=.65,alpha=.75,weight="bold",color="#008fd5")

plt.text(x=2,y=.15,s="$ \sigma=2$",rotation=.65,alpha=.75,weight="bold",color="#fc4f30")

plt.text(x=0,y=.6,s="$ \sigma=0.5$",rotation=.65,alpha=.75,weight="bold",color="#e5ae38")

​

#Ticks 坐标轴

plt.tick_params(axis="both",which="major",labelsize=18)

plt.axhline(y=0,color="black",linewidth=1.3,alpha=.7)

<matplotlib.lines.Line2D at 0x1bd8556a780>

在这里插入图片描述
#只有标准差不同时,标准差越大,正态分布曲线越平缓,标准差越小,正态分布曲线越陡。

获取正态分布的随机几个样本
可以使用norm.rvs()其中默认均值=0,方差=1,也可以自己指定。

from scipy.stats import norm

#获得1个正态分布的随机样本

print(norm.rvs(),end="\n\n")

​

#获得10个正态分布的随机样本

print(norm.rvs(size=10),end="\n\n")

​

#自己指定均值和方差

print(norm.rvs(loc=1,scale=0.1),end="\n\n")

-0.8316623062885056

[-0.02327842  0.62434293 -1.09564122  0.7642425   1.5418008   0.19240094
 -0.67902596  1.89146273 -0.33651528  1.39595893]

0.9700560621457974

PDF 概率密度函数 (Probability Density Function)

import numpy as np

import matplotlib.pyplot as plt

%matplotlib inline

style.use('fivethirtyeight')

plt.rcParams['figure.figsize']=(14,7)

​

**#随机变量X、Y的相对概率**

x=-1

y=2

print("pdf(x)= {}\npdf(y)= {}".format(norm.pdf(x),norm.pdf(y)))

pdf(x)= 0.24197072451914337
pdf(y)= 0.05399096651318806

#绘制连续的概率密度曲线

x_s=np.linspace(-3,3,100)

y_s=norm.pdf(x_s)

plt.scatter(x_s,y_s)

<matplotlib.collections.PathCollection at 0x1bd85aca6a0>

在这里插入图片描述

CDF 累积概率密度函数 (Cumnlative Probability Density Function) 可以指定一个范围求累积概率密度


from scipy.stats import norm

#X小于0.3的概率密度之和
print("P(x<0.3)={}".format(norm.cdf(0.3)))
P(x<0.3)=0.6179114221889526

#X大于-0.2,小于0.2的概率密度之和

print("P(-0.2<x<0.2)={}".format(norm.cdf(0.2)-norm.cdf(-0.2)))

P(-0.2<x<0.2)=0.15851941887820603


猜你喜欢

转载自blog.csdn.net/weixin_42695959/article/details/84036577