edge
単純ベイズ分類器の分類エッジ
構文
説明
は、table e
= edge(Mdl
,tbl
,ResponseVarName
)tbl
内の予測子データと tbl.ResponseVarName
内のクラス ラベルを使用して、単純ベイズ分類器 Mdl
の分類エッジ (e
) を返します。
分類エッジ (e
) は、分類マージンの加重平均を表すスカラー値です。
例
単純ベイズ分類器のテスト標本エッジの推定
単純ベイズ分類器のテスト標本エッジ (分類マージン平均) を推定します。テスト標本エッジは、予測されたクラスに対して推定された事後確率と、事後確率が次に低いクラスの事後確率の間におけるテスト標本の差異の平均です。
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
分類器です。
テスト標本エッジを推定します。
e = edge(Mdl,XTest,YTest)
e = 0.8658
マージン平均は約 0.87
です。この結果は、分類器ラベルの予測子の信頼度が高いことを示します。
単純ベイズ分類器のテスト標本加重エッジの推定
単純ベイズ分類器のテスト標本加重エッジ (加重マージン平均) を推定します。テスト標本エッジは、予測されたクラスに対して推定された事後確率と、事後確率が次に低いクラスの事後確率の間におけるテスト標本の差異の平均です。加重標本エッジは、各観測値に重みが割り当てられる際のマージン平均を推定します。
fisheriris
データ セットを読み込みます。150 本のアヤメについて 4 つの花弁の測定値が含まれる数値行列 X
を作成します。対応するアヤメの種類が含まれる文字ベクトルの cell 配列 Y
を作成します。
load fisheriris X = meas; Y = species; rng('default') % for reproducibility
一部の測定値の品質は、旧式のテクノロジーが測定に使用されたために低いと仮定します。この効果をシミュレートするために、20 個の測定値で構成されるランダムなサブセットにノイズを追加します。
idx = randperm(size(X,1),20); X(idx,:) = X(idx,:) + 2*randn(20,size(X,2));
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
分類器です。
テスト標本エッジを推定します。
e = edge(Mdl,XTest,YTest)
e = 0.5920
平均マージンは約 0.59 です。
ノイズを含む測定値の影響を減らす方法の 1 つは、他の観測値よりも低く重み付けすることです。品質が高い観測値には、他の観測値の 2 倍の重みを与える重みベクトルを定義します。
n = size(X,1); weights = ones(size(X,1),1); weights(idx) = 0.5; weightsTrain = weights(trainInds); weightsTest = weights(testInds);
予測子 XTrain
、クラス ラベル YTrain
、および重み weightsTrain
を使用して、単純ベイズ分類器を学習させます。
Mdl_W = fitcnb(XTrain,YTrain,'Weights',weightsTrain,... 'ClassNames',{'setosa','versicolor','virginica'});
Mdl_W
は学習させた ClassificationNaiveBayes
分類器です。
加重スキームを使用して、テスト標本の加重エッジを推定します。
e_W = edge(Mdl_W,XTest,YTest,'Weights',weightsTest)
e_W = 0.6816
加重平均マージンは約 0.69 です。この結果は、平均すると、加重分類器ラベル予測子の信頼度が、ノイズで破損した予測子よりも高いことを示します。
テスト標本エッジの比較による単純ベイズ分類器の特徴量の選択
分類器エッジは、分類器マージンの平均を測定します。特徴選択を行う方法の一つとして、複数のモデルからのテスト標本エッジを比較します。この条件のみに基づくと、エッジが最高となる分類器が最善の分類器となります。
ionosphere
データセットを読み込みます。安定させるため、最初の 2 つの予測子を削除します。
load ionosphere X = X(:,3:end); 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);
次の 2 つの学習データ セットを定義します。
fullXTrain
にはすべての予測子が含まれます。partXTrain
には上位 10 個の最も重要な予測子が含まれます。
fullXTrain = XTrain; idx = fscmrmr(XTrain,YTrain); partXTrain = XTrain(:,idx(1:10));
各予測子セットの単純ベイズ分類器に学習させます。
fullMdl = fitcnb(fullXTrain,YTrain); partMdl = fitcnb(partXTrain,YTrain);
fullMdl
と partMdl
は、学習済みの ClassificationNaiveBayes
分類器です。
分類器ごとにテスト標本エッジを推定します。
fullEdge = edge(fullMdl,XTest,YTest)
fullEdge = 0.5831
partEdge = edge(partMdl,XTest(:,idx(1:10)),YTest)
partEdge = 0.7593
上位 10 個の最も重要な予測子を使用した分類器のテスト標本エッジの方が大きくなります。
入力引数
Mdl
— 単純ベイズ分類モデル
ClassificationNaiveBayes
モデル オブジェクト | CompactClassificationNaiveBayes
モデル オブジェクト
単純ベイズ分類モデル。fitcnb
によって返される ClassificationNaiveBayes
モデル オブジェクト、または compact
によって返される CompactClassificationNaiveBayes
モデル オブジェクトとして指定します。
tbl
— 標本データ
テーブル
モデルを学習させるために使用する標本データ。テーブルとして指定します。tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。tbl
には、Mdl
の学習を行うために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。必要に応じて、tbl
に応答変数用および観測値の重み用の追加列を含めることができます。
テーブルに格納されている標本データを使用して Mdl
の学習を行った場合、edge
の入力データもテーブルに格納されていなければなりません。
ResponseVarName
— 応答変数名
tbl
内の変数の名前
応答変数の名前。tbl
内の変数の名前で指定します。
ResponseVarName
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 y
が tbl.y
として格納されている場合、'y'
として指定します。それ以外の場合、tbl
の列は y
を含めてすべて予測子として扱われます。
Mdl
を学習させるために使用した応答変数が tbl
に含まれている場合、ResponseVarName
を指定する必要はありません。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
データ型: char
| string
X
— 予測子データ
数値行列
予測子データ。数値行列として指定します。
X
の各行は 1 つの観測値 ("インスタンス" や "例" とも呼ばれます) に対応し、各列は 1 つの変数 ("特徴" とも呼ばれます) に対応します。X
の列内の変数は、分類器 Mdl
に学習させた変数と同じでなければなりません。
Y
の長さと X
の行数は等しくなければなりません。
データ型: double
| single
Y
— クラス ラベル
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
Weights
— 観測値の重み
ones(size(X,1),1)
(既定値) | 数値ベクトル | tbl
内の変数の名前
観測値の重み。数値ベクトルまたは tbl
内の変数の名前を指定します。X
または tbl
の各行に含まれている観測値には、Weights
の対応する重みが適用されます。
数値ベクトルで Weights
を指定する場合、Weights
のサイズは X
または tbl
の行数と等しくなければなりません。
Weights
として tbl
内の変数名を指定する場合、名前は文字ベクトルまたは string スカラーでなければなりません。たとえば、重みが tbl.w
として格納されている場合、Weights
として 'w'
を指定します。それ以外の場合、tbl
の列は tbl.w
を含めてすべて予測子として扱われます。
データ型: double
| char
| string
詳細
分類エッジ
"分類エッジ" は、分類マージンの加重平均です。
重みを指定すると、この重みは正規化され、各クラスの事前確率の合計になります。正規化された重みを使用して、加重平均が計算されます。
複数の分類器を選択して特徴選択などのタスクを実行する場合は、最も高いエッジが得られる分類器を選択します。
分類マージン
各観測値の "分類マージン" は、真のクラスのスコアと偽のクラスの最大スコアの差です。マージンは分類の信頼尺度となります。つまり、複数の分類器がある場合、(同じスケールで) より大きいマージンが得られる分類器の方が優れています。
事後確率
"事後確率" はデータが与えられる場合に、観測値が特定のクラスに属している確率です。
単純ベイズの場合、与えられた観測値 (x1,...,xP) の分類が k になる事後確率は次のようになります。
ここで
は、予測子がクラス k に含まれる場合の条件付き同時密度です。予測子の分布名は
Mdl.DistributionNames
に格納します。π(Y = k) はクラスの事前確率の分布です。
Mdl.Prior
は事前分布を保存します。は予測子の同時密度です。各クラスは離散的なので、次のようになります。
事前確率
クラスの "事前確率" は、母集団内でそのクラスの観測値が出現すると考えられる相対頻度です。
分類スコア
単純ベイズの "スコア" は観測が与えられる場合のクラスの事後確率です。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
この関数は、tall 配列を完全にサポートします。詳細は、tall 配列を参照してください。
バージョン履歴
R2014b で導入
参考
ClassificationNaiveBayes
| CompactClassificationNaiveBayes
| predict
| fitcnb
| loss
| resubLoss
| margin
| resubEdge
トピック
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)