Main Content

templateNaiveBayes

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

説明

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: []
      StandardizeData: []
              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: []
      StandardizeData: []
              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

入力引数

すべて折りたたむ

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: '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' となります。

KernelStandardizeSupport または 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 の要素は無視されます。

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

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

R2023b 以降

カーネル分布をもつ予測子を標準化するためのフラグ。数値または logical の 0 (false) または 1 (true) として指定します。この引数は、DistributionNames 値に 1 つ以上のカーネル分布 ("kernel") が含まれる場合のみ有効です。

Standardizetrue に設定すると、カーネル分布をもつ各予測子変数が対応する列の平均値と標準偏差によってセンタリングおよびスケーリングされます。カテゴリカル予測子などのカーネル分布以外をもつ予測子は標準化されません。

例: "Standardize",true

データ型: single | double | logical

カーネル平滑化密度のサポート。'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 の要素は無視されます。

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

例: 'Support',{[-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 を含む要素に幅が選択されます。

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

例: 'Width',[NaN NaN]

データ型: double | struct

出力引数

すべて折りたたむ

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

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

詳細

すべて折りたたむ

bag-of-tokens モデル

bag-of-tokens モデルでは、予測子 j の値は観測値のトークン j の発生数を表す非負の数値です。この多項モデルのカテゴリ (ビン) の数は、異なるトークンの数 (予測子の数) です。

単純ベイズ

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

アルゴリズムはベイズの定理を活用し、クラスが与えられる場合、予測子が条件付きで独立していると (単純に) 仮定します。通常、実際はこの仮定に反して、単純ベイズ分類器から得られる事後分布は、バイアス付きのクラス密度を推定する場合、特に事後分布が 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) は多項分布の確率密度関数です。

アルゴリズム

  • 予測子変数 j が条件付き正規分布をもつ場合 (名前と値の引数 DistributionNames を参照)、クラス固有の加重平均、および加重標準偏差の不偏推定を計算することにより、この分布がデータに当てはめられます。各クラス k に対して以下を実行します。

    • 予測子 j の加重平均は次のようになります。

      x¯j|k={i:yi=k}wixij{i:yi=k}wi,

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

    • 予測子 j の加重標準偏差の不偏推定器は次のようになります。

      sj|k=[{i:yi=k}wi(xijx¯j|k)2z1|kz2|kz1|k]1/2,

      ここで z1|k はクラス k 内の重みの合計、z2|k はクラス k 内の重みの 2 乗の合計です。

  • すべての予測子変数が条件付き多項分布 ('DistributionNames','mn' を指定) を構成する場合、bag-of-tokens モデルを使用して、この分布が当てはめられます。トークン j がプロパティ DistributionParameters{k,j} のクラス k に出現する確率が保存されます。加法平滑化[2]を使用すると、推定確率は次のようになります。

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

    ここで

    • cj|k=nk{i:yi=k}xijwi{i:yi=k}wi, はクラス k におけるトークン j の重み付き発生数です。

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

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

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

  • 予測子変数 j が条件付き多変量多項分布を持つ場合、次のようになります。

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

    2. 各クラス k に対して、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)=nk{i:yi=k}I{xij=L}wi{i:yi=k}wi, は、クラス 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, Christopher D., Prabhakar Raghavan, and Hinrich Schütze. Introduction to Information Retrieval, NY: Cambridge University Press, 2008.

バージョン履歴

R2014b で導入

すべて展開する