ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ClassificationNaiveBayes クラス

スーパークラス: CompactClassificationNaiveBayes

説明

ClassificationNaiveBayes はマルチクラス学習のための単純ベイズ分類器です。fitcnb および学習データを使用し、ClassificationNaiveBayes 分類器に学習させます。

学習させた ClassificationNaiveBayes 分類器は学習データ、パラメーター値、データ分布および事前確率を格納します。これらの分類器は以下に使用できます。

  • 再代入予測の推定。詳細については、resubPredict を参照してください。

  • 新しいデータのラベルまたは事後確率の予測。詳細については、predict を参照してください。

構築

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

プロパティ

すべて展開する

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

データ型: single | double

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

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

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

データ型: cell

各クラス名。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell ベクトルを指定します。

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

データ型: カテゴリカル | char | logical | single | double | cell

誤分類のコスト。K 行 K 列の正方行列として指定します。

Cost(i,j) の値は真のクラスがi の場合に、点をクラス j に判別するコストです。Cost の行と列の順序は ClassNames 内のクラス順に対応します。

Cost の値は学習に影響しません。ドット表記によって Mdl を学習させてから、Cost をリセットできます (例: Mdl.Cost = [0 0.5; 1 0];)。

データ型: double | single

fitcnb で予測子をモデル化するために使用する予測子分布。文字ベクトル、または文字ベクトルの cell 配列を指定します。

次の表は、使用できる分布の一覧です。

説明
'kernel'カーネル平滑化密度推定。
'mn'多項 bag-of-tokens モデルすべての予測子がこの分布をもつことを示します。
'mvmn'多変量多項分布。
'normal'正規 (ガウス) 分布。

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

データ型: char | cell

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

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

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

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

データ型: cell

展開された予測子名。文字ベクトルの cell 配列として格納されます。

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

データ型: cell

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

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

カーネル平滑化のタイプ。文字ベクトル、または文字ベクトルの cell 配列を指定します。Kernel の長さは予測子の数 (size(X,2)) と同じです。Kernel{j} は予測子 j に対応し、カーネル平滑化のタイプを表す文字ベクトルを格納します。次の表はサポートされるカーネル平滑化のタイプについて説明しています。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}

セルが空の場合 ([])、対応する予測子へのカーネル分布のあてはめは行われません。

データ型: char | cell

分類器の学習に用いられる (名前と値のペアの引数の値などの) パラメーター値。オブジェクトとして指定します。この表は ModelParameters のプロパティについてまとめています。プロパティは、分類器の学習に用いられる名前と値のペアの引数の値に対応します。

プロパティ目的
DistributionNamesデータ分布または分布。これは、DistributionNames プロパティと同じ値です。
Kernelカーネル平滑化のタイプ。これは、Kernel プロパティと同じです。
Method学習方法。単純ベイズの場合、値は 'NaiveBayes' です。
Supportカーネル平滑化の密度サポート。これは、Support プロパティと同じです。
Type学習タイプ。分類の場合、値は 'classification' です。
Widthカーネル平滑化ウィンドウの幅。これは、Width プロパティと同じです。

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

学習観測値の数。数値スカラーとして指定します。

X または Y が欠損値を含む場合、NumObservationsY の長さよりも短くなることがあります。

データ型: double

予測子名。文字ベクトルの cell 配列を指定します。PredictorNames の要素の順序は X 内の順序に対応します。

データ型: cell

クラスの事前確率。数値行ベクトルとして指定されます。Prior は 1 行 K 列のベクトルで、要素の順序は ClassNames の要素と一致しています。

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

Prior の値は最適近似のモデルを変更しません。したがって、Mdl をドット表記を使用して学習させた後に Prior をリセットできます (例: Mdl.Prior = [0.2 0.8];)。

データ型: double | single

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

データ型: char

分類スコア変換関数。文字ベクトルまたは関数ハンドルを指定します。

スコア変換関数を function などに変更するには、ドット表記を使用します。

  • 組み込み関数の場合、function を表の値に置き換えて次のコードを入力します。

    Mdl.ScoreTransform = 'function';

    説明
    '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 = @function;

    function は行列 (元のスコア) を受け入れ、同じサイズの行列 (変換されたスコア) を返さなければなりません。

データ型: char | function_handle

カーネル平滑化密度のサポート。cell ベクトルとして指定します。Support の長さは予測子の数と同じです (size(X,2))。セルはカーネル密度を適用する領域を表します。

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

説明
1 行 2 列の数値行ベクトルたとえば、[L,U] のように指定します。LU はそれぞれ、密度サポートの下限と上限を表します。
'positive'密度サポートはすべて正の実数です。
'unbounded'密度サポートはすべて実数です。

セルが空の場合 ([])、対応する予測子へのカーネル分布のあてはめは行われません。

