Main Content

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

ClassificationNaiveBayes

マルチクラス分類のための単純ベイズ分類

説明

ClassificationNaiveBayesはマルチクラス学習のための単純ベイズ分類器です。学習させたClassificationNaiveBayes分類器は学習データ、パラメーター値、データ分布および事前確率を格納します。これらの分類器を使用して、再代入予測値の推定 (resubPredictを参照)、新しいデータのラベルや事後確率の予測 (predictを参照) などのタスクを実行します。

作成

ClassificationNaiveBayesオブジェクトの作成にはfitcnbを使用します。

プロパティ

すべて展開する

予測子のプロパティ

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

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

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

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

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

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

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

データ型:single|double

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

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

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

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

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

単純ベイズ分類器の学習に使用する、標準化されていない予測子。数値行列として指定します。Xの各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。ソフトウェアは、欠損値が少なくとも 1 つ含まれている観測値を除外し、対応する要素を Y から削除します。

予測子分布のプロパティ

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

予測子分布。文字ベクトル、または文字ベクトルの 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 配列の値
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 }

'normal' ガウス

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

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

単純ベイズ分類器の学習に使用したクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトルのいずれか、あるいは文字ベクトルの cell 配列として指定します。Yの各行は、Xの対応する行の観測された分類を表します。

Yのデータ型は、モデルの学習に使用したYのデータと同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。

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

学習プロパティ

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

ClassificationNaiveBayesモデルの学習に使用するパラメーター値。オブジェクトとして指定します。ModelParametersには、単純ベイズ分類器の学習に使用する名前と値のペアの引数値などのパラメーター値が格納されます。

ModelParametersのプロパティにアクセスするには、ドット表記を使用します。たとえば、Mdl.ModelParameters.Supportを用いてカーネル サポートにアクセスします。

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

XおよびYに格納されている学習データ内の学習観測値の個数。数値スカラーとして指定します。

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

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

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

例:Mdl.Prior = [0.2 0.8]

データ型:double|single

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

観測値の重み。Yと同じ行数をもつ非負値のベクトルを指定します。Wの各エントリは、Yで対応する観測値の相対的な重要性を指定します。fitcnbによって、名前と値のペアの引数“重量”に設定した値が正規化され、特定のクラス内の重みはそのクラスの事前確率の合計となります。

分類器のプロパティ

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

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

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

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

データ型:double|single

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

ハイパーパラメーターの交差検証最適化。ハイパーパラメーターおよび関連する値が含まれているテーブルまたはBayesianOptimizationオブジェクトを指定します。モデルを作成するときに名前と値のペアの引数'OptimizeHyperparameters'が空以外であった場合、このプロパティは空以外になります。HyperparameterOptimizationResultsの値は、モデル作成時の構造体HyperparameterOptimizationOptionsOptimizerフィールドの設定によって変化します。

Optimizerフィールドの値 HyperparameterOptimizationResultsの値
'bayesopt'(既定の設定) BayesianOptimizationクラスのオブジェクト
'gridsearch'または'randomsearch' 使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル

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

説明
'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

オブジェクト関数

compact 機械学習モデルのサイズの縮小
compareHoldout 新しいデータを使用して 2 つの分類モデルの精度を比較
crossval 機械学習モデルの交差検証
edge 単純ベイズ分類器の分類エッジ
incrementalLearner 単純ベイズ分類モデルのインクリメンタル学習器への変換
lime Local Interpretable Model-agnostic Explanations (LIME)
logp 単純ベイズ分類器の対数条件なし確率密度
loss 単純ベイズ分類器の分類損失
margin 単純ベイズ分類器の分類マージン
partialDependence 部分従属の計算
plotPartialDependence 部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
predict 単純ベイズ分類器の使用による観測値の分類
resubEdge 再代入分類エッジ
resubLoss 再代入分類損失
resubMargin 再代入分類マージン
resubPredict 学習済み分類器を使用した学習データの分類
shapley シャープレイ値
testckfold 交差検証の反復により 2 つの分類モデルの精度を比較

すべて折りたたむ

フィッシャーのアヤメのデータ セット用に単純ベイズ分類器を作成します。また、分類器の学習後に事前確率を指定します。

fisheririsデータ セットを読み込みます。150 本のアヤメについて 4 つの花弁の測定値が含まれる数値行列Xを作成します。対応するアヤメの種類が含まれる文字ベクトルの cell 配列Yを作成します。

loadfisheririsX = meas; Y = species;

予測子Xとクラス ラベルYを使用して、単純ベイズ分類器の学習を行います。fitcnbでは、各予測子が独立しており、既定の設定で正規分布を使用して各予測子をあてはめると仮定しています。

Mdl = fitcnb(X,Y)
Mdl = ClassificationNaiveBayes ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 DistributionNames: {'normal' 'normal' 'normal' 'normal'} DistributionParameters: {3x4 cell} Properties, Methods

Mdlは学習させたClassificationNaiveBayes分類器です。一部のMdlプロパティはコマンド ウィンドウに表示されます。

ドット表記を使用して、Mdlのプロパティを表示します。たとえば、クラスの名前と事前確率を表示します。

Mdl.ClassNames
ans =3x1 cell{'setosa' } {'versicolor'} {'virginica' }
Mdl.Prior
ans =1×30.3333 0.3333 0.3333

Mdl.Priorでのクラスの事前確率の順序は、Mdl.ClassNamesでのクラスの順序に対応します。既定では、事前確率はデータ内のクラスのそれぞれの相対的頻度です。または、fitcnbを呼び出すときに名前と値のペアの引数 'Prior'を使用することにより、事前確率を設定できます。

ドット表記を使用して、分類器の学習後に事前確率を設定します。たとえば、事前確率をそれぞれ 0.5、0.2 および 0.3 に設定します。

Mdl.Prior = [0.5 0.2 0.3];

これで、この学習済みの分類器を使用して追加タスクを実行できるようになりました。たとえば、predictを使用して新しい測定値にラベルを付けることや、crossvalを使用して分類器を交差検証することができます。

単純ベイズ分類器の学習と交差検証を行います。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に渡すことにより、そのモデルを使用して汎化誤差を推定してください。

基因rror = kfoldLoss(CVMdl)
基因rror = 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 で導入