designecoc
誤り訂正出力符号をバイナリに変換する符号化行列
説明
例
以下の arrhythmia データ セットを考えます。研究内には 16 のクラスがあり、そのうち 13 がデータ内に表示されます。最初のクラスは被験者に不整脈がなかったことを示し、最後のクラスは被験者の不整脈の状態が記録されなかったことを示します。その他のクラスは不整脈の重症度を示す順序レベルであると仮定します。ECOC 分類器をクラスの説明で指定されるカスタム符号化設計を使用して学習させます。
arrhythmia データ セットを読み込みます。
load arrhythmia K = 13; % Number of distinct classes
クラスの性質を説明する符号化行列を作成します。
OrdMat = designecoc(11,"ordinal"); nOM = size(OrdMat); class1VSOrd = [1; -ones(11,1); 0]; class1VSClass16 = [1; zeros(11,1); -1]; OrdVSClass16 = [0; ones(11,1); -1]; Coding = [class1VSOrd class1VSClass16 OrdVSClass16, ... [zeros(1,nOM(2)); OrdMat; zeros(1,nOM(2))]]
Coding = 13×13
1 1 0 0 0 0 0 0 0 0 0 0 0
-1 0 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 0 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 0 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1
-1 0 1 1 1 1 -1 -1 -1 -1 -1 -1 -1
-1 0 1 1 1 1 1 -1 -1 -1 -1 -1 -1
-1 0 1 1 1 1 1 1 -1 -1 -1 -1 -1
-1 0 1 1 1 1 1 1 1 -1 -1 -1 -1
-1 0 1 1 1 1 1 1 1 1 -1 -1 -1
-1 0 1 1 1 1 1 1 1 1 1 -1 -1
-1 0 1 1 1 1 1 1 1 1 1 1 -1
-1 0 1 1 1 1 1 1 1 1 1 1 1
0 -1 -1 0 0 0 0 0 0 0 0 0 0
⋮
カスタム符号化設計 Coding を使用して ECOC 分類器を学習させます。バイナリ学習器が決定木であることを指定します。
Mdl = fitcecoc(X,Y,Coding=Coding,Learner="tree");標本内分類誤差を推定します。
genErr = resubLoss(Mdl)
genErr = 0.1460
sparserandom または denserandom を指定して無作為な符号化行列を要求する場合、既定では designecoc は 10,000 個のランダム行列を生成します。その後、ハミング尺度に基づいてペア間の行の最小距離が最大の行列を選択します。生成する行列の数を増加するように指定して、より優れた結果を得る可能性を高めることができます。または、複数の符号化行列を生成し、最適なパフォーマンスの行列を確認することもできます。
arrhythmia データ セットを読み込みます。16 番目のクラスに分類された観測値 (すなわち、不整脈分類を含まないクラス) を新規データとして予約します。
load arrhythmia
oosIdx = Y == 16;
isIdx = ~oosIdx;
Y = categorical(Y(isIdx));
tabulate(Y) Value Count Percent
1 245 56.98%
2 44 10.23%
3 15 3.49%
4 15 3.49%
5 13 3.02%
6 25 5.81%
7 3 0.70%
8 2 0.47%
9 9 2.09%
10 50 11.63%
14 4 0.93%
15 5 1.16%
K = numel(unique(Y));
最初の 2 つが密で、次の 2 つがスパースとなる 4 つの無作為な符号化設計行列を生成します。20,000 個の変量から最適なものを指定します。
rng(1); % For reproducibility Coding = cell(4,1); % Preallocate for coding matrices CodingTypes = ["denserandom","denserandom","sparserandom","sparserandom"]; for j = 1:4 Coding{j} = designecoc(K,CodingTypes{j},NumTrials=2e4); end
Coding は 4 行 1 列の cell 配列で、各セルは符号化設計行列です。行列には K 行ありますが、列数 (バイナリ学習器) は変化する場合があります。
15 分割交差検証を使用して、ECOC 分類器を学習させ交差検証を実行します。各 ECOC 分類器が分類木を使用して学習し、ランダム符号化行列が Coding に保存されるように指定します。
Mdl = cell(4,1); % Preallocate for ECOC classifiers for j = 1:4 Mdl{j} = fitcecoc(X(isIdx,:),Y,Learners="tree", ... Coding=Coding{j},KFold=15); end
Warning: One or more of the unique class values in the stratification variable is not present in one or more folds. For classification problems, either remove this class from the data or use N instead of the stratification variable to obtain nonstratified partitions. For regression problems with continuous response, use N.
Warning: One or more of the unique class values in the stratification variable is not present in one or more folds. For classification problems, either remove this class from the data or use N instead of the stratification variable to obtain nonstratified partitions. For regression problems with continuous response, use N.
Warning: One or more of the unique class values in the stratification variable is not present in one or more folds. For classification problems, either remove this class from the data or use N instead of the stratification variable to obtain nonstratified partitions. For regression problems with continuous response, use N.
Warning: One or more of the unique class values in the stratification variable is not present in one or more folds. For classification problems, either remove this class from the data or use N instead of the stratification variable to obtain nonstratified partitions. For regression problems with continuous response, use N.
Mdl は ClassificationPartitionedECOC モデルの 4 行 1 列の cell 配列です。いくつかのクラスはデータ内の相対的頻度が低いため、標本内分割の一部は交差検証中にこれらのクラスによる学習を行なわない可能性があります。
各分類器の 15 分割分類誤差を推定します。
genErr = nan(4,1); for j = 1:4 genErr(j) = kfoldLoss(Mdl{j}); end genErr
genErr = 4×1
0.2256
0.2116
0.2116
0.2209
汎化誤差が依然として高くなっていても、標本外分類誤差のみに基づく場合は、最適なパフォーマンスのモデルは符号化設計 Coding{3} を使用したモデルになります。
バイナリ学習器の一部のパラメーターを調整して汎化誤差の改善を試みることができます。たとえば、分割基準として既定のジニ多様性指数ではなく、twoing 規則または逸脱度の使用を指定できます。データ内に欠損値があるため、代理分岐の使用を指定する場合もあります。
入力引数
クラス数。正の整数として指定します。
K は符号化行列 M の行数を指定します。
データ型: single | double
符号化設計名。次の表の値を指定します。次の表は、符号化方式をまとめています。
| 値 | バイナリ学習器の数 | 説明 |
|---|---|---|
"allpairs" および "onevsone" | K(K – 1)/2 | 各バイナリ学習器では、1 つのクラスが陽性であり、もう 1 つのクラスは陰性です。残りは無視されます。この計画はすべてのクラス ペアの割り当ての組み合わせを使用します。 |
"binarycomplete" | この計画はクラスをすべて 2 つの組み合わせに分割します。いずれのクラスも無視されません。各バイナリ学習器では、すべてのクラス割り当てが –1 および 1 になり、割り当てに陽性クラスと陰性クラスが少なくとも 1 つずつ含まれます。 | |
"denserandom" | ランダム。ただし、約 10 log2K | 各バイナリ学習器には、陽性または陰性クラス (少なくとも各 1 つ) が無作為に割り当てられます。詳細については、ランダム符号化設計行列を参照してください。 |
"onevsall" | K | 各バイナリ学習器では、1 つのクラスは陽性で残りは陰性です。この計画は陽性クラス割り当てのすべての組み合わせを使用します。 |
"ordinal" | K – 1 | 1 番目のバイナリ学習器では、1 番目のクラスが陰性であり、残りは陽性です。2 番目のバイナリ学習器では、最初の 2 つのクラスが陰性であり、残りは陽性です。他についても同様です。 |
"sparserandom" | ランダム。ただし、約 15 log2K | 各バイナリ学習器では、各クラスに確率 0.25 で陽性または陰性が無作為に割り当てられ、確率が 0.5 の場合にクラスが無視されます。詳細については、ランダム符号化設計行列を参照してください。 |
"ternarycomplete" | この計画はクラスをすべて 3 つの組み合わせに分割します。すべてのクラス割り当てが 0、–1、および 1 になり、各割り当てに陽性クラスと陰性クラスが少なくとも 1 つずつ含まれます。 |
生成するランダム符号化行列の数。正の整数として指定します。
次の処理が実行されます。
numTrials行列を生成し、最大のペア単位の行距離をもつ行列を 1 つ選択します。"denserandom"および"sparserandom"を除くnameのすべての値でnumTrialsを無視します。
例: 1000
データ型: single | double
出力引数
ECOC スキームをバイナリにする符号化行列。数値行列として返されます。M は K 行 L 列で、L はバイナリ学習器の数です。各行はクラスに対応し、各列はバイナリ学習器に対応します。
M の要素は -1、0 または 1 であり、値は二分法によるクラス割り当てに対応します。この表は M(i,j) の意味を説明します。つまり、学習器 j がクラス i の観測値に割り当てるクラスです。
| 値 | 二分法によるクラス割り当て |
|---|---|
–1 | 学習器 j は、クラス i の観測値を陰性クラスに割り当てます。 |
0 | 学習の前に、学習器 j はクラス i の観測値をデータ セットから削除します。 |
1 | 学習器 j は、クラス i の観測値を陽性クラスに割り当てます。 |
計画 denserandom のバイナリ学習器、binarycomplete および onevsall は 0 をどのクラスの観察にも割り当てしません。
ヒント
バイナリ学習器の数はクラス数とともに増加します。多数のクラスがある問題では、符号化設計
binarycompleteおよびternarycompleteは効率的ではありません。ただし、K ≤ 4 の場合、
sparserandomではなくternarycomplete符号化設計を使用します。K ≤ 5 の場合、
denserandomではなくbinarycomplete符号化設計を使用します。
コマンド ウィンドウに
Mdl.CodingMatrixを入力して学習させた ECOC 分類器の符号化設計行列を表示できます。アプリケーションへの詳細な知識を用い、計算上の制約を考慮して符号化行列を作成しなければなりません。十分な計算能力と時間がある場合、いくつかの符号化行列を試し、最大のパフォーマンスが得られるものを選択してください (たとえば、
confusionchartを使用して各モデルの混同行列を確認します)。観測値が多いデータ セットの場合、Leave-one-out 交差検証 (
Leaveout) では不十分です。代わりに、k 分割交差検証 (KFold) を使用してください。
アルゴリズム
カスタム符号化行列は特定の形式でなければなりません。ソフトウェアによるカスタム符号化行列の検証では、以下について確認されます。
すべての要素が –1、0、または 1 である。
すべての列に –1 および 1 が少なくとも 1 つずつ含まれている。
すべての列ベクトル u と v のそれぞれについて、u ≠ v かつ u ≠ –v である。
すべての行ベクトルが一意である。
行列は任意の 2 つのクラスを分離できます。つまり、任意の行から他の任意の行に次のルールに従って移動できる。
1 から –1 または –1 から 1 に垂直方向に移動。
非ゼロ要素から別の非ゼロ要素に水平方向に移動。
垂直方向の移動に行列の列を一度だけ使用。
上記のルールを使用して、行 i から行 j に移動できない場合、クラス i および j は計画により分離できません。たとえば、次の符号化設計ではクラス 1 および 2 をクラス 3 および 4 から分離できません。
2 行目の 2 列目に 0 があるので、2 行目の –1 を 2 列目に水平に移動できません。したがって、この符号化設計は拒否されます。
K 個のクラスに対して、ランダム符号化設計行列が以下のように生成されます。
次のいずれかの行列が生成されます。
密なランダム — K 行 Ld 列の符号化設計行列の各要素に同じ確率で 1 または –1 が割り当てられます。ここで です。
スパース ランダム — K 行 Ls 列の符号化設計行列の各要素に 0.25 の確率で 1、0.25 の確率で -1、0.5 の確率で 0 が割り当てられます。ここで です。
1 および –1 が少なくとも 1 つずつ列に含まれていない場合、その列は削除されます。
異なる列 u および v について u = v または u = –v である場合、v が符号化設計行列から削除されます。
既定では 10,000 個の行列が無作為に生成されます。次によって与えられるハミング尺度 ([2]) に基づき、行の最小ペアワイズ距離が最大になる行列が保持されます。
ここで、mkjl は符号化設計行列 j の要素です。
参照
[1] Fürnkranz, Johannes. “Round Robin Classification.” J. Mach. Learn. Res., Vol. 2, 2002, pp. 721–747.
[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.
バージョン履歴
R2014b で導入
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)