ドキュメンテーション

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

CompactClassificationNaiveBayes

パッケージ: classreg.learning.classif

コンパクトな単純ベイズ分類器

説明

CompactClassificationNaiveBayes はコンパクトな単純ベイズ分類器です。

コンパクトな分類器には、単純ベイズ分類器の学習に使用するデータが含まれません。そのため、コンパクトな分類器を使用して交差検証などのタスクを実行することはできません。

コンパクトな単純ベイズ分類器を使用して新しいデータのラベル付け (たとえば新しいデータのラベルの予測) をより効果的にします。

構築

CMdl = compact(Mdl) は学習済みの完全な単純ベイズ分類器 (Mdl) からコンパクトな単純ベイズ分類器 (CMdl) を返します。

入力引数

すべて展開する

完全な学習済み単純ベイズ分類器。fitcnb で学習させた ClassificationNaiveBayes モデルとして指定します。

プロパティ

すべて展開する

カテゴリカル予測子のインデックス。正の整数のベクトルを指定します。CategoricalPredictors には、カテゴリカル予測子が含まれている予測子データの列に対応するインデックス値を格納します。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

データ型: single | double

多変量多項レベル。数値ベクトルの cell ベクトルとして指定します。CategoricalLevels の長さは予測子 (size(X,2)) の数と同じです。

CategoricalLevels のセルは学習中に 'mvmn' として指定した (多変量多項分布になる) 予測子に対応します。多変量多項分布に対応しないセルは空です ([])。

予測子 j が多変量多項の場合、CategoricalLevels{j} は標本 (unique(X(:,j)) から削除された NaN) 内の予測子 j のすべての異なる値のリストです。

データ型: cell

各クラス名。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell ベクトルを指定します。

ClassNamesY と同じデータ型であり、文字配列の場合は K 個の要素または行が含まれます。(string 配列は文字ベクトルの cell 配列として扱われます)。

データ型: categorical | char | logical | single | double | cell

誤分類のコスト。K 行 K 列の正方行列として指定します。

Cost(i,j) の値は真のクラスがi の場合に、点をクラス j に判別するコストです。Cost の行と列の順序は ClassNames 内のクラス順に対応します。

Cost の値は学習に影響しません。ドット表記によって Mdl を学習させてから、Cost をリセットできます (例: Mdl.Cost = [0 0.5; 1 0];)。

データ型: double | single

fitcnb で予測子をモデル化するために使用する予測子分布。文字ベクトル、または文字ベクトルの cell 配列を指定します。

次の表は、使用できる分布の一覧です。

説明
'kernel'カーネル平滑化密度推定。
'mn'多項 bag-of-tokens モデルすべての予測子がこの分布をもつことを示します。
'mvmn'多変量多項分布。
'normal'正規 (ガウス) 分布。

Distribution が文字ベクトルによる 1 行 P 列の cell 配列である場合、cell 配列の要素 j の分布を使用して特徴量 j がモデル化されます。

データ型: char | cell

cell 配列として指定する、分布パラメーターの推定。DistributionParameters は K 行 D 列の cell 配列です。ここで、セル (k,d) はクラス k における予測子 d のインスタンスを推定した分布パラメーターを含みます。行の順序は ClassNames プロパティのクラスの順序に、予測子の順序は X の列の順序に対応します。

クラス k に予測子 j の観測がない場合、Distribution{k,j} は空です ([])。

DistributionParameters の要素は予測子の分布に依存します。次の表は、DistributionParameters{k,j} の値について説明しています。

予測子 j の分布
kernelKernelDistribution モデル。セルのインデックス付けおよびドット表記を使用してプロパティを表示します。たとえば、3 番目のクラスの予測子 2 のカーネル密度に推定される帯域幅を表示するには、Mdl.DistributionParameters{3,2}.BandWidth を使用します。
mnトークン j がクラス k に出現する確率を表すスカラー。詳細は、アルゴリズムを参照してください。
mvmnクラス k の予測子 j の可能なレベルそれぞれの確率を含む数値ベクトル確率は予測子 j (プロパティ CategoricalLevels 内に格納されています) のすべての一意なレベルが並べ替えられた順序に並べられます。詳細は、アルゴリズムを参照してください。
normal2 行 1 列の数値ベクトル。最初の要素は標本平均で、2 番目の要素は標本標準偏差です。

データ型: cell

展開された予測子名。文字ベクトルの cell 配列として格納されます。

モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNamesPredictorNames と同じです。

カーネル平滑化のタイプ。文字ベクトル、または文字ベクトルの cell 配列を指定します。Kernel の長さは予測子の数 (size(X,2)) と同じです。Kernel{j} は予測子 j に対応し、カーネル平滑化のタイプを表す文字ベクトルを格納します。次の表はサポートされるカーネル平滑化のタイプについて説明しています。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}

セルが空の場合 ([])、対応する予測子へのカーネル分布のあてはめは行われません。

データ型: char | cell

予測子名。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は X 内の順序に対応します。

データ型: cell

クラスの事前確率。数値行ベクトルとして指定されます。Prior は 1 行 K 列のベクトルで、要素の順序は ClassNames の要素と一致しています。

fitcnb は設定された事前確率を 'Prior' 名前と値のペアのパラメーターを使用して正規化するため、sum(Prior) = 1 となります。

Prior の値は最適近似のモデルを変更しません。したがって、Mdl をドット表記を使用して学習させた後に Prior をリセットできます (例: Mdl.Prior = [0.2 0.8];)。

データ型: double | single

応答名。文字ベクトルを指定します。

データ型: char

分類スコア変換関数。文字ベクトルまたは関数ハンドルを指定します。

