正态分布有关计算

正态分布有关计算

发布日期: 2016-10-24 更新日期: 2021-01-28 编辑: 浏览次数: 110291

分类: 概率统计 标签:
选择要计算的项目:
标准正态分布函数
标准正态分布反函数
标准正态分布上a分位点
标准正态分布双侧a分位点
正态分布函数
正态分布反函数
正态分布上a分位点
正态分布双侧a分位点
正态分布落在区间内外的概率
标准差s=
x=
标准差s=
概率p=
标准差s=
a=
标准差s=
概率a=
标准差s=
x2=

本网页进行正态分布的有关计算,包括标准正态分布函数和反函数,一般正态分布函数和反函数,一些概率,上a分位数,等等。 在右上角的列表中选择要计算的选项,在下方填入要求的参数,然后单击“开始计算”按钮。
注意在输入标准差时,也可以以小写字母q打头后跟方差的数字,例如,“q4”就代表标准差是2,方差是4,效果和直接输入2一样。

 

    请 登陆 后进行评论
评论列表 (1)

   q1593750368 2020-11-14 23:42:48

function varargout = gmm(X, K_or_centroids) % ============================================================ % Expectation-Maximization iteration implementation of % Gaussian Mixture Model. % % PX = GMM(X, K_OR_CENTROIDS) % [PX MODEL] = GMM(X, K_OR_CENTROIDS) % % - X: N-by-D data matrix. % - K_OR_CENTROIDS: either K indicating the number of % components or a K-by-D matrix indicating the % choosing of the initial K centroids. % % - PX: N-by-K matrix indicating the probability of each % component generating each point. % - MODEL: a structure containing the parameters for a GMM: % MODEL.Miu: a K-by-D matrix. % MODEL.Sigma: a D-by-D-by-K matrix. % MODEL.Pi: a 1-by-K vector. % ============================================================

threshold = 1e-15;
[N, D] = size(X);

if isscalar(K_or_centroids)
    K = K_or_centroids;
    % randomly pick centroids
    rndp = randperm(N);
    centroids = X(rndp(1:K), :);
else
    K = size(K_or_centroids, 1);
    centroids = K_or_centroids;
end

% initial values
[pMiu pPi pSigma] = init_params();

Lprev = -inf;
while true
    Px = calc_prob();

    % new value for pGamma
    pGamma = Px .* repmat(pPi, N, 1);
    pGamma = pGamma ./ repmat(sum(pGamma, 2), 1, K);

    % new value for parameters of each Component
    Nk = sum(pGamma, 1);
    pMiu = diag(1./Nk) * pGamma' * X;
    pPi = Nk/N;
    for kk = 1:K
        Xshift = X-repmat(pMiu(kk, :), N, 1);
        pSigma(:, :, kk) = (Xshift' * ...
            (diag(pGamma(:, kk)) * Xshift)) / Nk(kk);
    end

    % check for convergence
    L = sum(log(Px*pPi'));
    if L-Lprev < threshold
        break;
    end
    Lprev = L;
end

if nargout == 1
    varargout = {Px};
else
    model = [];
    model.Miu = pMiu;
    model.Sigma = pSigma;
    model.Pi = pPi;
    varargout = {Px, model};
end

function [pMiu pPi pSigma] = init_params()
    pMiu = centroids;
    pPi = zeros(1, K);
    pSigma = zeros(D, D, K);

    % hard assign x to each centroids
    distmat = repmat(sum(X.*X, 2), 1, K) + ...
        repmat(sum(pMiu.*pMiu, 2)', N, 1) - ...
        2*X*pMiu';
    [dummy labels] = min(distmat, [], 2);

    for k=1:K
        Xk = X(labels == k, :);
        pPi(k) = size(Xk, 1)/N;
        pSigma(:, :, k) = cov(Xk);
    end
end

function Px = calc_prob()
    Px = zeros(N, K);
    for k = 1:K
        Xshift = X-repmat(pMiu(k, :), N, 1);
        inv_pSigma = inv(pSigma(:, :, k));
        tmp = sum((Xshift*inv_pSigma) .* Xshift, 2);
        coef = (2*pi)^(-D/2) * sqrt(det(inv_pSigma));
        Px(:, k) = coef * exp(-0.5*tmp);
    end
end

end

0       0 条评论
0 条评论


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org