Main Content

CompactClassificationNaiveBayes

マルチクラス分類のためのコンパクトな単純ベイズ分類器

説明

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

作成

CompactClassificationNaiveBayes モデルは、compact を使用して完全な学習済み ClassificationNaiveBayes 分類器から作成します。

プロパティ

すべて展開する

予測子のプロパティ

この プロパティ は読み取り専用です。

予測子名。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は、予測子名が学習データ X に現れる順序に対応します。

この プロパティ は読み取り専用です。

展開された予測子名。文字ベクトルの cell 配列を指定します。

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

この プロパティ は読み取り専用です。

カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

データ型: single | double

この プロパティ は読み取り専用です。

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

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

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

予測子分布のプロパティ

この プロパティ は読み取り専用です。

予測子分布。文字ベクトル、または文字ベクトルの cell 配列として指定します。fitcnb は予測子分布を使用して予測子をモデル化します。次の表は、使用できる分布の一覧です。

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

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

例: 'mn'

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

データ型: char | string | cell

この プロパティ は読み取り専用です。

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

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

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

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

この プロパティ は読み取り専用です。

カーネル平滑化のタイプ。カーネルの名前、またはカーネル名の cell 配列として指定します。Kernel の長さは予測子の数 (size(X,2)) と同じです。Kernel{j} は予測子 j に対応し、カーネル平滑化のタイプを表す文字ベクトルを格納します。セルが空 ([]) の場合、fitcnb はカーネル分布を対応する予測子に当てはめません。

次の表はサポートされるカーネル平滑化のタイプについて説明しています。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}

例: 'box'

例: {'epanechnikov','normal'}

データ型: char | string | cell

R2023b 以降

この プロパティ は読み取り専用です。

予測子の平均。数値ベクトルを指定します。fitcnb を使用して単純ベイズ分類器に学習させるときに Standardize1 または true として指定した場合、ベクトル Mu の長さは予測子の数と等しくなります。カテゴリカル予測子などのカーネル分布以外をもつ予測子については、ベクトルに値 0 が格納されます (DistributionNames を参照)。

fitcnb を使用して単純ベイズ分類器に学習させるときに Standardize0 または false に設定した場合、Mu の値は空ベクトル ([]) になります。

データ型: double

R2023b 以降

この プロパティ は読み取り専用です。

予測子の標準偏差。数値ベクトルを指定します。fitcnb を使用して単純ベイズ分類器に学習させるときに Standardize1 または true として指定した場合、ベクトル Sigma の長さは予測子の数と等しくなります。カテゴリカル予測子などのカーネル分布以外をもつ予測子については、ベクトルに値 1 が格納されます (DistributionNames を参照)。

fitcnb を使用して単純ベイズ分類器に学習させるときに Standardize0 または false に設定した場合、Sigma の値は空ベクトル ([]) になります。

データ型: double

この プロパティ は読み取り専用です。

カーネル平滑化密度のサポート。cell 配列として指定します。Support の長さは予測子の数 (size(X,2)) と同じです。セルは fitcnb がカーネル密度を適用する領域を表します。セルが空 ([]) の場合、fitcnb はカーネル分布を対応する予測子に当てはめません。

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

説明
1 行 2 列の数値行ベクトル密度のサポートは指定された範囲 ([L,U] など) に適用されます。ここで、LU はそれぞれ下限と上限を表します。
'positive'密度のサポートはすべての正の実数に適用されます。
'unbounded'密度のサポートはすべての実数に適用されます。

この プロパティ は読み取り専用です。

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

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

応答のプロパティ

この プロパティ は読み取り専用です。

モデルの学習に使用した一意なクラス名。categorical 配列、文字配列、logical ベクトル、数値ベクトルのいずれか、あるいは文字ベクトルの cell 配列として指定します。

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

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

この プロパティ は読み取り専用です。

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

データ型: char | string

学習プロパティ

事前確率。数値ベクトルとして指定します。Prior の要素の順序は Mdl.ClassNames の要素に対応します。

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

Prior の値は最適な当てはめのモデルに影響しません。したがって、ドット表記を使用して Mdl に学習させた後、Prior をリセットすることができます。

例: Mdl.Prior = [0.2 0.8]

データ型: double | single

分類器のプロパティ

誤分類コスト。数値正方行列を指定します。Cost(i,j) は、真のクラスが i である場合に点をクラス j に分類するコストです。行は真のクラスに、列は予測するクラスに対応します。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。

