edge
マルチクラス誤り訂正出力符号 (ECOC) モデルの分類エッジ
説明
は、table e = edge(Mdl,tbl,ResponseVarName)tbl 内の予測子データと tbl.ResponseVarName 内のクラス ラベルを使用して、学習済みのマルチクラス誤り訂正出力符号 (ECOC) 分類器 Mdl の分類エッジ (e) を返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、復号化方式、バイナリ学習器の損失関数、詳細レベルを指定できます。e = edge(___,Name,Value)
例
SVM バイナリ分類器による ECOC モデルのテスト標本の分類エッジを計算します。
フィッシャーのアヤメのデータ セットを読み込みます。予測子データ X、応答データ Y、および Y 内のクラスの順序を指定します。
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); % Class order rng(1); % For reproducibility
SVM バイナリ分類器を使用して ECOC モデルを学習させます。テスト用に 30% のホールドアウト標本を指定し、SVM テンプレートを使用して予測子を標準化し、クラスの順序を指定します。
t = templateSVM('Standardize',true); PMdl = fitcecoc(X,Y,'Holdout',0.30,'Learners',t,'ClassNames',classOrder); Mdl = PMdl.Trained{1}; % Extract trained, compact classifier
PMdl は ClassificationPartitionedECOC モデルです。これには Trained プロパティが含まれています。これは、学習データを使用して学習をさせた CompactClassificationECOC モデルが格納されている、1 行 1 列の cell 配列です。
テスト標本エッジを計算します。
testInds = test(PMdl.Partition); % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);
e = edge(Mdl,XTest,YTest)e = 0.6860
テスト標本マージンの平均はおよそ 0.46 です。
ECOC モデルのテスト標本加重マージンの平均を計算します。
データ セット内の観測値は順番に測定されており、技術の向上によって最新の 75 件の観測値の品質が高くなっているとします。品質が高い観測値に他の観測値より大きい重みを与えることにより、この改善を反映させます。
フィッシャーのアヤメのデータ セットを読み込みます。予測子データ X、応答データ Y、および Y 内のクラスの順序を指定します。
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); % Class order rng(1); % For reproducibility
品質が高い観測値に他の観測値の 2 倍の重みを割り当てる重みベクトルを定義します。
n = size(X,1); weights = [ones(n-75,1);2*ones(75,1)];
SVM バイナリ分類器を使用して ECOC モデルを学習させます。30% のホールドアウト標本と加重スキームを指定します。SVM テンプレートを使用して予測子を標準化し、クラスの順序を指定します。
t = templateSVM('Standardize',true); PMdl = fitcecoc(X,Y,'Holdout',0.30,'Weights',weights,... 'Learners',t,'ClassNames',classOrder); Mdl = PMdl.Trained{1}; % Extract trained, compact classifier
PMdl は学習させた ClassificationPartitionedECOC モデルです。これには Trained プロパティが含まれています。これは、学習データを使用して学習をさせた CompactClassificationECOC 分類器が格納されている、1 行 1 列の cell 配列です。
加重スキームを使用して、テスト標本の加重エッジを計算します。
testInds = test(PMdl.Partition); % Extract the test indices XTest = X(testInds,:); YTest = Y(testInds,:); wTest = weights(testInds,:); e = edge(Mdl,XTest,YTest,'Weights',wTest)
e = 0.7196
テスト標本の平均加重マージンはおよそ 0.48 です。
複数のモデルのテスト標本エッジを比較することにより、特徴選択を実行します。この比較のみに基づくと、エッジが最高である分類器が最善の分類器となります。
フィッシャーのアヤメのデータ セットを読み込みます。予測子データ X、応答データ Y、および Y 内のクラスの順序を指定します。
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); % Class order rng(1); % For reproducibility
データ セットを学習セットとテスト セットに分割します。テスト用の 30% のホールドアウト標本を指定します。
Partition = cvpartition(Y,'Holdout',0.30); testInds = test(Partition); % Indices for the test set XTest = X(testInds,:); YTest = Y(testInds,:);
Partition によりデータ セットの分割が定義されます。
次の 2 つのデータ セットを定義します。
fullXにはすべての予測子が含まれます。partXには花弁の寸法のみが含まれています。
fullX = X; partX = X(:,3:4);
各予測子セットについて SVM バイナリ分類器を使用する ECOC モデルに学習をさせます。分割定義を指定し、SVM テンプレートを使用して予測子を標準化し、クラスの順序を指定します。
t = templateSVM('Standardize',true); fullPMdl = fitcecoc(fullX,Y,'CVPartition',Partition,'Learners',t,... 'ClassNames',classOrder); partPMdl = fitcecoc(partX,Y,'CVPartition',Partition,'Learners',t,... 'ClassNames',classOrder); fullMdl = fullPMdl.Trained{1}; partMdl = partPMdl.Trained{1};
fullPMdl および partPMdl は ClassificationPartitionedECOC モデルです。各モデルには Trained プロパティが含まれています。これは、対応する学習セットを使用して学習をさせた CompactClassificationECOC モデルが格納されている、1 行 1 列の cell 配列です。
各分類器のテスト標本エッジを計算します。
fullEdge = edge(fullMdl,XTest,YTest)
fullEdge = 0.6860
partEdge = edge(partMdl,XTest(:,3:4),YTest)
partEdge = 0.7259
partMdl のエッジの値は、より複雑なモデル fullMdl の値と同等です。
入力引数
完全またはコンパクトなマルチクラス ECOC モデル。ClassificationECOC または CompactClassificationECOC モデル オブジェクトを指定します。
完全またはコンパクトな ECOC モデルを作成する方法については、ClassificationECOC または CompactClassificationECOC を参照してください。
標本データ。テーブルとして指定します。tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用および観測値の重み用の追加列を tbl に含めることができます。tbl には、Mdl を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
table に格納されている標本データを使用して Mdl に学習をさせた場合、edge の入力データも table に含まれていなければなりません。
Mdl に学習をさせるときに、fitcecoc の名前と値のペアの引数 'Learners' で指定したテンプレート オブジェクトについて 'Standardize',true を設定したとします。この場合、対応するバイナリ学習器 j について、対応する Mdl.BinaryLearner{j}.Mu 内の平均および Mdl.BinaryLearner{j}.Sigma 内の標準偏差を使用して、新しい予測子データの列が標準化されます。
データ型: table
応答変数の名前。tbl 内の変数の名前で指定します。Mdl を学習させるために使用した応答変数が tbl に含まれている場合、ResponseVarName を指定する必要はありません。
ResponseVarName を指定する場合は、文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、応答変数が tbl.y として格納されている場合、ResponseVarName として 'y' を指定します。それ以外の場合、tbl の列は tbl.y を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
データ型: char | string
予測子データ。数値行列として指定します。
X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。X の列内の変数は、分類器 Mdl に学習させた変数と同じでなければなりません。
X の行数は Y の行数と等しくなければなりません。
Mdl に学習をさせるときに、fitcecoc の名前と値のペアの引数 'Learners' で指定したテンプレート オブジェクトについて 'Standardize',true を設定したとします。この場合、対応するバイナリ学習器 j について、対応する Mdl.BinaryLearner{j}.Mu 内の平均および Mdl.BinaryLearner{j}.Sigma 内の標準偏差を使用して、新しい予測子データの列が標準化されます。
データ型: double | single
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: edge(Mdl,X,Y,'BinaryLoss','exponential','Decoding','lossbased') は、バイナリ学習器の損失関数として指数関数を使用し、損失に基づく復号化方式をバイナリ損失の集計に使用するよう指定します。
バイナリ学習器損失関数。組み込みの損失関数の名前または関数ハンドルとして指定します。
次の表で、組み込み関数について説明します。ここで、yj は特定のバイナリ学習器のクラス ラベル (集合 {–1,1,0} 内)、sj は観測値 j のスコア、g(yj,sj) はバイナリ損失の式です。
値 説明 スコア領域 g(yj,sj) "binodeviance"二項分布からの逸脱度 (–∞,∞) log[1 + exp(–2yjsj)]/[2log(2)] "exponential"指数 (–∞,∞) exp(–yjsj)/2 "hamming"ハミング [0,1] または (–∞,∞) [1 – sign(yjsj)]/2 "hinge"ヒンジ (–∞,∞) max(0,1 – yjsj)/2 "linear"線形 (–∞,∞) (1 – yjsj)/2 "logit"ロジスティック (–∞,∞) log[1 + exp(–yjsj)]/[2log(2)] "quadratic"2 次 [0,1] [1 – yj(2sj – 1)]2/2 バイナリ損失は、yj = 0 の場合に損失が 0.5 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます[1]。
カスタム バイナリ損失関数の場合は関数ハンドルを指定します。たとえば、
customFunctionの場合はBinaryLoss=@customFunctionを指定します。customFunctionの形式は次のとおりです。bLoss = customFunction(M,s)
MはMdl.CodingMatrixに格納された K 行 B 列の符号化行列です。sは 1 行 B 列の分類スコアの行ベクトルです。bLossは分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。K は、クラスの数です。
B はバイナリ学習器の数です。
カスタムなバイナリ損失関数を渡す例については、カスタム バイナリ損失関数の使用による ECOC モデルのテスト標本ラベルの予測を参照してください。
次の表に BinaryLoss の既定値を示します。既定値は、バイナリ学習器が返すスコアの範囲によって異なります。
| 仮定 | 既定値 |
|---|---|
すべてのバイナリ学習器が次のいずれかである。
| "quadratic" |
| すべてのバイナリ学習器が SVM であるか、SVM 学習器の線形またはカーネル分類モデルである。 | "hinge" |
すべてのバイナリ学習器が、AdaboostM1 または GentleBoost によって学習をさせたアンサンブルである。 | "exponential" |
すべてのバイナリ学習器が、LogitBoost によって学習をさせたアンサンブルである。 | "binodeviance" |
fitcecoc で FitPosterior=true を設定して、クラスの事後確率を予測するように指定している。 | "quadratic" |
| バイナリ学習器が異種混合で、さまざまな損失関数を使用している。 | "hamming" |
既定値を確認するには、コマンド ラインでドット表記を使用して学習済みモデルの BinaryLoss プロパティを表示します。
例: BinaryLoss="binodeviance"
データ型: char | string | function_handle
バイナリ損失を集計する復号化方式。"lossweighted" または "lossbased" として指定します。詳細は、バイナリ損失を参照してください。
例: Decoding="lossbased"
データ型: char | string
予測子データにおける観測値の次元。'ObservationsIn' と 'columns' または 'rows' から構成されるコンマ区切りのペアとして指定します。Mdl.BinaryLearners には ClassificationLinear モデルが格納されていなければなりません。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、実行時間が大幅に短縮される可能性があります。table の予測子データに対して 'ObservationsIn','columns' を指定することはできません。
推定オプション。statset によって返される構造体配列として指定します。
並列計算を起動するには、Parallel Computing Toolbox™ ライセンスが必要です。
例: Options=statset(UseParallel=true)
データ型: struct
詳細レベル。0 または 1 として指定します。Verbose は、コマンド ウィンドウに表示される診断メッセージの量を制御します。
Verbose が 0 の場合、診断メッセージは表示されません。それ以外の場合は、診断メッセージが表示されます。
例: Verbose=1
データ型: single | double
観測値の重み。'Weights' と数値ベクトル、または tbl に含まれる変数の名前から構成されるコンマ区切りのペアとして指定します。重みを指定すると、edge は重み付きの分類エッジを計算します。
Weights として数値ベクトルを指定する場合、Weights のサイズは X または tbl 内の観測値の個数と等しくなければなりません。合計が各クラスの事前確率の値と等しくなるように Weights が正規化されます。
tbl 内の変数名を Weights として指定する場合、文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みが tbl.w として格納されている場合、Weights として 'w' を指定します。それ以外の場合、tbl の列は tbl.w を含めてすべて予測子として扱われます。
データ型: single | double | char | string
出力引数
分類エッジ。数値スカラーまたはベクトルとして返されます。e は分類マージンの加重平均を表します。
Mdl.BinaryLearners に ClassificationLinear モデルが含まれている場合、e は 1 行 L 列のベクトルになります。L は、線形分類モデル内の正則化強度の個数 (numel(Mdl.BinaryLearners{1}.Lambda)) です。値 e(j) は、正則化強度 Mdl.BinaryLearners{1}.Lambda(j) を使用して学習をさせたモデルのエッジです。
それ以外の場合、e はスカラー値です。
詳細
"分類エッジ" は、分類マージンの加重平均です。
特徴選択を実行する場合などに複数の分類器から選択する方法の 1 つは、エッジが最大になる分類器を選択することです。
"分類マージン" は、各観測値における真のクラスの負の損失と偽のクラスの負の最大損失の差です。各マージンのスケールが同じである場合、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。
"バイナリ損失" は、バイナリ学習器がどの程度の精度で観測値をクラスに分類するかを決定する、クラスと分類スコアの関数です。ソフトウェアでバイナリ損失をどのように集計して各観測値の予測クラスを判定するかは、ECOC モデルの "復号化方式" で指定します。
以下のように仮定します。
mkj は符号化設計行列 M の要素 (k,j)、つまりバイナリ学習器 j のクラス k に対応する符号。M は K 行 B 列の行列であり、K はクラスの数、B はバイナリ学習器の数です。
sj は観測値に対するバイナリ学習器 j のスコア。
g はバイナリ損失関数。
は観測値の予測クラス。
ソフトウェアでは 2 つの復号化方式をサポートしています。
関数 predict、resubPredict、および kfoldPredict は、それぞれの観測値とクラスについて、argmin の目的関数の符号反転値を 2 番目の出力引数 (NegLoss) として返します。
次の表は、サポートされる損失関数をまとめたものです。ここで、yj は特定のバイナリ学習器のクラス ラベル (集合 {–1,1,0} 内)、sj は観測値 j のスコア、g(yj,sj) はバイナリ損失関数です。
| 値 | 説明 | スコア領域 | g(yj,sj) |
|---|---|---|---|
"binodeviance" | 二項分布からの逸脱度 | (–∞,∞) | log[1 + exp(–2yjsj)]/[2log(2)] |
"exponential" | 指数 | (–∞,∞) | exp(–yjsj)/2 |
"hamming" | ハミング | [0,1] または (–∞,∞) | [1 – sign(yjsj)]/2 |
"hinge" | ヒンジ | (–∞,∞) | max(0,1 – yjsj)/2 |
"linear" | 線形 | (–∞,∞) | (1 – yjsj)/2 |
"logit" | ロジスティック | (–∞,∞) | log[1 + exp(–yjsj)]/[2log(2)] |
"quadratic" | 2 次 | [0,1] | [1 – yj(2sj – 1)]2/2 |
yj = 0 のときに損失が 0.5 になるようにバイナリ損失が正規化され、バイナリ学習器の平均が集計に使用されます[1]。
ECOC 分類器の全体的な性能の尺度である全体の分類損失 (オブジェクト関数 loss および predict の名前と値の引数 LossFun により指定) とバイナリ損失を混同しないでください。
ヒント
複数の ECOC 分類器のマージンまたはエッジを比較するには、テンプレート オブジェクトを使用して分類器間で共通するスコア変換関数を学習時に指定します。
参照
[1] Allwein, E., R. Schapire, and Y. Singer. “Reducing multiclass to binary: A unifying approach for margin classifiers.” Journal of Machine Learning Research. Vol. 1, 2000, pp. 113–141.
[2] Escalera, S., O. Pujol, and P. Radeva. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recog. Lett. Vol. 30, Issue 3, 2009, pp. 285–297.
[3] Escalera, S., O. Pujol, and P. Radeva. “On the decoding process in ternary error-correcting output codes.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 32, Issue 7, 2010, pp. 120–134.
拡張機能
edge 関数は、tall 配列を次の使用上の注意事項および制限事項付きでサポートします。
Mdlにカーネルまたは線形のバイナリ学習器が含まれる場合、edgeは talltableデータをサポートしません。
詳細は、tall 配列を参照してください。
並列実行するには、この関数を呼び出すときに名前と値の引数 Options を指定し、statset を使用してオプション構造体の UseParallel フィールドを true に設定します。
Options=statset(UseParallel=true)
並列計算の詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
使用上の注意および制限:
関数
edgeでは以下を使用して学習させたモデルはサポートしていません。代理分岐をもつ決定木学習器
1 クラス分類用の SVM 学習器
Kd 木最近傍探索法、関数ハンドル距離計量、または同順位使用を使用する KNN 学習器
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014b で導入
参考
ClassificationECOC | CompactClassificationECOC | margin | resubEdge | predict | fitcecoc | loss
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)