如何在 Java 中编写 GMM(高斯混合模型)。Matlab 中有一些实现,但我正在寻找一些关于它的文档和 Java 中的示例代码。
PS:如果可能,我如何在我的代码中采用 Weka 实现?
PS2:我发现:http : //www.lix.polytechnique.fr/~nielsen/MEF/其中 GMM 的源代码在哪里,所以我可以在我的代码中采用它?
PS3:找到的另一个代码是:http : //www.dii.unisi.it/~freno/JProGraM.html仍然有问题必须采用它。我应该给出我的输入列表并从算法中获取所有分类元素列表。
我正在寻找R中的一些脚本/包(Python也会这样做),以从高斯和Gamma分布的混合中找出组件分布参数.到目前为止,我已经使用R包"mixtools"将数据建模为高斯混合,但我认为它可以通过Gamma加高斯来更好地建模.
谢谢
我在语音盒MATLAB工具中应用了gaussmix函数来计算GMM.但是,当我为512 GMM组件运行代码时,代码会给我错误.
No_of_Clusters = 512;
No_of_Iterations = 10;
[m_ubm1,v_ubm1,w_ubm1]=gaussmix(feature,[],No_of_Iterations,No_of_Clusters);
Error using *
Inner matrix dimensions must agree.
Error in gaussmix (line 256)
pk=px*wt; % pk(k,1) effective number of data points for each mixture (could be zero due to underflow)
Run Code Online (Sandbox Code Playgroud)
我需要1024或2048混合物用于通用背景模型(UBM)构造.谁能给我matlab代码来计算大量混合物(如512或2048)的GMM?
谢谢.
我有一个很大的数据集(我无法在内存中容纳全部数据)。我想在此数据集上使用GMM。
我可以在小批量数据上重复使用GMM.fit()(sklearn.mixture.GMM)吗?
我将一些数据拟合为两个高斯分布的混合分布flexmix:
data("NPreg", package = "flexmix")
mod <- flexmix(yn ~ x, data = NPreg, k = 2,
model = list(FLXMRglm(yn ~ x, family= "gaussian"),
FLXMRglm(yn ~ x, family = "gaussian")))
Run Code Online (Sandbox Code Playgroud)
模型拟合如下:
> mod
Call:
flexmix(formula = yn ~ x, data = NPreg, k = 2, model = list(FLXMRglm(yn ~ x, family = "gaussian"),
FLXMRglm(yn ~ x, family = "gaussian")))
Cluster sizes:
1 2
74 126
convergence after 31 iterations
Run Code Online (Sandbox Code Playgroud)
但是我如何从这个模型中实际预测呢?
当我做
pred <- predict(mod, NPreg)
Run Code Online (Sandbox Code Playgroud)
我得到一个列表,其中包含两个组件中的每个组件的预测
要获得单个预测,我是否必须添加像这样的群集大小?
single <- …Run Code Online (Sandbox Code Playgroud) 我有来自MATLAB中图像的数据,我想将其分解为高斯混合.图像的计数和binLocations存储在256x2矩阵'X'中,fitgmdist(X,3)为三个高斯人提供参数.我想绘制这些高斯人并找到他们的交叉点.
我也有点困惑为什么混合模型中的'mu'等参数有两列.难道每个高斯都不应该有一个对应的意思吗?
我有一个组合样本,我想拟合Dirichlet分布的有限混合.更准确地说,请考虑以下示例:
library(gtools)
set.seed(1)
PROB = c(0.25, 0.15, 0.60)
ALPHA = list(
c(1,1,1),
c(2,1,1),
c(1,1,20)
)
size = 500
N = sapply(1:3, function(i, z) sum(z == i),
sample(1:3, size, prob = PROB, replace = TRUE))
X = do.call('rbind',
sapply(1:3, function(i, N)
rdirichlet(N[i], ALPHA[[i]]), N))[sample(1:size),]
Run Code Online (Sandbox Code Playgroud)
X包含由三部分单形中定义的Dirichlet分布混合生成的样本.该混合物的第一个Dirichlet分量具有参数(1,1,1),第二个分量具有参数(2,1,1)和第三个(1,1,20).混合概率为0.25,0.15,0.60.我想从样本中检索这些参数.
你怎么会找到这个参数?
我想在Matlab中计算下面的公式(EM的E-step for Multinomial Mixture Model),

g和θ是矩阵,θ和λ具有以下约束:


