このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
ClassificationECOC
サポート ベクター マシン (SVM) などの分類器用のマルチクラス モデル
説明
ClassificationECOC
は、分類器が複数のバイナリ学習器 (サポート ベクター マシン (SVM) など) から構成されている場合の、マルチクラス学習用の誤り訂正出力符号 (ECOC) 分類器です。学習済みの ClassificationECOC
分類器には、学習データ、パラメーター値、事前確率および符号化行列が格納されます。これらの分類器を使用して、新しいデータのラベルや事後確率を予測する (predict
を参照) などのタスクを実行できます。
作成
ClassificationECOC
オブジェクトの作成には fitcecoc
を使用します。
交差検証オプションを指定せずに線形またはカーネル バイナリ学習器を指定した場合、fitcecoc
は代わりに CompactClassificationECOC
オブジェクトを返します。
プロパティ
ClassificationECOC
モデル オブジェクトを作成した後で、ドット表記を使用してプロパティにアクセスできます。たとえば、SVM 学習器を使用したマルチクラス モデルの学習を参照してください。
ECOC のプロパティ
BinaryLearners
— 学習済みバイナリ学習器
モデル オブジェクトの cell ベクトル
学習済みバイナリ学習器。モデル オブジェクトの cell ベクトルを指定します。バイナリ学習器の個数は、Y
内のクラス数と符号化設計によって異なります。
BinaryLearner{j}
の学習は、CodingMatrix
(:,j)
によって指定されるバイナリ問題に従って行われます。たとえば、SVM 学習器を使用したマルチクラス学習では、BinaryLearners
の各要素は CompactClassificationSVM
分類器です。
データ型: cell
BinaryLoss
— バイナリ学習器損失関数
'binodeviance'
| 'exponential'
| 'hamming'
| 'hinge'
| 'linear'
| 'logit'
| 'quadratic'
バイナリ学習器の損失関数。損失関数名を表す文字ベクトルを指定します。
BinaryLoss
の既定値は、バイナリ学習器が返すスコアの範囲によって異なります。次の表に、既定のスコア変換を使用する場合 (モデルの ScoreTransform
プロパティが 'none'
の場合) の BinaryLoss
の既定値をいくつか示します。
仮定 | 既定値 |
---|---|
すべてのバイナリ学習器が次のいずれかである。
| 'quadratic' |
すべてのバイナリ学習器が SVM であるか、SVM 学習器の線形またはカーネル分類モデルである。 | 'hinge' |
すべてのバイナリ学習器が、AdaboostM1 または GentleBoost によって学習をさせたアンサンブルである。 | 'exponential' |
すべてのバイナリ学習器が、LogitBoost によって学習をさせたアンサンブルである。 | 'binodeviance' |
fitcecoc で 'FitPosterior',true を設定して、クラスの事後確率を予測するように指定している。 | 'quadratic' |
バイナリ学習器が異種混合で、さまざまな損失関数を使用している。 | 'hamming' |
既定値を確認するには、コマンド ラインでドット表記を使用して学習済みモデルの BinaryLoss
プロパティを表示します。
精度が向上する可能性を高めるには、predict
または loss
の名前と値の引数 BinaryLoss
を使用して、予測または損失を計算するときに既定以外のバイナリ損失関数を指定します。詳細については、バイナリ損失を参照してください。
データ型: char
BinaryY
— バイナリ学習器クラス ラベル
数値行列
バイナリ学習器クラス ラベル。数値行列として指定します。BinaryY
は NumObservations
行 L 列の行列で、L はバイナリ学習器 (length(Mdl.BinaryLearners)
) 数です。
BinaryY
の要素は –1
、0
または 1
で、値は二分法によるクラス割り当てに対応します。次の表に、学習器 j
が観測値 k
を BinaryY(k,j)
の値に対応する二分クラスに割り当てる方法を示します。
値 | 二分法によるクラス割り当て |
---|---|
–1 | 学習器 j は、観測値 k を陰性クラスに割り当てます。 |
0 | 学習の前に、学習器 j は観測値 k をデータセットから削除します。 |
1 | 学習器 j は、観測値 k を陽性クラスに割り当てます。 |
データ型: double
BinEdges
— 数値予測子のビンのエッジ
数値ベクトルの cell 配列 | []
この プロパティ は読み取り専用です。
数値予測子のビンのエッジ。p 個の数値ベクトルが含まれている cell 配列を指定します。p は予測子の個数です。各ベクトルには、数値予測子のビンのエッジを含めます。カテゴリカル予測子はビン化されないので、カテゴリカル予測子の場合は、この cell 配列の要素を空にします。
数値予測子がビン化されるのは、木学習器を使用してモデルに学習をさせるときに名前と値の引数 'NumBins'
として正の整数スカラーを指定した場合だけです。'NumBins'
の値が空 (既定) である場合、BinEdges
プロパティは空になります。
学習済みモデル mdl
の BinEdges
プロパティを使用することにより、ビン化された予測子データ Xbinned
を再現できます。
X = mdl.X; % Predictor data
Xbinned = zeros(size(X));
edges = mdl.BinEdges;
% Find indices of binned predictors.
idxNumeric = find(~cellfun(@isempty,edges));
if iscolumn(idxNumeric)
idxNumeric = idxNumeric';
end
for j = idxNumeric
x = X(:,j);
% Convert x to array if x is a table.
if istable(x)
x = table2array(x);
end
% Group x into bins by using the discretize
function.
xbinned = discretize(x,[-inf; edges{j}; inf]);
Xbinned(:,j) = xbinned;
end
Xbinned
に格納されます。カテゴリカル予測子の場合、Xbinned
の値は 0 になります。X
に NaN
が含まれている場合、対応する Xbinned
の値は NaN
になります。
データ型: cell
CodingMatrix
— クラス割り当て符号
数値行列
バイナリ学習器のクラス割り当て符号。数値行列を指定します。CodingMatrix
は K 行 L 列の行列で、K はクラスの個数、L はバイナリ学習器の個数です。
CodingMatrix
の要素は –1
、0
、1
であり、値は二分法によるクラス割り当てに対応します。次の表に、学習器 j
がクラス i
の観測値を CodingMatrix(i,j)
の値に対応する二分クラスに割り当てる方法を示します。
値 | 二分法によるクラス割り当て |
---|---|
–1 | 学習器 j は、クラス i の観測値を陰性クラスに割り当てます。 |
0 | 学習の前に、学習器 j はクラス i の観測値をデータセットから削除します。 |
1 | 学習器 j は、クラス i の観測値を陽性クラスに割り当てます。 |
データ型: double
| single
| int8
| int16
| int32
| int64
CodingName
— 符号化設計名
文字ベクトル
符号化設計名。文字ベクトルを指定します。詳細は、符号化設計を参照してください。
データ型: char
LearnerWeights
— バイナリ学習器の重み
数値行ベクトル
バイナリ学習器の重み。数値行ベクトルを指定します。LearnerWeights
の長さは、バイナリ学習器の個数 (length(Mdl.BinaryLearners)
) と同じです。
LearnerWeights(j)
は、分類器に学習をさせるためにバイナリ学習器 j
が使用する観測値の重みの合計です。
LearnerWeights
を使用し、カルバック・ライブラー ダイバージェンスの最小化により事後確率を当てはめます。事後確率の推定に二次計画法を使用する場合、LearnerWeights
は無視されます。
データ型: double
| single
他の分類のプロパティ
CategoricalPredictors
— カテゴリカル予測子のインデックス
正の整数のベクトル | []
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
データ型: single
| double
ClassNames
— 一意のクラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
学習で使用する一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames
のデータ型はクラス ラベル Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。ClassNames
はクラスの順序も決定します。
データ型: categorical
| char
| logical
| single
| double
| cell
Cost
— 誤分類のコスト
正方数値行列
この プロパティ は読み取り専用です。
誤分類のコスト。正方数値行列として指定します。Cost
には K 個の行および列が含まれ、K はクラスの数です。
Cost(i,j)
は、真のクラスが i
である点をクラス j
に分類するコストです。Cost
の行と列の順序は、ClassNames
のクラスの順序に対応します。
データ型: double
ExpandedPredictorNames
— 展開された予測子名
文字ベクトルの cell 配列
展開された予測子名。文字ベクトルの cell 配列を指定します。
モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames
には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNames
は PredictorNames
と同じです。
データ型: cell
ModelParameters
— パラメーター値
オブジェクト
ECOC 分類器の学習に使用するパラメーター値 (名前と値のペアの引数の値など)。オブジェクトを指定します。推定パラメーターは ModelParameters
に格納されません。
ModelParameters
のプロパティにはドット表記でアクセスします。たとえば、バイナリ学習器のパラメーターが含まれているテンプレートをリストするには、Mdl.ModelParameters.BinaryLearner
を使用します。
NumObservations
— 観測値の数
正の数値スカラー
学習データに含まれている観測値の数。正の数値スカラーを指定します。
データ型: double
PredictorNames
— 予測子名
文字ベクトルの cell 配列
予測子データ X
に現れる順序で並んでいる予測子名。文字ベクトルの cell 配列を指定します。PredictorNames
の長さは、X
の列数と同じです。
データ型: cell
Prior
— 事前クラス確率
数値ベクトル
この プロパティ は読み取り専用です。
クラスの事前確率。数値ベクトルを指定します。Prior
の要素数は ClassNames
のクラス数と同じであり、要素の順序は ClassNames
内のクラスの順序に対応します。
fitcecoc
は、異なるタイプのバイナリ学習器に異なる誤分類のコストを組み込みます。
データ型: double
ResponseName
— 応答変数名
文字ベクトル
応答変数名。文字ベクトルを指定します。
データ型: char
RowsUsed
— 当てはめに使用した行
[]
(既定値) | logical ベクトル
ClassificationECOC
モデルの当てはめに使用した元の学習データの行。logical ベクトルを指定します。すべての行を使用した場合、このプロパティは空になります。
データ型: logical
ScoreTransform
— 予測されたスコアに適用するスコア変換関数
'doublelogit'
| 'invlogit'
| 'ismax'
| 'logit'
| 'none'
| 関数ハンドル | ...
予測されたスコアに適用するスコア変換関数。関数名または関数ハンドルを指定します。
スコア変換関数を function
などに変更するには、ドット表記を使用します。
組み込み関数の場合、
function
を表の値に置き換えて次のコードを入力します。Mdl.ScoreTransform = 'function';
値 説明 "doublelogit"
1/(1 + e–2x) "invlogit"
log(x / (1 – x)) "ismax"
最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定する "logit"
1/(1 + e–x) "none"
または"identity"
x (変換なし) "sign"
x < 0 のとき –1
x = 0 のとき 0
x > 0 のとき 1"symmetric"
2x – 1 "symmetricismax"
最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する "symmetriclogit"
2/(1 + e–x) – 1 MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。
Mdl.ScoreTransform = @function;
function
は、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。
データ型: char
| function_handle
W
— 観測値の重み
数値ベクトル
ECOC 分類器の学習に使用する観測値の重み。数値ベクトルを指定します。W
の要素数は NumObservations
です。
学習に使用する重みは正規化され sum(W,'omitnan')
は 1
になります。
データ型: single
| double
X
— 標準化されていない予測子データ
数値行列 | テーブル
ECOC 分類器の学習に使用する、標準化されていない予測子データ。数値行列または table を指定します。
X
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
データ型: single
| double
| table
Y
— 観測されたクラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
ECOC 分類器の学習に使用する、観測されたクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y
の要素数は NumObservations
で、データ型は fitcecoc
の入力引数 Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
Y
の各行は、X
の対応する行の観測された分類を表します。
データ型: categorical
| char
| logical
| single
| double
| cell
ハイパーパラメーター最適化のプロパティ
HyperparameterOptimizationResults
— ハイパーパラメーターの交差検証最適化
BayesianOptimization
オブジェクト | テーブル
この プロパティ は読み取り専用です。
ハイパーパラメーターの交差検証最適化。ハイパーパラメーターおよび関連する値が含まれているテーブルまたは BayesianOptimization
オブジェクトを指定します。モデルを作成するときに名前と値のペアの引数 'OptimizeHyperparameters'
が空以外であった場合、このプロパティは空以外になります。HyperparameterOptimizationResults
の値は、モデル作成時の構造体 HyperparameterOptimizationOptions
の Optimizer
フィールドの設定によって変化します。
Optimizer フィールドの値 | HyperparameterOptimizationResults の値 |
---|---|
'bayesopt' (既定の設定) | BayesianOptimization クラスのオブジェクト |
'gridsearch' または 'randomsearch' | 使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル |
オブジェクト関数
compact | マルチクラス誤り訂正出力符号 (ECOC) モデルのサイズを縮小 |
compareHoldout | 新しいデータを使用して 2 つの分類モデルの精度を比較 |
crossval | マルチクラス誤り訂正出力符号 (ECOC) モデルの交差検証 |
discardSupportVectors | ECOC モデルの線形 SVM バイナリ学習器のサポート ベクターを破棄 |
edge | マルチクラス誤り訂正出力符号 (ECOC) モデルの分類エッジ |
gather | GPU からの Statistics and Machine Learning Toolbox オブジェクトのプロパティの収集 |
incrementalLearner | マルチクラス誤り訂正出力符号 (ECOC) モデルをインクリメンタル学習器に変換 |
loss | マルチクラス誤り訂正出力符号 (ECOC) モデルの分類損失 |
margin | マルチクラス誤り訂正出力符号 (ECOC) モデルの分類マージン |
partialDependence | 部分従属の計算 |
plotPartialDependence | 部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成 |
predict | マルチクラス誤り訂正出力符号 (ECOC) モデルを使用して観測値を分類 |
resubEdge | マルチクラス誤り訂正出力符号 (ECOC) モデルの再代入分類エッジ |
lime | Local Interpretable Model-agnostic Explanations (LIME) |
resubLoss | マルチクラス誤り訂正出力符号 (ECOC) モデルの再代入分類損失 |
resubMargin | マルチクラス誤り訂正出力符号 (ECOC) モデルの再代入分類マージン |
resubPredict | マルチクラス誤り訂正出力符号 (ECOC) モデル内の観測値を分類 |
shapley | シャープレイ値 |
testckfold | 交差検証の反復により 2 つの分類モデルの精度を比較 |
例
SVM 学習器を使用したマルチクラス モデルの学習
サポート ベクター マシン (SVM) バイナリ学習器を使用して、マルチクラス誤り訂正出力符号 (ECOC) モデルに学習をさせます。
フィッシャーのアヤメのデータセットを読み込みます。予測子データ X
と応答データ Y
を指定します。
load fisheriris
X = meas;
Y = species;
既定のオプションを使用して、マルチクラス ECOC モデルに学習をさせます。
Mdl = fitcecoc(X,Y)
Mdl = ClassificationECOC ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3x1 cell} CodingName: 'onevsone' Properties, Methods
Mdl
は ClassificationECOC
モデルです。既定では、fitcecoc
は SVM バイナリ学習器および 1 対 1 符号化設計を使用します。ドット表記を使用して Mdl
プロパティにアクセスできます。
クラス名および符号化設計行列を表示します。
Mdl.ClassNames
ans = 3x1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
CodingMat = Mdl.CodingMatrix
CodingMat = 3×3
1 1 0
-1 0 1
0 -1 -1
3 つのクラスに対して 1 対 1 符号化設計を使用すると、3 つのバイナリ学習器が生成されます。CodingMat
の列は学習器に、行はクラスに対応します。クラスの順序は Mdl.ClassNames
内の順序と同じです。たとえば、CodingMat(:,1)
は [1; –1; 0]
であり、'setosa'
または 'versicolor'
として分類されるすべての観測値を使用して最初の SVM バイナリ学習器が学習を行うことを示します。'setosa'
は 1
に対応するので陽性クラスであり、'versicolor'
は –1
に対応するので陰性クラスです。
各バイナリ学習器にセルのインデックス付けおよびドット表記を使用してアクセスすることができます。
Mdl.BinaryLearners{1} % The first binary learner
ans = CompactClassificationSVM ResponseName: 'Y' CategoricalPredictors: [] ClassNames: [-1 1] ScoreTransform: 'none' Beta: [4x1 double] Bias: 1.4492 KernelParameters: [1x1 struct] Properties, Methods
再代入分類誤差を計算します。
error = resubLoss(Mdl)
error = 0.0067
学習データに対する分類誤差は小さくなっていますが、分類器が過適合モデルになる可能性があります。代わりに、crossval
を使用して分類器を交差検証し、交差検証分類誤差を計算することができます。
ECOC 分類器のバイナリ学習器のプロパティの調査
SVM バイナリ学習器を使用して ECOC 分類器に学習をさせます。次に、ドット表記を使用して、バイナリ学習器のプロパティ (推定パラメーターなど) にアクセスします。
フィッシャーのアヤメのデータセットを読み込みます。予測子として花弁の寸法を、応答として種の名前を指定します。
load fisheriris
X = meas(:,3:4);
Y = species;
SVM バイナリ学習器および既定の符号化設計 (1 対 1) を使用して ECOC 分類器に学習をさせます。予測子を標準化し、サポート ベクターを保存します。
t = templateSVM('Standardize',true,'SaveSupportVectors',true); predictorNames = {'petalLength','petalWidth'}; responseName = 'irisSpecies'; classNames = {'setosa','versicolor','virginica'}; % Specify class order Mdl = fitcecoc(X,Y,'Learners',t,'ResponseName',responseName,... 'PredictorNames',predictorNames,'ClassNames',classNames)
Mdl = ClassificationECOC PredictorNames: {'petalLength' 'petalWidth'} ResponseName: 'irisSpecies' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' BinaryLearners: {3x1 cell} CodingName: 'onevsone' Properties, Methods
t
は SVM 分類のオプションを含むテンプレート オブジェクトです。関数 fitcecoc
は、空 ([]
) のプロパティについて既定値を使用します。Mdl
は ClassificationECOC
分類器です。ドット表記を使用して Mdl
のプロパティにアクセスできます。
クラス名および符号化設計行列を表示します。
Mdl.ClassNames
ans = 3x1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
Mdl.CodingMatrix
ans = 3×3
1 1 0
-1 0 1
0 -1 -1
列は SVM バイナリ学習器に対応し、行は個々のクラスに対応します。行の順序は、Mdl
の ClassNames
プロパティにおける順序と同じです。各列について:
1
は、対応するクラスの観測値を正のグループのメンバーとして使用してfitcecoc
が SVM に学習をさせることを示します。–1
は、対応するクラスの観測値を負のグループのメンバーとして使用してfitcecoc
が SVM に学習をさせることを示します。0
は、対応するクラスの観測値を SVM が使用しないことを示します。
たとえば、1 番目の SVM で fitcecoc
はすべての観測値を 'setosa'
または 'versicolor'
に割り当てていますが、'virginica'
には割り当てていません。
セルの添字とドット表記を使用して、SVM のプロパティにアクセスします。各 SVM の標準化されたサポート ベクターを保存します。サポート ベクターを非標準化します。
L = size(Mdl.CodingMatrix,2); % Number of SVMs sv = cell(L,1); % Preallocate for support vector indices for j = 1:L SVM = Mdl.BinaryLearners{j}; sv{j} = SVM.SupportVectors; sv{j} = sv{j}.*SVM.Sigma + SVM.Mu; end
sv
は、SVM の非標準化されたサポート ベクターを含む行列の cell 配列です。
データをプロットし、サポート ベクターを特定します。
figure gscatter(X(:,1),X(:,2),Y); hold on markers = {'ko','ro','bo'}; % Should be of length L for j = 1:L svs = sv{j}; plot(svs(:,1),svs(:,2),markers{j},... 'MarkerSize',10 + (j - 1)*3); end title('Fisher''s Iris -- ECOC Support Vectors') xlabel(predictorNames{1}) ylabel(predictorNames{2}) legend([classNames,{'Support vectors - SVM 1',... 'Support vectors - SVM 2','Support vectors - SVM 3'}],... 'Location','Best') hold off
次の関数に Mdl
を渡すことができます。
predict
。新しい観測値を分類します。resubLoss
。学習データに対する分類誤差を推定します。crossval
。10 分割交差検証を実行します。
ECOC 分類器の交差検証
SVM バイナリ学習器による ECOC 分類器を交差検証し、一般化分類誤差を推定します。
フィッシャーのアヤメのデータセットを読み込みます。予測子データ X
と応答データ Y
を指定します。
load fisheriris X = meas; Y = species; rng(1); % For reproducibility
SVM テンプレートを作成し、予測子を標準化します。
t = templateSVM('Standardize',true)
t = Fit template for classification SVM. Alpha: [0x1 double] BoxConstraint: [] CacheSize: [] CachingMethod: '' ClipAlphas: [] DeltaGradientTolerance: [] Epsilon: [] GapTolerance: [] KKTTolerance: [] IterationLimit: [] KernelFunction: '' KernelScale: [] KernelOffset: [] KernelPolynomialOrder: [] NumPrint: [] Nu: [] OutlierFraction: [] RemoveDuplicates: [] ShrinkagePeriod: [] Solver: '' StandardizeData: 1 SaveSupportVectors: [] VerbosityLevel: [] Version: 2 Method: 'SVM' Type: 'classification'
t
は SVM テンプレートです。テンプレート オブジェクトのプロパティは、ほとんとが空です。ECOC 分類器に学習をさせると、該当するプロパティが既定値に設定されます。
ECOC 分類器に学習をさせ、クラスの順序を指定します。
Mdl = fitcecoc(X,Y,'Learners',t,... 'ClassNames',{'setosa','versicolor','virginica'});
Mdl
は ClassificationECOC
分類器です。ドット表記を使用してプロパティにアクセスできます。
10 分割交差検証を使用して Mdl
を交差検証します。
CVMdl = crossval(Mdl);
CVMdl
は ClassificationPartitionedECOC
交差検証 ECOC 分類器です。
一般化分類誤差を推定します。
genError = kfoldLoss(CVMdl)
genError = 0.0400
一般化分類誤差が 4% なので、ECOC 分類器がかなり良好に一般化を行うことがわかります。
詳細
誤り訂正出力符号モデル
"誤り訂正出力符号 (ECOC) モデル" は、3 つ以上のクラスがある分類の問題を一連のバイナリ分類問題に縮小します。
ECOC 分類は、バイナリ学習器が学習するクラスを決定する符号化設計と、バイナリ学習器の結果 (予測) が集計される方法を決定する復号化スキームを必要とします。
以下のように仮定します。
分類問題には 3 つのクラスがある。
符号化設計が 1 対 1 である。3 クラスの場合、この符号化設計は次のようになります。
分類モデルを作成するときに、名前と値の引数
Coding
を使用して別の符号化設計を指定できます。モデルでの予測クラスの判定にバイナリ損失関数 g による損失に重みを付けた復号化方式を使用する。ソフトウェアでは損失に基づく復号化方式もサポートされます。復号化方式とバイナリ損失関数は、
predict
、loss
、margin
、edge
などのオブジェクト関数を呼び出すときに、名前と値の引数Decoding
とBinaryLoss
を使用してそれぞれ指定できます。
ECOC アルゴリズムの手順は次のとおりです。
学習器 1 は、クラス 1 またはクラス 2 の観測値について学習を行い、クラス 1 を陽性クラス、クラス 2 を陰性クラスとして扱います。他の学習器の学習も同様に実行します。
次のように仮定します。M は要素 mkl をもつ符号化設計行列です。sl は学習器 l の陽性クラスの予測された分類スコアです。新しい観測値は、B 個のバイナリ学習器について損失の合計が最小になるクラス () に割り当てられます。
ECOC モデルは他のマルチクラス モデルと比較して分類精度を向上させることができます[1]。
符号化設計
"符号化設計" は、各バイナリ学習器がどのクラスを学習したのかを要素が指示する行列です。つまり、マルチクラス問題がどのように一連のバイナリ問題にされたのかを示します。
符号化設計の各行は各クラスに対応し、各列はバイナリ学習器に対応します。三項符号化設計では、特定の列 (バイナリ学習器) に対して以下が実行されます。
1 が含まれている行の場合、対応するクラスの観測値をすべて陽性クラスにグループ化するようバイナリ学習器に指示します。
–1 が含まれている行の場合、対応するクラスの観測値をすべて陰性クラスにグループ化するようバイナリ学習器に指示します。
0 が含まれている行の場合、対応するクラスの観測値をすべて無視するようバイナリ学習器に指示します。
ハミング尺度に基づく行の最小ペアワイズ距離が大きい符号化設計行列が最適です。行のペアワイズ距離の詳細については、ランダム符号化設計行列および[2]を参照してください。
次の表は一般的な符号化設計について説明しています。
符号化設計 | 説明 | 学習器の数 | 行の最小ペアワイズ距離 |
---|---|---|---|
OVA (1 対他) | 各バイナリ学習器では、1 つのクラスは正で残りは負です。この計画は陽性クラス割り当てのすべての組み合わせを使用します。 | K | 2 |
OVO (1 対 1) | 各バイナリ学習器では、1 つのクラスが正で、1 つのクラスが負です。残りは無視されます。この計画はすべてのクラス ペアの割り当ての組み合わせを使用します。 | K(K – 1)/2 | 1 |
完全二項 | この計画はクラスをすべて 2 つの組み合わせに分割します。いずれのクラスも無視されません。つまり、すべてのクラス割り当てが | 2K – 1 – 1 | 2K – 2 |
完全三項 | この計画はクラスをすべて 3 つの組み合わせに分割します。つまり、すべてのクラス割り当てが | (3K – 2K + 1 + 1)/2 | 3K – 2 |
順序 | 1 番目のバイナリ学習器では、1 番目のクラスが負であり、残りは正です。2 番目のバイナリ学習器では、最初の 2 つのクラスが負であり、残りは正です。他についても同様です。 | K – 1 | 1 |
密なランダム | 各バイナリ学習器には、陽性または陰性クラス (少なくとも各 1 つ) が無作為に割り当てられます。詳細については、ランダム符号化設計行列を参照してください。 | ランダム。ただし、約 10 log2K | 変数 |
スパース ランダム | 各バイナリ学習器では、各クラスに確率 0.25 で正または負が無作為に割り当てられ、確率が 0.5 の場合にクラスが無視されます。詳細については、ランダム符号化設計行列を参照してください。 | ランダム。ただし、約 15 log2K | 変数 |
このプロットは符号化設計のバイナリ学習器の数を増加する K と比較します。
アルゴリズム
ランダム符号化設計行列
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 の要素です。
サポート ベクターの保存
既定では、効率を向上させるため、fitcecoc
はすべての線形 SVM バイナリ学習器の Alpha
、SupportVectorLabels
および SupportVectors
プロパティを空にします。fitcecoc
は、Alpha
ではなく Beta
をモデル表示で出力します。
Alpha
、SupportVectorLabels
および SupportVectors
を保存するには、サポート ベクターを fitcecoc
に保存するよう指定する線形 SVM テンプレートを渡します。たとえば、次のように入力します。
t = templateSVM('SaveSupportVectors',true) Mdl = fitcecoc(X,Y,'Learners',t);
サポート ベクターおよび関連する値は、生成された ClassificationECOC
モデルを discardSupportVectors
に渡すことにより削除できます。
代替機能
これらの代替アルゴリズムを使用してマルチクラス モデルに学習させることができます。
アンサンブル分類 —
fitcensemble
およびClassificationEnsemble
を参照分類木 —
fitctree
およびClassificationTree
を参照判別分析分類器 —
fitcdiscr
およびClassificationDiscriminant
を参照k 最近傍分類器 —
fitcknn
およびClassificationKNN
を参照単純ベイズ分類器 —
fitcnb
およびClassificationNaiveBayes
を参照
参照
[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.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
fitcecoc
を使用して ECOC モデルに学習をさせる場合、以下の制限が適用されます。すべてのバイナリ学習器が SVM 分類器または線形分類モデルでなければなりません。名前と値の引数
Learners
について以下を指定できます。'svm'
または'linear'
SVM テンプレート オブジェクトまたはこのオブジェクトの cell 配列 (
templateSVM
を参照)線形分類モデル テンプレート オブジェクトまたはこのオブジェクトの cell 配列 (
templateLinear
を参照)
predict
とupdate
に対してコーダー コンフィギュアラーを使用してコードを生成する場合、以下の追加制限がバイナリ学習器に適用されます。SVM テンプレート オブジェクトの cell 配列を使用する場合、SVM 学習器の
Standardize
の値は一貫していなければなりません。たとえば、ある SVM 学習器に対して'Standardize',true
を指定した場合、すべての SVM 学習器に対して同じ値を指定しなければなりません。SVM テンプレート オブジェクトの cell 配列を使用し、ある SVM 学習器では線形カーネル (
'KernelFunction','linear'
) を、別の SVM 学習器では異なるタイプのカーネル関数を使用する場合、線形カーネルの学習器に対して
を指定しなければなりません。'SaveSupportVectors'
,true
詳細については、
ClassificationECOCCoderConfigurer
を参照してください。モデルに再学習させる際に変更できない名前と値の引数の詳細については、ヒントを参照してください。SVM 分類器と線形分類モデルのコード生成の制限は、選択したバイナリ学習器に応じて ECOC 分類器にも適用されます。詳細については、
CompactClassificationSVM
クラスのコード生成とコード生成クラスのClassificationLinear
を参照してください。
詳細は、コード生成の紹介を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
次のオブジェクト関数は GPU 配列を完全にサポートしています。
次のオブジェクト関数は GPU 配列のサポートに制限があります。
オブジェクト関数は次のいずれかに該当する場合に GPU で実行されます。
モデルが GPU 配列を使用して当てはめられている。
オブジェクト関数に渡す予測子データが GPU 配列である。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014b で導入
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)