スコア変換関数を function などに変更するには、ドット表記を使用します。

  • 組み込み関数の場合、function を表の値に置き換えて次のコードを入力します。

    Mdl.ScoreTransform = 'function';

    説明
    'doublelogit'1/(1 + e–2x)
    'invlogit'log(x / (1–x))
    'ismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定します。
    'logit'1/(1 + e–x)
    'none' または 'identity'x (変換なし)
    'sign'x < 0 のとき –1
    x = 0 のとき 0
    x > 0 のとき 1
    'symmetric'2x – 1
    'symmetricismax'最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定します。
    'symmetriclogit'2/(1 + e–x) – 1

  • MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。

    Mdl.ScoreTransform = @function;

    function は行列 (元のスコア) を受け入れ、同じサイズの行列 (変換されたスコア) を返さなければなりません。

データ型: char | 関数ハンドル

カーネル平滑化密度のサポート。cell ベクトルとして指定します。Support の長さは予測子の数と同じです (size(X,2))。セルはカーネル密度を適用する領域を表します。

次の表はサポートされるオプションについて説明します。

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

セルが空の場合 ([])、対応する予測子へのカーネル分布のあてはめは行われません。

カーネル平滑化ウィンドウの幅。数値行列として指定します。Width は K 行 P 列の行列であり、K はデータ内のクラスの数、P は予測子の数 (size(X,2)) です。

Width(k,j) はクラス k に含まれる予測子 j のカーネル平滑化密度のカーネル平滑化ウィンドウ幅です。列 j に含まれる NaN は、カーネル密度を使用した近似が予測子 j に実行されなかったことを示しています。

メソッド

edge単純ベイズ分類器の分類エッジ
logP単純ベイズ分類器の対数条件なし確率密度
loss単純ベイズ分類器の分類誤差
margin単純ベイズ分類器の分類マージン
predict単純ベイズ分類モデルの使用によるラベルの予測

コピーのセマンティクス

値。値のクラスがコピー操作に与える影響については、オブジェクトのコピー (MATLAB)を参照してください。

すべて折りたたむ

完全な単純ベイズ分類器 (すなわち、ClassificationNaiveBayesモデル) は学習データを保持します。効率性を高めるため、大規模な分類器を使用した新しいラベルの予測を行わないようにすることがあります。この例では、完全な単純ベイズ分類器のサイズを小さくする方法を説明します。

ionosphere データセットを読み込みます。

load ionosphere
X = X(:,3:end); % Remove two predictors for stability

単純ベイズ分類器を学習させます。ラベルが与えられる場合、各予測子は条件付きで正規分布すると仮定します。ラベルの順序を指定することをお勧めします。

Mdl = fitcnb(X,Y,'ClassNames',{'b','g'})
Mdl = 
  ClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'b'  'g'}
            ScoreTransform: 'none'
           NumObservations: 351
         DistributionNames: {1x32 cell}
    DistributionParameters: {2x32 cell}


  Properties, Methods

MdlClassificationNaiveBayes モデルです。

単純ベイズ分類器のサイズを縮小します。

CMdl = compact(Mdl)
CMdl = 
  classreg.learning.classif.CompactClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'b'  'g'}
            ScoreTransform: 'none'
         DistributionNames: {1x32 cell}
    DistributionParameters: {2x32 cell}


  Properties, Methods

CMdlCompactClassificationNaiveBayes モデルです。

各分類器が使用するメモリの量を表示します。

whos('Mdl','CMdl')
  Name      Size             Bytes  Class                                                        Attributes

  CMdl      1x1              15244  classreg.learning.classif.CompactClassificationNaiveBayes              
  Mdl       1x1             111374  ClassificationNaiveBayes                                               

完全な単純ベイズ分類器 (Mdl) はコンパクトな単純ベイズ分類器 (CMdl) よりもかなりサイズが大きくなります。

Mdl を MATLAB® ワークスペースから削除し、CMdl と新しい予測子の値をpredictに渡すと、新しい観測値のラベルを効率的に設定できます。

ionosphere データセットを読み込みます。

load ionosphere
X = X(:,3:end); % Remove two predictors for stability

単純ベイズ分類器を学習させ交差検証を実行します。ラベルが与えられる場合、各予測子は条件付きで正規分布すると仮定します。クラスの順序を指定することをお勧めします。

rng(1);  % For reproducibility
CVMdl = fitcnb(X,Y,'ClassNames',{'b','g'},'CrossVal','on')
CVMdl = 
  classreg.learning.partition.ClassificationPartitionedModel
    CrossValidatedModel: 'NaiveBayes'
         PredictorNames: {1x32 cell}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


  Properties, Methods

CVMdlClassificationNaiveBayes モデルではありませんが ClassificationPartitionedModel 交差検証された単純ベイズ モデルです。既定では、10 分割交差検証が実行されます。

あるいは、学習させた ClassificationNaiveBayes モデルをcrossvalに渡すことで、このモデルを交差検証することができます。

ドット表記を使用して、学習させた分割のいずれかを検査します。

CVMdl.Trained{1}
ans = 
  classreg.learning.classif.CompactClassificationNaiveBayes
              ResponseName: 'Y'
     CategoricalPredictors: []
                ClassNames: {'b'  'g'}
            ScoreTransform: 'none'
         DistributionNames: {1x32 cell}
    DistributionParameters: {2x32 cell}


  Properties, Methods

各分割はデータの 90% で学習させたCompactClassificationNaiveBayes モデルです。

汎化誤差を推定します。

genError = kfoldLoss(CVMdl)
genError = 0.1795

平均すると汎化誤差は約 17% です。

不十分な汎化誤差を減少させる方法の 1 つは、予測子に異なる条件付き分布を指定または条件付き分布パラメーターを調整することです。

詳細

すべて展開する

アルゴリズム

  • 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.