ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

混合ガウス仮定の確認

判別分析では、データは混合ガウス モデルに従っています (判別分析モデルの作成を参照)。データが混合ガウス モデルに従っていると思われる場合、判別分析が適切な分類器になると予測できます。さらに、既定の線形判別分析では、すべてのクラスの共分散行列が等しいと仮定しています。ここでは、これらの仮定を確認する方法を説明します。

線形判別分析の等しい共分散行列のバートレット検定

バートレット検定 ([1]のボックス参照) では、さまざまなクラスの共分散行列の等価性を確認します。共分散行列が等しい場合、検定では線形判別分析が適切であると表示されます。等しくない場合、DiscrimType 名前と値のペアを fitcdiscr'quadratic' に設定して、2 次判別分析を使用することを検討します。

バートレット検定では、平均行列も共分散行列もわかっていない標準 (ガウス) 標本を想定します。共分散が等しいかどうかを調べるために、以下の数量を計算します。

  • クラスあたりの標本共分散行列 σi、1 ≤ i ≤ k (k はクラスの個数)。

  • プールされた共分散行列 σ。

  • 統計 V をテストします。

    V=(nk)log(|Σ|)i=1k(ni1)log(|Σi|)

    ここで、n は観測の合計数、ni はクラス i の観測の数で、|Σ| は行列 Σ の行列式です。

  • 各クラス内の観測値の個数 ni が増えるにつれて、V は自由度が kdd + 1)/2 の χ2 分布に漸近的に近づきます。ここで、d は予測子の個数 (データ内の次元数) です。

バートレット検定では、自由度が kd(d + 1)/2) である χ2 分布の所定の百分位数を V が超えるかどうかを確認します。超える場合、共分散が等しいという仮説を棄却します。

例: 等しい共分散行列のバートレット検定

フィッシャーのアヤメのデータがガウス共分散で適切にモデル化されているか、あるいは混合ガウス分布としてモデル化した方が適切かを確認します。

load fisheriris;
prednames = {'SepalLength','SepalWidth','PetalLength','PetalWidth'};
L = fitcdiscr(meas,species,'PredictorNames',prednames);
Q = fitcdiscr(meas,species,'PredictorNames',prednames,'DiscrimType','quadratic');
D = 4; % Number of dimensions of X
Nclass = [50 50 50];
N = L.NumObservations;
K = numel(L.ClassNames);
SigmaQ = Q.Sigma;
SigmaL = L.Sigma;
logV = (N-K)*log(det(SigmaL));
for k=1:K
    logV = logV - (Nclass(k)-1)*log(det(SigmaQ(:,:,k)));
end
nu = (K-1)*D*(D+1)/2;
pval = 1 - chi2cdf(logV,nu)
pval = 0

バートレット検定では、共分散行列が等しいという仮説を完全に棄却します。pval0.05 よりも大きかった場合、検定ではこの仮説を棄却しません。その結果、線形判別分析ではなく、2 次判別分析を使用します。

Q-Q プロット

Q-Q プロットは、経験的分布が理論的分布に近いかどうかを図で示します。両者が等しい場合、Q-Q プロットは 45° の線上にあります。等しくない場合、Q-Q プロットは 45° の線から外れます。

線形および 2 次判別用 Q-Q プロットの確認

線形判別分析の場合、すべてのクラスに 1 つの共分散行列を使用します。

load fisheriris;
prednames = {'SepalLength','SepalWidth','PetalLength','PetalWidth'};
L = fitcdiscr(meas,species,'PredictorNames',prednames);
N = L.NumObservations;
K = numel(L.ClassNames);
mahL = mahal(L,L.X,'ClassLabels',L.Y);
D = 4;
expQ = chi2inv(((1:N)-0.5)/N,D); % expected quantiles
[mahL,sorted] = sort(mahL); % sorted obbserved quantiles
figure;
gscatter(expQ,mahL,L.Y(sorted),'bgr',[],[],'off');
legend('virginica','versicolor','setosa','Location','NW');
xlabel('Expected quantile');
ylabel('Observed quantile');
line([0 20],[0 20],'color','k');

