使用 Julia 绘制混合分布
Plotting mixtures of distributions with Julia
我想用 Julia 绘制两个一维高斯分布的混合图。我不确定最好的方法是什么。我正在尝试使用 Distributions.jl
并且特定于两者
- 使用
d1 = Normal(0.0, 1.0)
和 d2 = Normal(1.0, 1.8)
定义两个高斯分布
- 定义混合使用
MixtureModel(Normal[ Normal(-2.0, 1.2), Normal(0.0, 1.0), Normal(3.0, 2.5)], [0.1, 0.6, 0.3])
现在,对于第一次尝试,我不知道如何定义权重。因此,我的问题是关于 如何继续简单地生成和绘制这种混合物的样本?
我想绘制它们并使用这些样本来执行参数估计。
我不确定我是否完全理解这个问题 - 为什么要定义 d1
和 d2
?
回答你大胆的问题:只需使用 rand()
从你的混合分布中提取:
julia> using Distributions
julia> mm = MixtureModel([Normal(-2.0, 1.2), Normal(), Normal(3.0, 2.5)], [0.1, 0.6, 0.3])
MixtureModel{Normal{Float64}}(K = 3)
components[1] (prior = 0.1000): Normal{Float64}(μ=-2.0, σ=1.2)
components[2] (prior = 0.6000): Normal{Float64}(μ=0.0, σ=1.0)
components[3] (prior = 0.3000): Normal{Float64}(μ=3.0, σ=2.5)
julia> rand(mm)
1.882130062980293
请注意,我在这里使用 Normal()
而不是 Normal(0.0, 1.0)
,因为 Normal()
已经 returns 标准正态分布。
绘制:
julia> using Plots
julia> histogram(rand(mm, 100_000), normalize = true, xlabel = "Value", ylabel = "Frequency", label = "Mixture model")
我想用 Julia 绘制两个一维高斯分布的混合图。我不确定最好的方法是什么。我正在尝试使用 Distributions.jl
并且特定于两者
- 使用
d1 = Normal(0.0, 1.0)
和d2 = Normal(1.0, 1.8)
定义两个高斯分布
- 定义混合使用
MixtureModel(Normal[ Normal(-2.0, 1.2), Normal(0.0, 1.0), Normal(3.0, 2.5)], [0.1, 0.6, 0.3])
现在,对于第一次尝试,我不知道如何定义权重。因此,我的问题是关于 如何继续简单地生成和绘制这种混合物的样本?
我想绘制它们并使用这些样本来执行参数估计。
我不确定我是否完全理解这个问题 - 为什么要定义 d1
和 d2
?
回答你大胆的问题:只需使用 rand()
从你的混合分布中提取:
julia> using Distributions
julia> mm = MixtureModel([Normal(-2.0, 1.2), Normal(), Normal(3.0, 2.5)], [0.1, 0.6, 0.3])
MixtureModel{Normal{Float64}}(K = 3)
components[1] (prior = 0.1000): Normal{Float64}(μ=-2.0, σ=1.2)
components[2] (prior = 0.6000): Normal{Float64}(μ=0.0, σ=1.0)
components[3] (prior = 0.3000): Normal{Float64}(μ=3.0, σ=2.5)
julia> rand(mm)
1.882130062980293
请注意,我在这里使用 Normal()
而不是 Normal(0.0, 1.0)
,因为 Normal()
已经 returns 标准正态分布。
绘制:
julia> using Plots
julia> histogram(rand(mm, 100_000), normalize = true, xlabel = "Value", ylabel = "Frequency", label = "Mixture model")