Main Content

margin

単純ベイズ分類器の分類マージン

説明

m = margin(Mdl,tbl,ResponseVarName) は、table tbl に含まれている予測子データと tbl.ResponseVarName に含まれているクラス ラベルを使用して、学習済みの単純ベイズ分類器 Mdl分類マージン (m) を返します。

m = margin(Mdl,tbl,Y) は、table tbl 内の予測子データとベクトル Y 内のクラス ラベルを使用して、Mdl の分類マージンを返します。

m = margin(Mdl,X,Y) は、行列 X 内の予測子データと Y 内のクラス ラベルを使用して、Mdl の分類マージンを返します。

m は、Y と同じ長さの数値ベクトルとして返されます。m の各エントリの推定は、学習させた単純ベイズ分類器 MdlX の対応する行、真のクラス ラベル Y を使用して実行されます。

すべて折りたたむ

単純ベイズ分類器のテスト標本分類マージンを推定します。観測マージンは、観測された真のクラスのスコアから、該当するクラスのすべてのスコアの中で最大の偽のクラスのスコアを差し引いたものです。

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

load fisheriris
X = meas;
Y = species;
rng('default')  % for reproducibility

Y のクラス情報を使用して、観測値を階層的に学習セットとテスト セットに無作為に分割します。テスト用の 30% のホールドアウト標本を指定します。

cv = cvpartition(Y,'HoldOut',0.30);

学習インデックスとテスト インデックスを抽出します。

trainInds = training(cv);
testInds = test(cv);

学習データ セットとテスト データ セットを指定します。

XTrain = X(trainInds,:);
YTrain = Y(trainInds);
XTest = X(testInds,:);
YTest = Y(testInds);

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

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


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

テスト標本分類マージンを推定します。

m = margin(Mdl,XTest,YTest);
median(m)
ans = 1.0000

テスト標本分類マージンのヒストグラムを表示します。

histogram(m,length(unique(m)),'Normalization','probability')
xlabel('Test Sample Margins')
ylabel('Probability')
title('Probability Distribution of the Test Sample Margins')

Figure contains an axes object. The axes object with title Probability Distribution of the Test Sample Margins, xlabel Test Sample Margins, ylabel Probability contains an object of type histogram.

分類器のマージンは比較的大きいことが推奨されます。

複数のモデルによるテスト標本マージンを比較することにより、特徴選択を実行します。この比較のみに基づくと、マージンが最大である分類器が最良のモデルです。

fisheriris データ セットを読み込みます。予測子 X とクラス ラベル Y を指定します。

load fisheriris
X = meas;
Y = species;
rng('default')  % for reproducibility

Y のクラス情報を使用して、観測値を階層的に学習セットとテスト セットに無作為に分割します。テスト用の 30% のホールドアウト標本を指定します。cvPartition によりデータ セットの分割が定義されます。

cv = cvpartition(Y,'Holdout',0.30);

学習インデックスとテスト インデックスを抽出します。

trainInds = training(cv);
testInds = test(cv);

学習データ セットとテスト データ セットを指定します。

XTrain = X(trainInds,:);
YTrain = Y(trainInds);
XTest = X(testInds,:);
YTest = Y(testInds);

次の 2 つのデータ セットを定義します。

  • fullX にはすべての予測子が含まれます。

  • partX には最後の 2 つの予測子が含まれます。

fullX = XTrain;
partX = XTrain(:,3:4);

各予測子セットの単純ベイズ分類器に学習させます。

fullMdl = fitcnb(fullX,YTrain);
partMdl = fitcnb(partX,YTrain);

fullMdl および partMdl は学習済みの ClassificationNaiveBayes 分類器です。

分類器ごとにテスト標本マージンを推定します。

fullM = margin(fullMdl,XTest,YTest);
median(fullM)
ans = 1.0000
partM = margin(partMdl,XTest(:,3:4),YTest);
median(partM)
ans = 1.0000

箱ひげ図を使用してモデルごとのマージンの分布を表示します。