概して、予測された分位数と観測された分位数とは適切に一致しています。プロットの右半分を調べます。プロットが 45°の線から上へ偏っている場合、データが正規分布よりも裾が重くなっていることを示します。右側の 3 つの点は外れ値の可能性があります。クラス 'setosa' からの 2 つの観測とクラス 'virginica' からの 1 つの観測です。

線形判別分析の等しい共分散行列のバートレット検定に示したように、データは 1 つの共分散行列とは一致しません。2 次判別の計算をやり直します。

load fisheriris;
prednames = {'SepalLength','SepalWidth','PetalLength','PetalWidth'};
Q = fitcdiscr(meas,species,'PredictorNames',prednames,'DiscrimType','quadratic');
Nclass = [50 50 50];
N = L.NumObservations;
K = numel(L.ClassNames);
mahQ = mahal(Q,Q.X,'ClassLabels',Q.Y);
expQ = chi2inv(((1:N)-0.5)/N,D);
[mahQ,sorted] = sort(mahQ);
figure;
gscatter(expQ,mahQ,Q.Y(sorted),'bgr',[],[],'off');
legend('virginica','versicolor','setosa','Location','NW');
xlabel('Expected quantile');
ylabel('Observed quantile for QDA');
line([0 20],[0 20],'color','k');

Q-Q プロットは、観測された分位数と予測された分位数との間により適切な一致を示します。クラス 'setosa' から外れ値の候補が 1 つあるだけです。

多変量正規性の Mardia 尖度検定

Mardia 尖度検定 (Mardia [2] を参照) は、Q-Q プロットの検証の代わりになります。この検定は、データが混合ガウス モデルと一致するかどうかを判別するための数値的なアプローチです。

Mardia 尖度検定では、クラス平均からデータまでのマハラノビス距離の 4 乗の平均である M を計算します。一定の共分散行列をもつ正規分布にデータが従っており、線形判別分析に適している場合、M は平均が d(d + 2) で分散が 8d(d + 2)/n の正規分布に漸近的に近づきます。ここで

  • d は予測子の数 (データ内の次元の数) です。

  • n は、観測の合計数です。

Mardia 検定は両側検定であり、分散が 8d(d + 2)/n である正規分布に関して、M が d(d + 2) に十分に近いかどうかを確認します。

例: 線形判別と 2 次判別の Mardia 尖度検定

フィッシャーのアヤメのデータが線形判別分析と 2 次判別分析の両方でほぼ正規分布しているかどうかを確認します。線形判別分析の等しい共分散行列のバートレット検定 によれば、データは線形判別分析では正規ではありません (共分散行列が異なる)。線形および 2 次判別用 Q-Q プロットの確認 では、クラスごとに異なる共分散をもつ混合ガウス モデルによってデータが適切にモデル化されていることを示しています。これらの結論を Mardia 尖度検定で確認します。

load fisheriris;
prednames = {'SepalLength','SepalWidth','PetalLength','PetalWidth'};
L = fitcdiscr(meas,species,'PredictorNames',prednames);
mahL = mahal(L,L.X,'ClassLabels',L.Y);
D = 4;
N = L.NumObservations;
obsKurt = mean(mahL.^2);
expKurt = D*(D+2);
varKurt = 8*D*(D+2)/N;
[~,pval] = ztest(obsKurt,expKurt,sqrt(varKurt))
pval = 0.0208

Mardia 検定は、データが正規分布しているという仮説を棄却することを示しています。

2 次判別分析の例を続けます。

Q = fitcdiscr(meas,species,'PredictorNames',prednames,'DiscrimType','quadratic');
mahQ = mahal(Q,Q.X,'ClassLabels',Q.Y);
obsKurt = mean(mahQ.^2);
[~,pval] = ztest(obsKurt,expKurt,sqrt(varKurt))
pval = 0.7230

pval が高いため、多変量正規分布と整合性があるという結論に達します。

参照

[1] Box, G. E. P. A General Distribution Theory for a Class of Likelihood Criteria. Biometrika 36(3), pp. 317–346, 1949.

[2] Mardia, K. V. Measures of multivariate skewness and kurtosis with applications. Biometrika 57 (3), pp. 519–530, 1970.

参考

関数

オブジェクト

関連するトピック