ドキュメンテーション

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

templateNaiveBayes

単純ベイズ分類器テンプレート

構文

t = templateNaiveBayes()
t = templateNaiveBayes(Name,Value)

説明

t = templateNaiveBayes() は、ECOC (誤り訂正出力符号) マルチクラス モデルの学習に適した単純ベイズテンプレートを返します。

既定のテンプレートを指定する場合、学習中のすべての入力引数には既定値が使用されます。

tfitcecoc の学習器として指定します。

t = templateNaiveBayes(Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用してテンプレートを返します。t ペア引数を使用して指定する場合を除き、Name,Value のすべてのプロパティは空です。

たとえば、予測子の分布を指定できます。

コマンド ウィンドウに t を表示する場合、すべてのオプションは、名前と値のペア引数を使用して指定する場合を除き、空 ([]) で表示されます。学習中、空のオプションに既定値が使用されます。

すべて折りたたむ

templateNaiveBayes を使用して、既定の単純ベイズ テンプレートを指定します。

t = templateNaiveBayes()
t = 
Fit template for classification NaiveBayes.

    DistributionNames: [1x0 double]
               Kernel: []
              Support: []
                Width: []
              Version: 1
               Method: 'NaiveBayes'
                 Type: 'classification'

MethodType を除き、テンプレート オブジェクトのすべてのプロパティは空です。t を学習関数に渡す場合、空のプロパティはそれぞれの既定値で入力されます。たとえば、各セルが 'normal' である 1 行 D 列の文字ベクトルの cell 配列が DistributionNames プロパティに入力されます。D は予測子の個数です。他の既定値の詳細は、fitcnbを参照してください。

t は単純ベイズ分類器の計画であるため、これを指定する場合、計算は実行されません。tfitcecocに渡して、ECOC マルチクラス学習の単純ベイズ分類器を指定できます。

fitcecocで使用する既定以外の単純ベイズ テンプレートを作成します。

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris

単純ベイズバイナリ分類器のテンプレートを作成し、すべての予測子のカーネル分布を指定します。

t = templateNaiveBayes('DistributionNames','kernel')
t = 
Fit template for classification NaiveBayes.

    DistributionNames: 'kernel'
               Kernel: []
              Support: []
                Width: []
              Version: 1
               Method: 'NaiveBayes'
                 Type: 'classification'

DistributionNamesMethod および Type を除き、テンプレート オブジェクトのすべてのプロパティは空です。t を学習関数に渡す場合、空のプロパティはそれぞれの既定値で入力されます。

t を ECOC マルチクラス モデルのバイナリ学習器として指定します。

Mdl = fitcecoc(meas,species,'Learners',t);

既定の設定では、Mdl は、1 対 1 の符号化設計を使用の学習が実行されます。

標本内 (再代入) 誤分類誤差を表示します。

L = resubLoss(Mdl,'LossFun','classiferror')
L = 0.0333

入力引数

すべて折りたたむ

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で閉じなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

例: 'DistributionNames','mn' は、すべての予測子を多項モデルのトークン数として処理するように指定します。

データをモデル化するために fitcnb が使用するデータ分布。'DistributionNames' と次の表の値をもつ文字ベクトル、string スカラー、string 配列、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。

説明
'kernel'カーネル平滑化密度推定。
'mn'多項分布。mn を指定するとすべての特徴量は多項分布の成分となります。したがって、'mn' を文字ベクトルの cell 配列または string 配列の要素として含めることはできません。詳細は、アルゴリズムを参照してください。
'mvmn'多変量多項分布。詳細は、アルゴリズムを参照してください。
'normal'正規 (ガウス) 分布。

文字ベクトルまたは string スカラーを指定した場合、その分布を使用してすべての特徴量がモデル化されます。1 行 P 列の文字ベクトルの cell 配列または string 配列を指定した場合、配列の要素 j の分布を使用して特徴量 j がモデル化されます。

既定では、カテゴリカル予測子として指定されたすべての予測子は (CategoricalPredictors 名前と値のペア引数を使用して) 'mvmn' に設定されます。それ以外の場合、既定の分布は 'normal' となります。

KernelSupport または Width を追加で指定するには、少なくとも 1 つの予測子が分布 'kernel' をもつように指定しなければなりません。

例: 'DistributionNames','mn'

例: 'DistributionNames',{'kernel','normal','kernel'}

カーネル平滑化のタイプ。'Kernel' と文字ベクトル、string スカラー、string 配列、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。

次の表は、カーネル平滑化密度領域の設定に使用できるオプションの一覧です。I{u} はインジケーター関数を表すとします。

カーネル
'box'ボックス (一様)

f(x)=0.5I{|x|1}

'epanechnikov'Epanechnikov

f(x)=0.75(1x2)I{|x|1}

'normal'ガウス

f(x)=12πexp(0.5x2)

'triangle'三角形

f(x)=(1|x|)I{|x|1}

配列の各要素に table のいずれかの値が格納されている状態で 1 行 P 列の string 配列または cell 配列を指定する場合、X の特徴 j に対して、要素 j のカーネル平滑化タイプを使用して分類器の学習が実行されます。分布が 'kernel' である予測子に対応しない Kernel の要素は無視されます。

KernelSupport または Width を追加で指定するには、少なくとも 1 つの予測子が分布 'kernel' をもつように指定しなければなりません。

例: 'Kernel',{'epanechnikov','normal'}

カーネル平滑化密度のサポート。'Support''positive''unbounded'、string 配列、cell 配列または数値行ベクトルから構成されるコンマ区切りのペアとして指定します。カーネル平滑化密度が指定した領域に適用されます。

次の表は、カーネル平滑化密度領域の設定に使用できるオプションの一覧です。

説明
1 行 2 列の数値行ベクトルたとえば、[L,U] のように指定します。LU はそれぞれ、密度サポートの下限と上限を表します。
'positive'密度サポートはすべて正の実数です。
'unbounded'密度サポートはすべて実数です。

string 配列の各要素に table 内の任意のテキスト値が含まれ、cell 配列の各要素に table 内の任意の値が含まれている状態で 1 行 P 列の string 配列または cell 配列を指定する場合、X の特徴 j に対して、要素 j のカーネル サポートを使用して分類器の学習が実行されます。分布が 'kernel' である予測子に対応しない Kernel の要素は無視されます。

KernelSupport または Width を追加で指定するには、少なくとも 1 つの予測子が分布 'kernel' をもつように指定しなければなりません。

例: 'KSSupport',{[-10,20],'unbounded'}

データ型: char | string | cell | double

カーネル平滑化ウィンドウ幅。'Width' と数値の行列、数値列ベクトル、数値行ベクトルまたはスカラーで構成される、コンマ区切りのペアとして指定します。

K 個のクラス レベルと P 個の予測子があるとします。次の表は、カーネル平滑化ウィンドウ幅の設定に使用できるオプションをまとめています。

説明
数値の K 行 P 列の行列要素 (k,j) は クラス k の予測子 j の幅を指定します。
K 行 1 列の数値列ベクトル要素 k は クラス k のすべての予測子の幅を指定します。
1 行 P 列の数値行ベクトル要素 j は 予測子 j のすべてのクラス レベルの幅を指定します。
スカラーすべてのクラスのすべての特徴量に帯域幅を指定します。

既定の設定では、ガウス分布に最適な値を使用して、予測子およびクラスの各組み合わせに対して既定の幅が自動的に選択されます。指定した WidthNaN が含まれる場合、NaN を含む要素に幅が選択されます。

KernelSupport または Width を追加で指定するには、少なくとも 1 つの予測子が分布 'kernel' をもつように指定しなければなりません。

例: 'Width',[NaN NaN]

データ型: double | 構造体

出力引数

すべて折りたたむ

ECOC (誤り訂正出力符号) マルチクラス モデルの学習に適した単純ベイズ分類テンプレート。テンプレート オブジェクトとして返します。tfitcecoc に渡し、ECOC モデルの単純ベイズ分類器を作成する方法を指定します。

コマンド ウィンドウに t を表示する場合、すべての未指定のオプションは空 ([]) で表示されます。しかし、空のオプションは学習中に対応する既定値に置き換えられます。

詳細

すべて折りたたむ

単純ベイズ

"単純ベイズ" は密度推定をデータに適用する分類アルゴリズムです。

アルゴリズムはベイズの定理を活用し、クラスが与えられる場合、予測子が条件付きで独立していると (単純に) 仮定します。通常、実際はこの仮定に反して、単純ベイズ分類器から得られる事後分布は、バイアス付きのクラス密度を推定する場合、特に事後分布が 0.5 (判定境界) であれば、信頼性が高い傾向があります[1]

単純ベイズ分類器は観測を最も確率の高いクラスに割り当てます (つまり、"最大事後確率" 決定ルールです)。明示的には、アルゴリズムは以下のようになります。

  1. 各クラス内の予測子の密度を推定します。

  2. ベイズ ルールに従って、事後確率をモデル化します。つまり、すべての k = 1,...,K について、次のようになります。

    P^(Y=k|X1,..,XP)=π(Y=k)j=1PP(Xj|Y=k)k=1Kπ(Y=k)j=1PP(Xj|Y=k),

    ここで

    • Y は観測のクラス インデックスに対応する確率変数です。

    • X1,...,XP は観測の無作為な予測子です。

    • π(Y=k) は、クラス インデックスが k である事前確率です。

  3. 各クラスの事後確率を推定して観測値を分類し、最大の事後確率を発生するクラスに観測値を割り当てます。

予測子が多項分布を構成する場合、事後確率は P^(Y=k|X1,..,XP)π(Y=k)Pmn(X1,...,XP|Y=k), になります。ここで、Pmn(X1,...,XP|Y=k) は多項分布の確率密度関数です。

アルゴリズム

  • fitcnb を使用して Mdl を学習させる際に 'DistributionNames','mn' を指定する場合、多項分布は bag-of-tokens モデルを使用して近似されます。トークン j がプロパティ DistributionParameters{k,j} のクラス k に出現する確率が保存されます。加法平滑化 [2] を使用すると、推定確率は次のようになります。

    P(token j|class k)=1+cj|kP+ck,

    ここで

    • cj|k=nki:yiclass kxijwii:yiclass kwi; はクラス k におけるトークン j の重み付き発生数です。

    • nk はクラス k 内の観測数です。

    • wi は観測値 i の重みです。クラス内の重みは、その合計がクラスの事前確率になるように正規化されます。

    • ck=j=1Pcj|k; は、クラス k に含まれているすべてのトークンの重み付き発生数の合計です。

  • fitcnb を使用して Mdl を学習させる際に 'DistributionNames','mvmn' を指定する場合、次のようになります。

    1. 予測子ごとに一意のレベルのリストが収集され、並べ替えられたリストは CategoricalLevels に保存され、各レベルはビンと見なされます。予測子とクラスの各組み合わせは、個別の独立した多項確率変数です。

    2. クラス k の予測子が j の場合、CategoricalLevels{j} に保存されたリストを使用して、カテゴリカル レベルごとのインスタンスがカウントされます。

    3. クラス k の予測子 j が、プロパティ DistributionParameters{k,j} においてレベル L をもつ場合、すべてのレベルの確率は CategoricalLevels{j} に保存されます。加法平滑化 [2] を使用すると、推定確率は次のようになります。

      P(predictor j=L|class k)=1+mj|k(L)mj+mk,

      ここで

      • mj|k(L)=nki:yi class kI{xij=L}wii:yi class kwi; は、クラス k 内の予測子 j が L に等しい観測値の重み付き個数です。

      • nk はクラス k 内の観測数です。

      • xij = L の場合は I{xij=L}=1、それ以外の場合は 0 です。

      • wi は観測値 i の重みです。クラス内の重みは、その合計がクラスの事前確率になるように正規化されます。

      • mj は予測子 j の異なるレベルの数です。

      • mk はクラス k 内の重み付けされた観測値の数です。

参照

[1] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.

[2] Manning, C. D., P. Raghavan, and M. Schütze. Introduction to Information Retrieval, NY: Cambridge University Press, 2008.

R2014b で導入