ドキュメンテーション

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

カーネル分布

概要

カーネル分布は、確率変数の確率密度関数 (pdf) のノンパラメトリック表現です。パラメトリック分布ではデータを適切に記述できなかったり、データの分布に関する仮定を実行しない場合、カーネル分布を使用できます。カーネル分布は、平滑化関数と帯域幅の値によって定義されます。これらは、生成される密度曲線の滑らかさを制御します。

カーネル密度推定量

カーネル密度推定量は、確率変数の推定 pdf です。x の任意の実数値について、カーネル密度推定量は次の式によって与えられます。

f^h(x)=1nhi=1nK(xxih),

ここで、x1、x2、...、xn は未知の分布に由来する無作為標本、n は標本サイズ、K(·) はカーネル平滑化関数、h は帯域幅です。

カーネル平滑化関数

カーネル平滑化関数は、確率密度関数の生成に使われる曲線の形状を定義します。ヒストグラムと同様、カーネル分布は、標本データを使って、確率分布を表す関数を構築します。ただし、値を離散的なビンに配置するヒストグラムとは異なり、カーネル分布は、各データ値に対して成分平滑化関数を加算して、平滑で連続的な確率曲線を生成します。次の図は、同じ標本データから生成されたヒストグラムとカーネル分布の視覚的な比較を示しています。

ヒストグラムは、ビンを確立して適切なビンに各データ値を配置することで、確率分布を表します。

SixMPG = [13;15;23;29;32;34];
figure
histogram(SixMPG)

このビン カウント方式により、ヒストグラムは離散確率密度関数を生成します。これは、特定の用途 (近似分布からの乱数の生成など) に向かない場合があります。

代替法として、カーネル分布は、それぞれのデータ値に個別の確率密度曲線を生成し、平滑曲線を加算することで、確率密度関数を生成します。この方式は特定のデータセットに対して、1 つの平滑化された連続確率密度関数を生成します。

figure
pdSix = fitdist(SixMPG,'Kernel','BandWidth',4);
x = 0:.1:45;
ySix = pdf(pdSix,x);
plot(x,ySix,'k-','LineWidth',2)

% Plot each individual pdf and scale its appearance on the plot
hold on
for i=1:6
    pd = makedist('Normal','mu',SixMPG(i),'sigma',4);
    y = pdf(pd,x);
    y = y/6;
    plot(x,y,'b:')
end
hold off

小さい破線の曲線は、標本データ内の各値に対する確率分布であり、プロットを近似するようにスケーリングされています。大きい実線の曲線は、SixMPG データの全体的なカーネル分布です。カーネル平滑化関数は、小さな成分曲線 (この例では、正規分布) を参照します。

カーネル平滑化関数に対して、複数のオプションのいずれかを選択できます。このプロットは、使用可能な平滑化関数の形状を示しています。

プロット仕様の設定

hname = {'normal' 'epanechnikov' 'box' 'triangle'};
colors = {'r' 'b' 'g' 'm'};
lines = {'-','-.','--',':'};

% Generate a sample of each kernel smoothing function and plot
data = [0];
figure
for j=1:4
    pd = fitdist(data,'kernel','Kernel',hname{j});
    x = -3:.1:3;
    y = pdf(pd,x);
    plot(x,y,'Color',colors{j},'LineStyle',lines{j})
    hold on
end
legend(hname)
hold off

結果となる確率密度関数の推定の形状に関して、さまざまなカーネル平滑化関数の効果を理解するには、使用可能な各カーネル関数を使って、carbig.mat から燃費データ (MPG) のプロットを比較します。

load carbig
% Set plot specifications
hname = {'normal' 'epanechnikov' 'box' 'triangle'};
colors = {'r' 'b' 'g' 'm'};
lines = {'-','-.','--',':'};

% Generate kernel distribution objects and plot
figure
for j=1:4
    pd = fitdist(MPG,'kernel','Kernel',hname{j});
    x = -10:1:60;
    y = pdf(pd,x);
    plot(x,y,'Color',colors{j},'LineStyle',lines{j})
    hold on
end
legend(hname)
hold off

各密度曲線では同じ入力データが使われますが、確率密度関数を生成するには、異なるカーネル平滑化関数が適用されます。密度の推定は大まかに比較可能ですが、各曲線の形状は少しずつ異なります。たとえば、box カーネルで生成される密度曲線は、他のカーネルよりも平滑ではありません。

帯域幅

帯域幅の選択は、生成される確率密度の曲線の滑らかさを制御します。この図は、正規カーネル平滑化関数で3 つの異なる帯域幅を使った場合の、同じ MPG データに対する密度の推定を示しています。

カーネル分布オブジェクトの作成

pd1 = fitdist(MPG,'kernel');
pd2 = fitdist(MPG,'kernel','BandWidth',1);
pd3 = fitdist(MPG,'kernel','BandWidth',5);

% Compute each pdf
x = -10:1:60;
y1 = pdf(pd1,x);
y2 = pdf(pd2,x);
y3 = pdf(pd3,x);

% Plot each pdf
plot(x,y1,'Color','r','LineStyle','-')
hold on
plot(x,y2,'Color','k','LineStyle',':')
plot(x,y3,'Color','b','LineStyle','--')
legend({'BandWidth = Default','BandWidth = 1','BandWidth = 5'})
hold off

既定の帯域幅は、正規分布の密度の推定に対して理論的に最適であり[1]、適度に滑らかな曲線を生成します。小さな帯域幅を指定すると非常に粗い曲線になりますが、データに 2 つの主要なピークが存在する可能性が明らかになります。大きな帯域幅を指定すると、カーネル関数とほぼ同一の曲線が生成されますが、曲線は非常に滑らかであり、データの潜在的に重要な特徴量が不明瞭になります。

参照

[1] Bowman, A. W., and A. Azzalini. Applied Smoothing Techniques for Data Analysis. New York: Oxford University Press Inc., 1997.

参考

|

関連する例

詳細