ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

edge

マルチクラス誤り訂正出力符号モデルの分類エッジ

構文

e = edge(Mdl,tbl,ResponseVarName)
e = edge(Mdl,tbl,Y)
e = edge(Mdl,X,Y)
e = edge(___,Name,Value)

説明

e = edge(Mdl,tbl,ResponseVarName) は、テーブル tbl に含まれている予測子データとクラス ラベル tbl.ResponseVarName を使用して、誤り訂正出力符号 (ECOC) マルチクラス分類器 Mdl分類エッジ (e) を返します。tblResponseVarName の各行は観測です。

e = edge(Mdl,tbl,Y) は、テーブル tbl に含まれている予測子データとベクトル Y に含まれているクラス ラベルを使用して、分類器 Mdl の分類エッジを返します。tblY の各行は観測です。

e = edge(Mdl,X,Y) は、行列 X に含まれている予測子データとベクトル Y に含まれているクラス ラベルを使用して、分類器 Mdl の分類エッジ (e) を返します。XY の各行は観測です。

e = edge(___,Name,Value) は、前の構文のいずれかを使用し、1 つ以上の Name,Value ペア引数で指定されたオプションを追加して、分類エッジを計算します。

たとえば、復号化スキーム、バイナリ学習器損失関数または詳細レベルを指定します。

入力引数

すべて展開する

完全またはコンパクトなマルチクラス ECOC モデル。ClassificationECOC または CompactClassificationECOC モデル オブジェクトを指定します。

完全またはコンパクトな ECOC モデルを作成する方法については、ClassificationECOC または CompactClassificationECOC を参照してください。

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

table に含まれている標本データを使用して Mdl を学習させた場合、このメソッドの入力データもテーブルでなければなりません。

メモ

Mdl.BinaryLearners に線形分類モデルまたはカーネル分類モデル (つまり ClassificationLinear モデル オブジェクトまたは ClassificationKernel モデル オブジェクト) が格納されている場合、table 内の標本データを指定することはできません。代わりに、行列 (X) とクラス ラベル (Y) を渡します。

データ型: テーブル

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

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

応答変数は、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 の長さと X の行数は等しくなければなりません。

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

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で閉じなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を任意の順序で指定できます。

バイナリ学習器の損失関数。'BinaryLoss' と組み込みの損失関数名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。

  • 次の表には、組み込み関数の名前と説明が含まれています。ここで、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 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます。

  • カスタム バイナリ損失関数の場合は関数ハンドルを指定します。たとえば、customFunction の場合は 'BinaryLoss',@customFunction を指定します。

    customFunction の形式は次のとおりです。

    bLoss = customFunction(M,s)
    ここで、

    • MMdl.CodingMatrix に格納された K 行 L 列のコーディング行列です。

    • s は、1 行 L 列の分類スコアの行ベクトルです。

    • bLoss は分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。

    • K は、クラスの数です。

    • L は、バイナリ学習器の数です。

    カスタムなバイナリ損失関数を渡す例については、カスタム バイナリ損失関数を使用する ECOC モデルの検定標本ラベルの予測を参照してください。

既定の設定では、すべてのバイナリ学習器が

  • SVM である場合、または SVM 学習器の線形分類モデルまたはカーネル分類モデルのいずれかである場合、BinaryLoss'hinge'

  • AdaboostM1 または GentleBoost によって学習させたアンサンブルの場合、BinaryLoss'exponential'

  • LogitBoost によって学習させたアンサンブルの場合、BinaryLoss'binodeviance'

  • ロジスティック回帰学習器の線形分類モデルまたはカーネル分類モデルである場合、またはクラス事後確率を予測するように指定した場合 (つまり fitcecoc'FitPosterior',1 を設定した場合)、BinaryLoss'quadratic'

それ以外の場合、'BinaryLoss' の既定値は 'hamming' です。既定値を確認するには、コマンド ラインでドット表記を使用して学習済みモデルの BinaryLoss プロパティを表示します。

例: 'BinaryLoss','binodeviance'

データ型: char | string | 関数ハンドル

バイナリ損失を集計する復号化方式。'Decoding''lossweighted' または 'lossbased' から構成されるコンマ区切りのペアとして指定します。詳細は、バイナリ損失 を参照してください。

例: 'Decoding','lossbased'

予測子データにおける観測値の次元。'ObservationsIn''columns' または 'rows' から構成されるコンマ区切りのペアとして指定します。Mdl.BinaryLearners には線形分類モデルが格納されていなければなりません。

メモ

観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、実行時間が大幅に短縮される可能性があります。

推定オプション。statset により返される 'Options' と構造体配列から構成されるコンマ区切りのペアとして指定します。

並列計算を起動するには、以下を行います。

  • Parallel Computing Toolbox™ ライセンスが必要です。

  • 'Options',statset('UseParallel',1) を指定します。

詳細レベル。'Verbose'0 または 1 から構成されるコンマ区切りのペアとして指定します。Verbose は、コマンド ウィンドウに表示される診断メッセージの量を制御します。

Verbose0 の場合、診断メッセージは表示されません。それ以外の場合は、診断メッセージが表示されます。

例: 'Verbose',1

データ型: single | double

観測値の重み。'Weights' と数値ベクトル、または tbl に含まれる変数の名前から構成されるコンマ区切りのペアとして指定します。重みを指定すると、edge は重み付きの分類エッジを計算します。