boxplot([fullM partM],'Labels',{'All Predictors','Two Predictors'})
ylim([0.98 1.01]) % Modify the y-axis limits to see the boxes
title('Boxplots of Test Sample Margins')

Figure contains an axes object. The axes object with title Boxplots of Test Sample Margins contains 14 objects of type line. One or more of the lines displays its values using only markers

fullMdl (すべての予測子のモデル) および partMdl (2 つの予測子のモデル) のマージンは、同じ中央値で同様の分布を示しています。partMdl では複雑度が低減されますが、外れ値が存在しています。

入力引数

すべて折りたたむ

単純ベイズ分類モデル。fitcnb によって返される ClassificationNaiveBayes モデル オブジェクト、または compact によって返される CompactClassificationNaiveBayes モデル オブジェクトとして指定します。

モデルを学習させるために使用する標本データ。テーブルとして指定します。tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。tbl には、Mdl の学習を行うために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。必要に応じて、tbl に応答変数用および観測値の重み用の追加列を含めることができます。

テーブルに格納されている標本データを使用して Mdl の学習を行った場合、margin の入力データもテーブルに格納されていなければなりません。

応答変数の名前。tbl 内の変数の名前で指定します。

ResponseVarName には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 ytbl.y として格納されている場合、'y' として指定します。それ以外の場合、tbl の列は y を含めてすべて予測子として扱われます。

Mdl を学習させるために使用した応答変数が tbl に含まれている場合、ResponseVarName を指定する必要はありません。

応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

データ型: char | string

予測子データ。数値行列として指定します。

X の各行は 1 つの観測値 ("インスタンス" や "例" とも呼ばれます) に対応し、各列は 1 つの変数 ("特徴" とも呼ばれます) に対応します。X の列内の変数は、分類器 Mdl に学習させた変数と同じでなければなりません。

Y の長さと X の行数は等しくなければなりません。

データ型: double | single

クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトルのいずれか、あるいは文字ベクトルの cell 配列として指定します。Y のデータ型は Mdl.ClassNames と同じでなければなりません。(string 配列は文字ベクトルの cell 配列として扱われます)。

Y の長さは tbl または X の行数と等しくなければなりません。

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

詳細

すべて折りたたむ

分類エッジ

"分類エッジ" は、分類マージンの加重平均です。

重みを指定すると、この重みは正規化され、各クラスの事前確率の合計になります。正規化された重みを使用して、加重平均が計算されます。

複数の分類器を選択して特徴選択などのタスクを実行する場合は、最も高いエッジが得られる分類器を選択します。

分類マージン

各観測値の "分類マージン" は、真のクラスのスコアと偽のクラスの最大スコアの差です。マージンは分類の信頼尺度となります。つまり、複数の分類器がある場合、(同じスケールで) より大きいマージンが得られる分類器の方が優れています。

事後確率

"事後確率" はデータが与えられる場合に、観測値が特定のクラスに属している確率です。

単純ベイズの場合、与えられた観測値 (x1,...,xP) の分類が k になる事後確率は次のようになります。

P^(Y=k|x1,..,xP)=P(X1,...,XP|y=k)π(Y=k)P(X1,...,XP),

ここで

  • P(X1,...,XP|y=k) は、予測子がクラス k に含まれる場合の条件付き同時密度です。予測子の分布名は Mdl.DistributionNames に格納します。

  • π(Y = k) はクラスの事前確率の分布です。Mdl.Prior は事前分布を保存します。

  • P(X1,..,XP) は予測子の同時密度です。各クラスは離散的なので、次のようになります。P(X1,...,XP)=k=1KP(X1,...,XP|y=k)π(Y=k).

事前確率

クラスの "事前確率" は、母集団内でそのクラスの観測値が出現すると考えられる相対頻度です。

スコア

単純ベイズの "スコア" は観測が与えられる場合のクラスの事後確率です。

拡張機能

バージョン履歴

R2014b で導入