关于统计:常见统计学分布

正太散布参考资料 定义一维正太散布规范正太散布 二项分布参考资料 伯努利散布参考资料 均匀分布参考资料 beta散布

May 25, 2022 · 1 min · jiezi

关于统计:Introducing-Monte-Carlo-Methods-with-R第三章笔记

蒙特卡罗积分引言motivation数值办法求积分在统计计算中具备非常重要的位置,很多需要求边缘概率密度散布的状况(尤其是算贝叶斯后验)须要用到数值积分。 R中一般一维数值积分办法罕用的数值积分办法在不论是本科还是研究生的数值剖析中都进行了具体的介绍,包含基于梯形公式,辛普森公式,基于Romberg积分等办法,这篇文章中临时不进行具体介绍。值得一提的是,R中实现了两种一维的数值积分法:area(from MASS)和integrate。 试验1 利用R内置函数计算一维数值积分待求的积分如下: $$f(x)=\int\_{0}^{\infty}x^{\lambda-1}exp(-x)dx$$ 采纳integrate函数进行数值计算并和利用gamma函数求得的解析解进行比照,代码如下: > ch=function(la){integrate(function(x){x^(la-1)*exp(-x)},0,Inf)$val}> plot(lgamma(seq(0.01,10,le=50)),log(apply(as.matrix(seq(0.01,10,le=50)),1,ch)),xlab = "log(integrate(f))",ylab = expression(log(Gamma(lambda))))失去的后果如下图所示,能够看出在$\lambda \in [0.01,10]$的范畴内integrate函数求得数值积分和解析解并无显著差别。 第二个要进行数值积分的函数如下式所示,这个函数能够简略认为是当先验为均匀分布时10个柯西散布样本对模型参数的边缘后验(未进行归一化)。 $$m(x)=\int\_{-\infty}^{\infty}\sum^{10}*{i=1} \frac{1}{\pi} \frac{1}{1+(x*{i}-\theta)} dx$$ 设$\theta =350$,代码如下,从运行论断来看显然integrate函数算的有错,因为把积分下限从正无穷改为400后后果居然变小了。 > cac=rcauchy(10)+350> like=function(theta){+ u=dcauchy(cac[1]-theta)+ for(i in 2:10)+ u=u*dcauchy(cac[i]-theta)+ return(u)+ }> integrate(like,-Inf,Inf)5.559304e-44 with absolute error < 1.1e-43> integrate(like,-Inf,400)5.882426e-31 with absolute error < 1.1e-30从新生成10个样本,这次设置$\theta =0$,而后将integrate函数的后果和area函数的后果比照,代码如下。 > library(MASS)> cac=rcauchy(10)> nin=function(a){integrate(like,-a,a)$val}> nan=function(a){area(like,-a,a)}> x=seq(1,1000,le=10000)> y=log(apply(as.matrix(x),1,nin))> z=log(apply(as.matrix(x),1,nan))> plot(x,y,ylim = range(cbind(y,z)),lwd=2)> lines(x,z,col='sienna',lwd=6)试验后果如图所示,图中彩色线为积分限-integrate函数积分值的曲线,很显然谬误,黄色线为积分限-area函数积分值的曲线,其趋势根本正确。 经典蒙特卡罗积分从上文的试验能够看出,当积分的模式变得比较复杂时R内建的一维数值积分算法可能会不稳固。这种惯例数值积分办法在计算高维积分时也面临效率和精度问题。因而,面对统计推断中随处可见的高维简单积分,蒙特卡罗办法被用于解决这个问题。利用蒙特卡罗法进行数值积分的原理能够写成如下公式,其中$\mathbb{E}_{f}[h(X)]$示意蒙特卡罗生成的$X \sim f(x)$的大量样本的$h(x)$均值的实践表达式,将样本均值$\hbar_{n}$作为$\mathbb{E}_{f}[h(x)]$的估计量,就能够间接计算出在$ f(x)$撑持集上对$h(x)f(x)$进行积分的后果。 $$\begin{aligned}\mathbb{E}_{f}[h(X)]&=\int_{\mathcal{X}}^{}h(x)f(x)dx\hbar_{n} &=\frac{1}{n}\sum^{n}_{j=1}h(x_{j})\end{aligned}$$ 在利用场景中,最简略间接的办法就是将被积函数作为$h(x)$,将$f(x)$设为积分区间上的均匀分布$U(a,b)$,生成大量的$X \sim U(a,b)$样本点并用$\hbar_{n}$作为积分后果的估计值。 试验2 利用经典蒙特卡罗办法计算数值积分待求的积分如下: ...

