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 配列の値
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

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

カーネル平滑化密度のサポート。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単純ベイズ分類器のサイズの縮小
crossval単純ベイズ分類器の交差検証
edge単純ベイズ分類器の分類エッジ
logp単純ベイズ分類器の対数条件なし確率密度
loss単純ベイズ分類器の分類損失
margin単純ベイズ分類器の分類マージン
partialDependence部分従属の計算
plotPartialDependence部分従属プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
predict単純ベイズ分類器の使用による観測値の分類
resubEdge単純ベイズ分類器の再代入分類エッジ
resubLoss単純ベイズ分類器の再代入分類損失
resubMargin単純ベイズ分類器の再代入分類マージン
resubPredict単純ベイズ分類器の使用による観測値の分類

すべて折りたたむ

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

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}


  Properties, Methods

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