Main Content

ClassificationNaiveBayes

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

説明

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

作成

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

プロパティ

すべて展開する

予測子のプロパティ

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

予測子名。文字ベクトルの 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)) から削除されます。

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

単純ベイズ分類器の学習に使用する、標準化されていない予測子。数値行列として指定します。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 配列の値
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

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

単純ベイズ分類器の学習に使用したクラス ラベル。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 によって、名前と値のペアの引数 'Weights' に設定した値が正規化され、特定のクラス内の重みはそのクラスの事前確率の合計となります。

分類器のプロパティ

誤分類コスト。数値正方行列を指定します。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単純ベイズ分類モデルのインクリメンタル学習器への変換
limeLocal 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 を作成します。

load fisheriris
X = 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}


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

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

Mdl.ClassNames
ans = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Mdl.Prior
ans = 1×3

    0.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 つの予測子を削除します。

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 で導入

すべて展開する