但是m的计数大于1593,当计算θ的乘积时,数字变得非常小,Matlab将其保存为零.任何人都可以简化g公式或使用其他技巧来解决这个问题?
更新:
data: data.txt (下载后,将文件扩展名更改为'mat')
码:
function EM(data)
%% initialize
K=2;
[N M]=size(data);
g=zeros(N,K);
landa=ones(K,1) .* 0.5;
theta = rand(M, K);
theta = bsxfun(@rdivide, theta, sum(theta,1))';
%% EM
for i=1:10
%% E Step
for n=1:N
normalize=0;
for k=1:K
g(n,k)=landa(k) * prod(theta(k,:) .^ data(n,:));
normalize=normalize + landa(k) * prod(theta(k,:) .^ data(n,:));
end
g(n,:)=g(n,:) ./ normalize;
end
%% M Step
for k=1:K
landa(k)=sum(g(:,k)) / N ;
for m=1:M
theta(k,m)=(sum(g(:,k) .* data(:,m)) + 1) / (sum(g(:,k) .* …Run Code Online (Sandbox Code Playgroud) 我想使用GMM(高斯混合模型来聚类二进制图像,并且还想在二进制图像本身上绘制聚类质心).
我使用它作为我的参考:http: //in.mathworks.com/help/stats/gaussian-mixture-models.html
这是我的初始代码
I=im2double(imread('sil10001.pbm'));
K = I(:);
mu=mean(K);
sigma=std(K);
P=normpdf(K, mu, sigma);
Z = norminv(P,mu,sigma);
X = mvnrnd(mu,sigma,1110);
X=reshape(X,111,10);
scatter(X(:,1),X(:,2),10,'ko');
options = statset('Display','final');
gm = fitgmdist(X,2,'Options',options);
idx = cluster(gm,X);
cluster1 = (idx == 1);
cluster2 = (idx == 2);
scatter(X(cluster1,1),X(cluster1,2),10,'r+');
hold on
scatter(X(cluster2,1),X(cluster2,2),10,'bo');
hold off
legend('Cluster 1','Cluster 2','Location','NW')
P = posterior(gm,X);
scatter(X(cluster1,1),X(cluster1,2),10,P(cluster1,1),'+')
hold on
scatter(X(cluster2,1),X(cluster2,2),10,P(cluster2,1),'o')
hold off
legend('Cluster 1','Cluster 2','Location','NW')
clrmap = jet(80); colormap(clrmap(9:72,:))
ylabel(colorbar,'Component 1 Posterior Probability')
Run Code Online (Sandbox Code Playgroud)
但问题是我无法在主二进制图像中绘制从GMM接收的聚类质心.我该怎么做?

**现在假设我有一个序列中的10个这样的图像我想将它们的平均位置的信息存储在两个单元格数组中然后我该怎么做.这是我的代码我的新问题**
images=load('gait2go.mat');%load the matrix file
for i=1:10
I{i}=images.result{i}; …Run Code Online (Sandbox Code Playgroud) matlab classification cluster-analysis machine-learning mixture-model
data 是一维数据数组。
data = [0.0, 7000.0, 0.0, 7000.0, -400.0, 0.0, 7000.0, -400.0, -7400.0, 7000.0, -400.0, -7000.0, -7000.0, 0.0, 0.0, 0.0, -7000.0, 7000.0, 7000.0, 7000.0, 0.0, -7000.0, 6600.0, -7400.0, -400.0, 6600.0, -400.0, -400.0, 6600.0, 6600.0, 6600.0, 7000.0, 6600.0, -7000.0, 0.0, 0.0, -7000.0, -7400.0, 6600.0, -400.0, 7000.0, -7000.0, -7000.0, 0.0, 0.0, -400.0, -7000.0, -7000.0, 7000.0, 7000.0, 0.0, -7000.0, 0.0, 0.0, 6600.0, 6600.0, 6600.0, -7400.0, -400.0, -2000.0, -7000.0, -400.0, -7400.0, 7000.0, 0.0, -7000.0, -7000.0, 0.0, -400.0, -7400.0, -7400.0, 0.0, 0.0, 0.0, -400.0, -400.0, …Run Code Online (Sandbox Code Playgroud) mixture-model ×10
gaussian ×4
matlab ×4
r ×3
python ×2
scikit-learn ×2
algorithm ×1
bigdata ×1
dirichlet ×1
distribution ×1
java ×1
math ×1
packages ×1
predict ×1
probability ×1
reshape ×1
speaker ×1