Weights の長さは X または tbl の観測値数と同じでなければなりません。合計が各クラスの事前確率の値と等しくなるように Weights が正規化されます。

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

Mdl.BinaryLearners に線形分類モデルが格納されている場合、ベクトルを指定しなければなりません。

データ型: single | double | char | string

出力引数

すべて展開する

分類エッジ、数値スカラーまたはベクトルとして返されます。e分類マージンの (加重) 平均を表します。

Mdl.BinaryLearners に線形分類モデルが格納されている場合、e は 1 行 L 列のベクトルです。L は、線形分類モデルの正則化強度の数 (つまり、numel(Mdl.BinaryLearners{1}.Lambda)) です。e(j) は、正則化強度 Mdl.BinaryLearners{1}.Lambda(j) を使用して学習を行ったモデルのエッジです。

それ以外の場合、e はスカラーです。

すべて展開する

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris
X = meas;
Y = categorical(species);
classOrder = unique(Y); % Class order
rng(1); % For reproducibility

SVM バイナリ分類器を使用して ECOC モデルを学習させます。30% のホールドアウト標本を指定します。予測子を標準化してクラスの順序を定義することをお勧めします。SVM テンプレートを使用して、予測子の標準化を指定します。

t = templateSVM('Standardize',1);
CVMdl = fitcecoc(X,Y,'Holdout',0.30,'Learners',t,'ClassNames',classOrder);
CMdl = CVMdl.Trained{1};           % Extract trained, compact classifier
testInds = test(CVMdl.Partition);  % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);

CVMdlClassificationPartitionedECOC モデルです。これには Trained プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた CompactClassificationECOC モデルが格納されています。

検定標本エッジを推定します。

e = edge(CMdl,XTest,YTest)
e = 0.4573

推定された検定標本マージン平均は約 0.45 です。

フィッシャーのアヤメのデータセットを読み込みます。

load fisheriris
X = meas;
Y = categorical(species);
classOrder = unique(Y); % Class order
rng(1); % For reproducibility

観測値は順番に測定されており、テクノロジーの向上によって最新の 75 件の観測値の品質が高くなっているとします。この向上を反映させる方法の 1 つとして、品質が高い観測値に他の観測値よりも大きな重みを設定します。

品質が高い観測値に他の観測値の 2 倍の重みを設定するように、重みベクトルを定義します。

n = size(X,1);
weights = [ones(n-75,1);2*ones(75,1)];

SVM バイナリ分類器を使用して ECOC モデルを学習させ、30% のホールドアウト標本および加重スキームを指定します。予測子を標準化してクラスの順序を定義することをお勧めします。SVM テンプレートを使用して、予測子の標準化を指定します。

t = templateSVM('Standardize',1);
CVMdl = fitcecoc(X,Y,'Holdout',0.30,'Learners',t,...
    'Weights',weights,'ClassNames',classOrder);
CMdl = CVMdl.Trained{1};           % Extract trained, compact classifier
testInds = test(CVMdl.Partition);  % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);
wTest = weights(testInds,:);

CVMdl は学習させた ClassificationPartitionedECOC モデルです。この分類器には Trained プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた CompactClassificationECOC 分類器が格納されています。

加重スキームを使用して検定標本の加重エッジを推定します。

e = edge(CMdl,XTest,YTest,'Weights',wTest)
e = 0.4798

検定標本の加重平均マージンは約 0.48 です。

分類器エッジは、分類器マージンの平均を測定します。特徴選択を行う方法の 1 つとして、複数のモデルから検定標本エッジを比較します。この条件のみに基づくと、エッジが最高となる分類器が最善の分類器となります。

フィッシャーのアヤメのデータセットを読み込みます。

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',1);
CVMdl = fitcecoc(fullX,Y,'CVPartition',Partition,'Learners',t,...
    'ClassNames',classOrder);
PCVMdl = fitcecoc(partX,Y,'CVPartition',Partition,'Learners',t,...
    'ClassNames',classOrder);
CMdl = CVMdl.Trained{1};
PCMdl = PCVMdl.Trained{1};

CVMdl および PCVMdlClassificationPartitionedECOC モデルです。これらには Trained プロパティが含まれており、これは学習セットにより学習させた CompactClassificationECOC モデルを格納する1 行 1 列の cell 配列です。

分類器ごとに検定標本エッジを推定します。

fullEdge = edge(CMdl,XTest,YTest)
fullEdge = 0.4573
partEdge = edge(PCMdl,XTest(:,3:4),YTest)
partEdge = 0.4839

PCMdl はより複雑なモデル CMdl に似たエッジを取得します。

詳細

すべて展開する

ヒント

fitcecoc を使用して分類器を学習させる場合、複数の分類器のマージンまたはエッジを比較するために、テンプレート オブジェクトを使用して分類器の間に共通するスコア変換関数を指定します。

アルゴリズム

予測子データの標準化を指定して Mdl を学習させる場合、学習器 jMdl.BinaryLearner{j}.MuMdl.BinaryLearner{j}.Sigma に格納された対応する平均と標準偏差を使用して X の列が標準化されます。

参照

[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. “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.

[3] Escalera, S., O. Pujol, and P. Radeva. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recogn. Vol. 30, Issue 3, 2009, pp. 285–297.

拡張機能