截断正态分布(Truncated normal distribution)

    xiaoxiao2021-03-25  74

    Truncated normal distribution - Wikipedia

    Normal Distribution 称为正态分布,也称为高斯分布,Truncated Normal Distribution一般翻译为截断正态分布,也有称为截尾正态分布。

    截断正态分布是截断分布(Truncated Distribution)的一种,那么截断分布是什么?截断分布是指,限制变量 x x 取值范围(scope)的一种分布。例如,限制x取值在0到50之间,即{0<x<50}。因此,根据限制条件的不同,截断分布可以分为:

    2.1 限制取值上限,例如,负无穷<x<50 2.2 限制取值下限,例如,0<x<正无穷 2.3 上限下限取值都限制,例如,0<x<50

    正态分布则可视为不进行任何截断的截断正态分布,也即自变量的取值为负无穷到正无穷;

    1. 概率密度函数

    假设 X 原来服从正太分布,那么限制 x 的取值在(a,b)范围内之后,X 的概率密度函数,可以用下面公式计算:

    f(x;μ,σ,a,b)=1σϕ(xμσ)Φ(bμσ)Φ(aμσ)f(x;μ,σ,a,b)=1σϕ(x−μσ)Φ(b−μσ)−Φ(a−μσ)

    也可简写为:

    f(x)F(b)F(a)I(a<x<b) ⇒ f ( x ) F ( b ) − F ( a ) ⋅ I ( a < x < b )

    其中 ϕ() ϕ ( ⋅ ) :均值为 0,方差为 1 的标准正态分布;

    ϕ(ξ)=12πexp(12ξ2) ϕ ( ξ ) = 1 2 π exp ⁡ ( − 1 2 ξ 2 )

    Φ() Φ ( ⋅ ) 为标准正态分布的累积分布函数;

    对其分母部分的一些简单认识, b b → ∞ ,⇒ Φ(bμσ)=1 Φ ( b − μ σ ) = 1 a a → − ∞ Φ(aμσ)=0 Φ ( a − μ σ ) = 0

    2. 截断型正态分布期望、方差

    https://www.youtube.com/watch?v=cvvrOqTIodk

    对于正态分布: f(x)=12πσexp((xμ)22σ2) f ( x ) = 1 2 π σ exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) ,有如下基本结论:

    f(x)=xμσ2f(x) f ′ ( x ) = − x − μ σ 2 f ( x ) baf(x)dx=f(b)f(a) ∫ a b f ′ ( x ) d x = f ( b ) − f ( a ) (牛顿莱布尼茨公式) S(x)=1F(x) S ( x ) = 1 − F ( x ) F(x) F ( x ) 是 cdf)

    对于下截断型正态分布,其数学期望 E(x|c<x) E ( x | c < x )

    E(x|c<x)====cxf(x)S(c)dx=c(xμ+μ)f(x)S(c)dxμS(c)cf(x)dx+σ2S(c)c(xμ)σ2f(x)dxμS(c)(1F(c))σ2S(c)(f()f(c))=μS(c)S(c)+σ2S(c)f(c)μ+σ2S(c)f(c)=μ+σ2f(c)S(c) E ( x | c < x ) = ∫ c ∞ x ⋅ f ( x ) S ( c ) d x = ∫ c ∞ ( x − μ + μ ) ⋅ f ( x ) S ( c ) d x = μ S ( c ) ∫ c ∞ f ( x ) d x + − σ 2 S ( c ) ∫ c ∞ − ( x − μ ) σ 2 f ( x ) d x = μ S ( c ) ( 1 − F ( c ) ) − σ 2 S ( c ) ( f ( ∞ ) − f ( c ) ) = μ S ( c ) ⋅ S ( c ) + σ 2 S ( c ) f ( c ) = μ + σ 2 S ( c ) f ( c ) = μ + σ 2 f ( c ) S ( c )

    为计算其方差,还需计算 E(x2|c<x) E ( x 2 | c < x )

    E(x2|c<x)======cx2f(x)S(c)dx=cx(xμ+μ)f(x)S(c)dxσ2S(c)cx(xμ)σ2f(x)dx+μS(c)cxf(x)dxσ2S(c)cxf(x)dx+μcxf(x)S(c)dxσ2S(c)(xf(x)|ccf(x)dx)+μE(x|c<x)σ2S(c)(0cf(c)S(c))+μE(x|c<x)μ2+σ2+(μ+c)σ2f(c)S(c) E ( x 2 | c < x ) = ∫ c ∞ x 2 ⋅ f ( x ) S ( c ) d x = ∫ c ∞ x ( x − μ + μ ) ⋅ f ( x ) S ( c ) d x = − σ 2 S ( c ) ∫ c ∞ x − ( x − μ ) σ 2 f ( x ) d x + μ S ( c ) ∫ c ∞ x ⋅ f ( x ) d x = − σ 2 S ( c ) ∫ c ∞ x f ′ ( x ) d x + μ ∫ c ∞ x ⋅ f ( x ) S ( c ) d x = − σ 2 S ( c ) ( x f ( x ) | c ∞ − ∫ c ∞ f ( x ) d x ) + μ ⋅ E ( x | c < x ) = − σ 2 S ( c ) ( 0 − c f ( c ) − S ( c ) ) + μ ⋅ E ( x | c < x ) = μ 2 + σ 2 + ( μ + c ) σ 2 f ( c ) S ( c )

    进一步 Var(x|c<x)=E(x2|c<x)(E(x|c<x))2 V a r ( x | c < x ) = E ( x 2 | c < x ) − ( E ( x | c < x ) ) 2

    3. 实现

    R 语言 :

    > install.packages('truncnorm') > library(truncnorm) > norm_data <- rnorm(n = 1000, mean = 90, sd = 4) > hist(norm_data) > truncnorm_data <- rtruncnorm(n = 1000, a = 85, b = 100, mean = 90, sd = 4) > hist(truncnorm_data)

    tensorflow:

    tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
    转载请注明原文地址: https://ju.6miu.com/read-35322.html

    最新回复(0)