メインコンテンツ

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: {3×4 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, 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

詳細

すべて折りたたむ

拡張機能

すべて展開する

バージョン履歴

R2014b で導入