Main Content

margin

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

説明

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

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

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

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

すべて折りたたむ

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

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

loadfisheririsX = 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} Properties, Methods

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 contains an object of type histogram.

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

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

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

loadfisheririsX = 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 boxestitle('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.

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 | x 1 , .. , x P ) = P ( X 1 , ... , X P | y = k ) π ( Y = k ) P ( X 1 , ... , X P ) ,

ここで

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

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

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

事前確率

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

スコア

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

拡張機能

バージョン履歴

R2014b で導入