-2

少なくとも 2 つのピークを持つデータ系列のガウス パラメータを見つけなければなりません。どうすれば管理できますか?)がyi = f(xiあり、パラメータ mu と sigma が必要だとします。

すべてのデータの対数をとり、それらを polyfit で計算できることはわかっていますが、この方法では、必要のないものを簡単に得ることができます (理由を説明するには長すぎます)。

私は何をすべきか?

重要な詳細:私の MATLAB バージョンには normfit がありません。

4

2 に答える 2

0

私はこの種の質問にここで数回答えましたが、そのたびに「この種のことをもっと簡単に行うことができるに違いない...」と思いますが、もっと簡単な方法を見たり考えたりしていません、だから...我慢してください:)

事前にピークの数がわかっている場合は、次のようにするだけです。

function GaussFit

    % DATA TO REPRODUCE
    mu    = [112  -45];
    sigma = [ 12   24];

    F =[...
        mu(1) + sigma(1)*randn(1e4, 1)
        mu(2) + sigma(2)*randn(1e4, 1)];

    % interpolate with splines through the histogram
    [y,x] = hist(F, 1500);
    G = spline(x,y);

    % Find optimum curve fit 
    P0 = [% mu  S    A
            80  2   2e3;  % (some rough initial estimate)
            -8  12  2e3];        
    P = fminunc(@(P) Obj(P, x,G), P0); % refine the estimate

    % REPRODUCED DATA
    P(:,1:2).'

    figure, clf, hold on
    plot(x, P(1,3)*Gaussian(P(1,1),P(1,2),x) + P(2,3)*Gaussian(P(2,1),P(2,2),x))
    plot(x, ppval(G,x),'r.', 'MarkerSize', 1)

end

% The objective function for the curve fitting optimizer
function val = Obj(P, x,F)

    G = zeros(size(x));    
    for ii = 1:size(P,1);

        mu = P(ii,1);    % mean
        sigma = P(ii,2); % std. deviation
        A = P(ii,3);     % "amplitude"

        G = G + A/sigma/sqrt(2*pi) * exp(-(x-mu).^2/2/sigma^2);

    end    

    val = sum((G-ppval(F,x)).^2);

end

% just a function for plotting
function G = Gaussian(mu,sigma,x)
    G = 1/sigma/sqrt(2*pi) * exp(-(x-mu).^2/2/sigma^2);    
end

結果:

ans =
  112.1633   -45.2013
  12.6777     24.6723

ガウスフィット

私が言うかなり良い結果:)

いつものように、この方法にはいくつかの欠点があります。事前に知っておく必要があります

  1. データセットのピーク数
  2. オプティマイザが実際の解に収束するのに「十分に近い」初期推定値

事前にピークの数がわからない場合 (およびピークの数を自動的に見つけたい場合) はkmeansいくつかのヒューリスティックを使用して、データセット内のピークの量 (およびその平均) を特定する必要があります。

いずれにせよ、重要なことは、ピークの数を見つける方法はありますが、適切な初期推定値を自動的に見つける方法はないということです1 つまたは数十のデータ セットしかない場合でも、最初の推定値を見つけることは手動で行うことができますが、それを超えると、上記の方法はますます魅力的ではなくなります。

ただし、グローバルオプティマイザーを使用することもできます。その場合、初期見積もりを作成する必要はもうありません。しかし、この時点で私は考えずにはいられません

「そんな単純な問題には必要ないはずだ!」

でもまあ。

于 2013-04-18T08:58:47.247 に答える