March 7, 2021 · 1 min · jiezi

关于统计:Introducing-Monte-Carlo-Methods-with-R第二章笔记

随机变量生成这部分包含: 采纳R语言内建函数的办法;采纳基于变换(transformation)的办法;采纳承受-回绝(accept-reject)的办法;基于R内建函数hist(rgamma(200,2.5,4.5)) #依照gamma(2.5,4.5)生成100个样本点并画出hist直方图 hist(runif(200,min=2,max=5) )#依照在区间[2,5]上的均匀分布生成200个样本点并画出hist直方图 其余一些常见的R语言内建散布如下: 高斯分布:rnorm(n,mean=0,std=1)指数分布:rexp(n,rate=1)泊松散布:rpois(n,lambda)Weibull散布:rweibull(n,shape,scale=1)柯西散布:rcauchy(n,location=0,scale=1)Beta散布:rbeta(n,shape1.shape2)t散布:rt(n,df)F散布:rf(n,df1,df2)卡方散布:rchisq(n,df)二项分布:rbinom(n,size,prob)超几何散布:rhyper(nn,m,n,k)Logistic散布:rlogis(n,location=0,scale=1)负二项分布:rnbinom(n,size,prob)Wilcoxon散布:rwilcox(nn,m,n)对数正态分布:rlnorm(n,meanlog=0,sdlog=1)基于变换(transformation)基于变换的办法指的是采纳先依照简略的容易生成的散布生成样本点,而后利用某种变换关系将遵从简略散布的样本遵从满足简单散布的样本。比方先采纳R内建函数runif生成100个[0,1]均匀分布的样本点,而后利用变换将其变为遵从较简单的指数分布的样本点。 逆变换法(inverse transformation)这种办法的流程如下所示: 取得想要生成的散布的累积散布函数F(x)并推导出其反函数$F^{-1}(x)$;利用内建函数生成大量遵从均匀分布U(0,1)的样本点;对上一步生成的样本点进行$F^{-1}(x)$变换,其后果能够被认为是遵从想要生成的F(x)散布。为了了解这种办法的原理,首先给出如下定理: 若X是一个间断随机变量,其累积散布函数为F(x),则$U=F(x)\sim U(0,1)$。这个定理能够简略了解如下:累积散布函数F(x)是把所有X的取值一对一地映射到[0,1]区间上。离散来看,能够认为F(x)在数轴[0,1]上每个点均有一个样本,因而“线密度”是平均的。如果对于$U=F(x)∈[0,1]$进行抽样,抽中每个值的概率均等,因而U=F(x)遵从U(0,1)。 文献(Introduction to probability and mathematical statistics / Lee J. Bain, Max Engelhardt)对下面定理给出了如下一个比拟严格的证实: $$\begin{aligned}F_{u}(U)&=P(U \leq u) \\&=P(F(X) \leq u)\\ &=P(F^{-1}(F^{}(X)) \leq F^{-1}(u))\\&=P(X \leq F^{-1}(u))\\&=F(F^{-1}(u))\\&=u\end{aligned}$$ 因为$F_{u}(U)∈[0,1]$且$F_{u}(U)=u$,显然$U$遵从U(0,1) 如果间接利用内建函数生成了$u \sim U(0,1)$,则$F^{-1}(u)$和X同散布能够证实如下: $$\begin{aligned}F_{u}(U)&=P(U \leq u) \\&=P(F^{-1}(X) \leq F^{-1}(x))\\ &=P(F^{}(F^{-1}(X)) \leq F^{}(F^{-1}(x)))\\&=P(X \leq x)\end{aligned}$$ 上式中第一个等号是依据累积散布函数的定义,第二个等号是依据上文对于F(x)的定理,第三个等号是因为F(x)是枯燥增函数。 试验:利用逆变换办法生成指数分布指数分布的CDF为$F(x)=1-e^{-x}$,CDF的反函数为$x=-ln(1-F(x))$。R代码如下: > N=10000 #样本数量> U=runif(N) #生成的U(0,1)样本> X=-log(1-U) #进行逆变换> hist(X) #画出直方图> hist(rexp(N)) #画出R内建的指数分布直方图 其余基于变换的办法当$X \sim exp(1)$时,能够依据如下公式生成几种常见的散布: $$Y=2\sum_{j=1}^{\nu}X_{j} \sim \chi_{2 \nu }^2 \qquad \nu\in\mathbb{N}^{*}\\Y=\beta\sum_{j=1}^{\alpha}X_{j} \sim \Gamma(\alpha,\beta) \qquad \alpha\in\mathbb{N}^{*}\\Y=\frac{\sum_{j=1}^{a}X_{j}}{\sum_{j=1}^{a+b}X_{j}} \sim \beta(a,b) \qquad a,b\in\mathbb{N}^{*}\\$$ ...