誤分類コスト行列は対角線上に 0 をもたなければなりません。

Cost の値は学習に影響しません。ドット表記を使用して Mdl に学習させた後、Cost をリセットすることができます。

例: Mdl.Cost = [0 0.5 ; 1 0]

データ型: double | single

分類スコア変換。文字ベクトルまたは関数ハンドルとして指定します。次の表は、使用可能な文字ベクトルをまとめています。

説明
"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 = 'logit'

データ型: char | string | function handle

オブジェクト関数

compareHoldout新しいデータを使用して 2 つの分類モデルの精度を比較
edge単純ベイズ分類器の分類エッジ
limeLocal Interpretable Model-agnostic Explanations (LIME)
logp単純ベイズ分類器の対数条件なし確率密度
loss単純ベイズ分類器の分類損失
margin単純ベイズ分類器の分類マージン
partialDependence部分依存の計算
plotPartialDependence部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
predict単純ベイズ分類器の使用による観測値の分類
shapleyシャープレイ値

すべて折りたたむ

学習データを削除することにより、完全な単純ベイズ分類器のサイズを縮小します。完全な単純ベイズ分類器は学習データを保持しています。コンパクトな単純ベイズ分類器を使用すると、メモリ効率を向上させることができます。

ionosphere データ セットを読み込みます。安定させるため、最初の 2 つの予測子を削除します。

load ionosphere
X = X(:,3:end);

予測子 X とクラス ラベル Y を使用して、単純ベイズ分類器に学習させます。クラス名を指定することが推奨されます。fitcnb は、各予測子が条件付き正規分布に従うと仮定しています。

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}


Mdl は学習させた ClassificationNaiveBayes 分類器です。

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

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


CMdl は学習させた CompactClassificationNaiveBayes 分類器です。

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

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

  CMdl      1x1              15229  classreg.learning.classif.CompactClassificationNaiveBayes              
  Mdl       1x1             111359  ClassificationNaiveBayes                                               

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

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

単純ベイズ分類器の学習と交差検証を行います。fitcnb が既定で 10 分割交差検証を実装します。次に、交差検証分類誤差を推定します。

ionosphere データ セットを読み込みます。安定させるため、最初の 2 つの予測子を削除します。

load ionosphere
X = X(:,3:end);
rng('default')  % for reproducibility

予測子 X とクラス ラベル Y を使用して、単純ベイズ分類器の学習と交差検証を行います。クラス名を指定することが推奨されます。fitcnb は、各予測子が条件付き正規分布に従うと仮定しています。

CVMdl = fitcnb(X,Y,'ClassNames',{'b','g'},'CrossVal','on')
CVMdl = 
  ClassificationPartitionedModel
    CrossValidatedModel: 'NaiveBayes'
         PredictorNames: {'x1'  'x2'  'x3'  'x4'  'x5'  'x6'  'x7'  'x8'  'x9'  'x10'  'x11'  'x12'  'x13'  'x14'  'x15'  'x16'  'x17'  'x18'  'x19'  'x20'  'x21'  'x22'  'x23'  'x24'  'x25'  'x26'  'x27'  'x28'  'x29'  'x30'  'x31'  'x32'}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


CVMdl は、交差検証した単純ベイズ分類器 ClassificationPartitionedModel です。あるいは、学習済みの ClassificationNaiveBayes モデルをcrossvalに渡すことにより、このモデルを交差検証できます。

ドット表記を使用して、CVMdl の最初の学習分割を表示します。

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


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

完全でコンパクトな単純ベイズ モデルは、新しいデータの予測に使用されません。代わりに、CVMdlkfoldLoss に渡すことにより、そのモデルを使用して汎化誤差を推定してください。

genError = kfoldLoss(CVMdl)
genError = 0.1852

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

予測子に別の条件付き分布を指定することや、条件付き分布パラメーターを調整して汎化誤差を減らすことができます。

詳細

すべて展開する

アルゴリズム

すべて展開する

参照

[1] Hastie, Trevor, Robert Tibshirani, and Jerome Friedman. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. 2nd ed. Springer Series in Statistics. New York, NY: Springer, 2009. https://doi.org/10.1007/978-0-387-84858-7.

[2] Manning, Christopher D., Prabhakar Raghavan, and Hinrich Schütze. Introduction to Information Retrieval, NY: Cambridge University Press, 2008.

拡張機能

バージョン履歴

R2014b で導入

すべて展開する