観測値の重み。数値ベクトルとして指定します。

W の長さは NumObservations です。

fitcnb によって、'Weights' 名前と値のペアのパラメーターに設定した値が正規化され、特定のクラス内の重みはクラスの事前確率の合計となります。

データ型: double

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

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

標準化されていない予測子データ。数値行列として指定します。XNumObservations 行 P 列をもちます。

X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

欠損値により X から削除された行は除外されます。

データ型: double

観測されたクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y のデータ型は、fitcnb の入力引数 Y と同じになります。(string 配列は文字ベクトルの cell 配列として扱われます)。

Y の各行は、X の対応する行の観測された分類を表します。

欠損値により Y から削除された要素は除外されます。

データ型: カテゴリカル | char | logical | single | double | cell

メソッド

compactコンパクトな単純ベイズ分類器
crossval交差検証した単純ベイズ分類器
resubEdge再代入による単純ベイズ分類器の分類エッジ
resubLoss再代入による単純ベイズ分類器の分類損失
resubMargin再代入による単純ベイズ分類器の分類マージン
resubPredict単純ベイズ分類器の再代入ラベルを予測

継承メソッド

edge単純ベイズ分類器の分類エッジ
logP単純ベイズ分類器の対数条件なし確率密度
loss単純ベイズ分類器の分類誤差
margin単純ベイズ分類器の分類マージン
predict単純ベイズ分類モデルの使用によるラベルの予測

コピーのセマンティクス

値。値のクラスがコピー操作に与える影響については、オブジェクトのコピー (MATLAB)を参照してください。

すべて折りたたむ

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

フィッシャーのアヤメのデータを読み込みます。

load fisheriris
X = meas;
Y = species;

X は、150 本のアヤメについて 4 つの花弁の測定値が含まれている数値行列です。Y は、対応するアヤメの種類が含まれている文字ベクトルの cell 配列です。

単純ベイズ分類器を学習させます。

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.ClassNames
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Mdl.Prior
ans = 1×3

    0.3333    0.3333    0.3333

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

学習後に事前確率をリセットすることもできます。たとえば、事前確率を 0.5、0.2 および 0.3 にそれぞれ設定します。

Mdl.Prior = [0.5 0.2 0.3];

Mdl を、たとえば、predict に渡して新しい測定をラベル化できます。また crossval に渡すと分類器に交差検証を実行できます。

詳細

すべて展開する

アルゴリズム

  • fitcnb を使用して Mdl を学習させる際に 'DistributionNames','mn' を指定する場合、多項分布は bag-of-tokens モデルを使用して近似されます。トークン j がプロパティ DistributionParameters{k,j} のクラス k に出現する確率が保存されます。加法平滑化 [2] を使用すると、推定確率は次のようになります。

    P(token j|class k)=1+cj|kP+ck,

    ここで

    • cj|k=nki:yiclass kxijwii:yiclass kwi; はクラス k におけるトークン j の重み付き発生数です。

    • nk はクラス k 内の観測数です。

    • wi は観測値 i の重みです。クラス内の重みは、その合計がクラスの事前確率になるように正規化されます。

    • ck=j=1Pcj|k; は、クラス k に含まれているすべてのトークンの重み付き発生数の合計です。

  • fitcnb を使用して Mdl を学習させる際に 'DistributionNames','mvmn' を指定する場合、次のようになります。

    1. 予測子ごとに一意のレベルのリストが収集され、並べ替えられたリストは CategoricalLevels に保存され、各レベルはビンと見なされます。予測子とクラスの各組み合わせは、個別の独立した多項確率変数です。

    2. クラス k の予測子が j の場合、CategoricalLevels{j} に保存されたリストを使用して、カテゴリカル レベルごとのインスタンスがカウントされます。

    3. クラス k の予測子 j が、プロパティ DistributionParameters{k,j} においてレベル L をもつ場合、すべてのレベルの確率は CategoricalLevels{j} に保存されます。加法平滑化 [2] を使用すると、推定確率は次のようになります。

      P(predictor j=L|class k)=1+mj|k(L)mj+mk,

      ここで

      • mj|k(L)=nki:yi class kI{xij=L}wii:yi class kwi; は、クラス k 内の予測子 j が L に等しい観測値の重み付き個数です。

      • nk はクラス k 内の観測数です。

      • xij = L の場合は I{xij=L}=1、それ以外の場合は 0 です。

      • wi は観測値 i の重みです。クラス内の重みは、その合計がクラスの事前確率になるように正規化されます。

      • mj は予測子 j の異なるレベルの数です。

      • mk はクラス k 内の重み付けされた観測値の数です。

参照

[1] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.

[2] Manning, C. D., P. Raghavan, and M. Schütze. Introduction to Information Retrieval, NY: Cambridge University Press, 2008.

拡張機能