February 20, 2021 · 1 min · jiezi

读书笔记数学之美下

作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧 本文为《数学之美》的读书笔记。 第19章 谈谈数学模型的重要性数学很重要第20章 谈谈最大熵模型思想:对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知条件,而对未知的情况不要做任何主观假设。$$P(d|x_1,x_2,...,x_{20}) = \frac{1}{Z(x_1,x_2,...,x_{20})} e^{\lambda_1 (x_1,d)+ \lambda_2(x_2,d)+ ... + \lambda_{20}(x_{20},d)}$$归一化因子:$$Z(x_1,x_2,...,x_{20}) = \sum{e^{\lambda_1 (x_1,d)+ \lambda_2(x_2,d)+ ... + \lambda_{20}(x_{20},d)}}$$第21章 拼音输入法的数学原理语言模型第22章 自然语言处理的教父马库斯和他的优秀弟子们人物传记第23章 布隆过滤器本质和哈希表一样,区别是映射函数精心设计过,在可接受的冲突率前提下,减少了内存的占用。第24章 贝叶斯网络(信念网络)马尔科夫链假设依赖关系是一维的,所以建立一维的链。但实际问题很复杂,很多依赖关系不能用链上的状态转移描述,需要用图描述。为了计算方便,依旧保持马尔科夫假设成立,即每一个状态只与和它直接相连的状态有关。第25章 条件随机场、文法分析及其它条件随机场:在隐马尔科夫模型中,$x_1,x_2,...$ 为观测值,$y_1,y_2,...$ 为隐状态,$x_i$ 只与 $y_i$ 有关。而条件随机场中,$x_i$ 与 $y_i$、$y_{i-1}$、$y_{i+1}$ 都有关。可以认为条件随机场是一种特殊的概率图模型。仍遵守马尔科夫假设。条件随机场是无向图。条件随机场通常用最大熵模型建模:$$P(x_1,x_2,..,x_n,y_1,y_2,...,y_m) = \frac{e^{f_1+f_2+...+f_k}}{Z}$$第26章 Viberti 算法隐马尔科夫模型可以转换为篱笆网络。Viberti 使用动态规划思想在这个网络中求最短路径。第27章 期望最大化算法第28章 逻辑回归和搜索广告搜索广告的发展:竞价排名 -> 预测用户点击 -> 全局优化预测广告点击率一般用逻辑回归做第29章 各个击破算法和 Google 云计算的基础MapReduce第30章 Google 大脑和人工神经网络人工神经网络人工神经网络与贝叶斯网络的关系: 有向图,且遵从马尔科夫假设训练方法相似对于很多模式分类问题,两种方法效果相近Google 大脑:分布式的人工神经网络第31章 大数据的威力数据很重要

August 17, 2019 · 1 min · jiezi

读书笔记数学之美中

作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧 本文为《数学之美》的读书笔记。 第 8~18 章介绍搜索引擎的内容与《这就是搜索引擎》相近,先跳过,有时间再补。

August 17, 2019 · 1 min · jiezi

读书笔记概率论与数理统计下

