Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

CompactClassificationNaiveBayes

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

説明

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

作成

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

プロパティ

すべて展開する

予測子のプロパティ

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

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

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

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

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

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

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

データ型: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' 多変量多項分布。詳細は、多変量多項分布の推定確率を参照してください。
“正常” 正規 (ガウス) 分布

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

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

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

次の表はサポートされるカーネル平滑化のタイプについて説明しています。I{u} はインジケーター関数を表します。

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

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

'epanechnikov' Epanechnikov

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

“正常” ガウス

f ( x ) = 1 2 π exp ( 0.5 x 2 )

'triangle' 三角形

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

例:'box'

例:{'epanechnikov','normal'}

データ型:char|string|cell

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

カーネル平滑化密度のサポート。cell 配列として指定します。金宝appの長さは予測子の数 (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 単純ベイズ分類器の分類エッジ
lime Local Interpretable Model-agnostic Explanations (LIME)
logp 単純ベイズ分類器の対数条件なし確率密度
loss 単純ベイズ分類器の分類損失
margin 単純ベイズ分類器の分類マージン
partialDependence 部分従属の計算
plotPartialDependence 部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
predict 単純ベイズ分類器の使用による観測値の分類
shapley シャープレイ値

すべて折りたたむ

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

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

loadionosphereX = 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} Properties, Methods

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

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

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

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

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

whos('Mdl','CMdl')
Name Size Bytes Class Attributes CMdl 1x1 15060 classreg.learning.classif.CompactClassificationNaiveBayes Mdl 1x1 111174 ClassificationNaiveBayes

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

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

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

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

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

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

CVMdl = fitcnb(X,Y,'ClassNames',{'b','g'},'CrossVal','on')
CVMdl = ClassificationPartitionedModel CrossValidatedModel: 'NaiveBayes' PredictorNames: {1x32 cell} ResponseName: 'Y' NumObservations: 351 KFold: 10 Partition: [1x1 cvpartition] ClassNames: {'b' 'g'} ScoreTransform: 'none' Properties, Methods

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

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

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

各分割はデータの 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 で導入