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