转换将Matlab中的高斯混合绘制成均匀的

use*_*148 5 random matlab

考虑以下对2x1Matlab中矢量的绘制,其概率分布是两个高斯分量的混合.

P=10^3; %number draws
v=1;

%First component
mu_a = [0,0.5];
sigma_a = [v,0;0,v];

%Second component
mu_b = [0,8.2];
sigma_b = [v,0;0,v];


%Combine    
MU = [mu_a;mu_b];
SIGMA = cat(3,sigma_a,sigma_b);
w = ones(1,2)/2; %equal weight 0.5
obj = gmdistribution(MU,SIGMA,w);

%Draws
RV_temp = random(obj,P);%Px2

% Transform each component of RV_temp into a uniform in [0,1] by estimating the cdf.
RV1=ksdensity(RV_temp(:,1), RV_temp(:,1),'function', 'cdf');
RV2=ksdensity(RV_temp(:,2), RV_temp(:,2),'function', 'cdf'); 
Run Code Online (Sandbox Code Playgroud)

现在,如果我们检查是否RV1并且通过这样做RV2均匀分布[0,1]

ecdf(RV1)
ecdf(RV2)
Run Code Online (Sandbox Code Playgroud)

我们可以看到它RV1是均匀分布的[0,1](经验cdf接近45度线)而RV2不是.

我不明白为什么.似乎距离越远,mu_a(2)并且mu_b(2)通过ksdensity合理数量的抽奖来完成的工作就越糟糕.为什么?

Nic*_*son 2

当你有 N(0.5,v) 和 N(8.2,v) 的混合时,生成的数据的范围比你期望的更接近的数据要大,比如 N(0,v) 和 N(0,v) ),就像在另一个维度中一样。然后你要求ksdensity使用该范围内的 P 点来近似函数。

与标准线性插值一样,点越密集,函数的逼近效果越好(在范围内),这里的情况也是如此。因此,在 N(0.5,v) 和 N(8.2,v) 中,点“稀疏”(或者更稀疏,是一个词吗?),近似值比 N(0,v) 和 N(0 ,v) 其中点更密集。

作为一个小旁注,您是否有任何理由不ksdensity直接应用于二元数据?另外,我无法重现您所说的观点5e2也很好的评论。最终评论1e3通常优于10^3.