作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧 本文为概率论与数理统计的笔记。 11. 第十一周11.1 总体,样本11.2 常用统计量 样本均值:$\overline{X} = \frac{1}{n} \sum_{i=1}^{n} X_i$样本方差:$S^2 = \frac{1}{n-1} \sum_{i=1}{n}(X_i - \overline X)^2$样本 $k$ 阶矩:$A_k = \frac{1}{n} \sum_{i=1}^{n} X_i^k$样本 $k$ 阶中心矩:$B_k = \frac{1}{n} \sum_{i=1}^{n} (X_i-\overline X)^k$11.3 抽样分布 正态分布$\chi^2$ 分布(卡方分布) 定义:n个服从标准正态分布 $N(0,1)$ 的随机变量相互独立,则称 $\chi^2 = \sum_{i=1}^{n} X_i^2$ 服从自由度为 $n$ 的 $\chi^2$ 分布,记为$\chi^2 \sim \chi^2(n)$概率密度:$f_n(x) = \left \{\begin{matrix} \frac{2}{2\Gamma(n/2)}(\frac{n}{2})^{\frac{n}{2}-1}e^{-\frac{x}{2}} & ,x>0 \\ 0 & ,x \leq 0 \end {matrix} \right.$,其中 $\Gamma(\alpha) = \int_{0}^{+\infty} x^{\alpha-1}e^{-x}dx$性质: ...

June 13, 2019 · 2 min · jiezi

读书笔记概率论与数理统计中

作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧 本文为概率论与数理统计的笔记。 8. 第八周8.1 期望 离散型:$E(X) = \sum_{k=1}^{+\infty} x_k p_k$连续型:$E(X) = \int_{-\infty}^{+\infty} xf(x)dx$若 $Y = g(X)$,则: 离散型:$E(Y) = E(g(X)) = \sum_{k=1}^{+\infty} g(x_k)p_k$连续型:$E(Y) = E(g(X)) = \int_{-\infty}^{+\infty} g(x_k)p_k$若 $Z = h(X,Y)$,则 二元离散型:$E(Z) = E(h(X,Y)) = \sum_{k=1}^{+\infty} h(x_i,y_j)p(x_i,y_j)$二元连续型:$E(Z) = E(h(X,Y)) = \int_{-\infty}^{+\infty} \int_{-\infty}^{+\infty} h(x,y)f(x,y)dxdy$性质: $E(cX) = cE(X)$,$c$ 为常数$E(X+Y) = E(X) + E(Y)$$E(XY) = E(X)E(Y)$,当 $X$ 与 $Y$ 相互独立8.2 方差 方差:$D(X) = Var(X) = E\{[X-E(X)]^2\}$标准差(均方差):$\sigma(X) = \sqrt{D(X)}$离散型:$D(X) = \sum_{i=1}^{+\infty} [x_i - E(X)]^2 p_i$连续型:$D(X) = \int_{-\infty}^{+\infty} [x-E(x)]^2 f(x)dx$性质: ...

June 13, 2019 · 1 min · jiezi

读书笔记概率论与数理统计上

作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles,不允许转载~ 文章中的数学公式若无法正确显示,请参见:正确显示数学公式的小技巧 本文为概率论与数理统计的笔记。 1. 第一周1.1 样本空间随机试验的所有可能$S = \{e\}$1.2 事件和事件:$A \cup B$积事件:$A \cap B$、$AB$差事件:$A-B$对立事件:$\overline{A}$1.3 常用公式$\overline{A} \cap \overline{B} = \overline{A \cup B}$、$\overline{A} \cup \overline{B} = \overline{A \cup B}$$P(A\overline{B}) = P(A-B) = P(A)-P(AB)$加法公式:$P(A \cup B) = P(A) + P(B) - P(AB)$、$P(A \cup B \cup C) = P(A) + P(B) + P(C) - P(AB) - P(BC) - P(AC) + P(ABC)$2. 第二周2.1 古典概型(等可能概型)抽球问题:N个球,其中a个白球,b个黄球,不放回抽n次,球恰好k个白球概率 $$ P = \frac{C_a^k \cdot C_b^{n-k}}{C_{a+b}^n} $$ ...

June 13, 2019 · 3 min · jiezi

Golang 函数执行时间统计装饰器的一个实现

背景最近在搭一个新项目的架子,在生产环境中,为了能实时的监控程序的运行状态,少不了逻辑执行时间长度的统计。时间统计这个功能实现的期望有下面几点:实现细节要剥离:时间统计实现的细节不期望在显式的写在主逻辑中。因为主逻辑中的其他逻辑和时间统计的抽象层次不在同一个层级用于时间统计的代码可复用统计出来的时间结果是可被处理的。对并发编程友好实现思路统计细节的剥离最朴素的时间统计的实现,可能是下面这个样子:func f() { startTime := time.Now() logicStepOne() logicStepTwo() endTime := time.Now() timeDiff := timeDiff(startTime, endTime) log.Info(“time diff: %s”, timeDiff)}《代码整洁之道》告诉我们:一个函数里面的所有函数调用都应该处于同一个抽象层级。在这里时间开始、结束的获取,使用时间的求差,属于时间统计的细节,首先他不属于主流程必要的一步,其次他们使用的函数 time.Now() 和 logicStepOne, logicStepTwo 并不在同一个抽象层级。因此比较好的做法应该是把时间统计放在函数 f 的上层,比如:func doFWithTimeRecord() { startTime: = time.Now() f() endTime := Time.Now() timeDiff := timeDIff(startTime, endTime) log.Info(“time diff: %s”, timeDiff)}时间统计代码可复用&统计结果可被处理&不影响原函数的使用方式我们虽然达成了函数内抽象层级相同的目标,但是大家肯定也能感受到:这个函数并不好用。原因在于,我们把要调用的函数 f 写死在了 doFWithTimeRecord 函数中。这意味着,每一个要统计时间的函数,我都需要实现一个 doXXWithTimeRecord, 而这些函数里面的逻辑是相同的,这就违反了我们 DRY(Don’t Repeat Yourself)原则。因此为了实现逻辑的复用,我认为装饰器是比较好的实现方式:将要执行的函数作为参数传入到时间统计函数中。举个网上看到的例子实现一个功能,第一反应肯定是查找同行有没有现成的轮子。不过看了下,没有达到自己的期望,举个例子:type SumFunc func(int64, int64) int64func timedSumFunc(f SumFunc) SumFunc { return func(start, end int64) int64 { defer func(t time.Time) { fmt.Printf("— Time Elapsed: %v —\n", time.Since(t)) }(time.Now()) return f(start, end) }}说说这段代码不好的地方:这个装饰器入参写死了函数的类型:type SumFunc func(int64, int64) int64也就是说,只要换一个函数,这个装饰器就不能用了,这不符合我们的第2点要求这里时间统计结果直接打印到了标准输出,也就是说这个结果是不能被原函数的调用方去使用的:因为只有掉用方,才知道这个结果符不符合预期,是花太多时间了,还是正常现象。这不符合我们的第3点要求。怎么解决这两个问题呢?这个时候,《重构,改善既有代码的设计》告诉我们:Replace Method with Method Obejct——以函数对象取代函数。他的意思是当一个函数有比较复杂的临时变量时,我们可以考虑将函数封装成一个类。这样我们的函数就统一成了 0 个参数。(当然,原本就是作为一个 struct 里面的方法的话就适当做调整就好了)现在,我们的代码变成了这样:type TimeRecorder interface { SetCost(time.Duration) TimeCost() time.Duration}func TimeCostDecorator(rec TimeRecorder, f func()) func() { return func() { startTime := time.Now() f() endTime := time.Now() timeCost := endTime.Sub(startTime) rec.SetCost(timeCost) }}这里入参写成是一个 interface ,目的是允许各种函数对象入参,只需要实现了 SetCost 和 TimeCost 方法即可对并发编程友好最后需要考虑的一个问题,很多时候,一个类在整个程序的生命周期是一个单例,这样在 SetCost 的时候,就需要考虑并发写的问题。这里考虑一下几种解决方案:使用装饰器配套的时间统计存储对象,实现如下:func NewTimeRecorder() TimeRecorder { return &timeRecorder{}}type timeRecorder struct { cost time.Duration}func (tr *timeRecorder) SetCost(cost time.Duration) { tr.cost = cost}func (tr *timeRecorder) Cost() time.Duration { return tr.cost}抽离出存粹的执行完就可以销毁的函数对象,每次要操作的时候都 new 一下函数对象内部对 SetCost 函数实现锁机制这三个方案是按推荐指数从高到低排序的,因为我个人认为:资源允许的情况下,尽量保持对象不可变;同时怎么统计、存储使用时长其实是统计时间模块自己的事情。单元测试最后补上单元测试:func TestTimeCostDecorator(t *testing.T) { testFunc := func() { time.Sleep(time.Duration(1) * time.Second) } type args struct { rec TimeRecorder f func() } tests := []struct { name string args args }{ { “test time cost decorator”, args{ NewTimeRecorder(), testFunc, }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got := TimeCostDecorator(tt.args.rec, tt.args.f) got() if tt.args.rec.Cost().Round(time.Second) != time.Duration(1) * time.Second.Round(time.Second) { “Record time cost abnormal, recorded cost: %s, real cost: %s”, tt.args.rec.Cost().String(), tt.Duration(1) * time.Second, } }) }}测试通过,验证了时间统计是没问题的。至此,这个时间统计装饰器就介绍完了。如果这个实现有什么问题,或者大家有更好的实现方式,欢迎大家批评指正与提出~原文地址:https://blog.coordinate35.cn/… ...

March 18, 2019 · 2 min · jiezi