ClassificationPartitionedECOC
サポート ベクター マシン (SVM) またはその他の分類器向けの交差検証済みマルチクラス ECOC モデル
説明
ClassificationPartitionedECOC は交差検証分割で学習を行った ECOC (誤り訂正出力符号) モデルのセットです。"kfold" 関数 kfoldPredict、kfoldLoss、kfoldMargin、kfoldEdge、kfoldfun を 1 つ以上使用して、交差検証分類の品質を評価します。
すべての "kfold" メソッドでは、学習分割 (分割内) 観測値で学習をさせたモデルを使用して、検証分割 (分割外) 観測値に対する応答を予測します。たとえば、データを 5 つに分割して交差検証を行うとします。この場合、ほぼ等しいサイズの 5 つのグループに各観測値が無作為に割り当てられます。"学習分割" にはグループのうち 4 つ (データの約 4/5) が含まれ、"検証分割" には他のグループ (データの約 1/5) が含まれます。この場合、交差検証は次のように処理されます。
(
CVMdl.Trained{1}に格納されている) 1 番目のモデルの学習には最後の 4 つのグループの観測値が使用され、1 番目のグループの観測値は検証用に確保されます。(
CVMdl.Trained{2}に格納されている) 2 番目のモデルの学習には、1 番目のグループと最後の 3 つのグループの観測値が使用されます。2 番目のグループの観測値は、検証用に予約されます。3 番目、4 番目および 5 番目のモデルに対しても同様に続けられます。
kfoldPredict を使用して検証する場合、i 番目のモデルを使用してグループ i の観測値について予測が計算されます。つまり、それぞれの観測値に対する応答は、その観測値を使用せずに学習させたモデルによって推定されます。
作成
ClassificationPartitionedECOC モデルは 2 つの方法で作成できます。
プロパティ
交差検証のプロパティ
交差検証済みモデルの名前。文字ベクトルを指定します。
たとえば、'ECOC' は交差検証された ECOC モデルを指定します。
データ型: char
交差検証された分割の数。正の整数で指定します。
データ型: double
交差検証パラメーター値。オブジェクトを指定します。パラメーター値は、ECOC 分類器の交差検証に使用した名前と値のペアの引数の値に対応します。推定されたパラメーターは ModelParameters に含まれません。
ドット表記を使用して ModelParameters のプロパティにアクセスできます。
学習データに含まれている観測値の数。正の数値スカラーを指定します。
データ型: double
データを交差検証分割に分割する方法を含むデータ分割。cvpartition モデルとして指定します。
交差検証分割で学習させたコンパクトな分類器。CompactClassificationECOC モデルの cell 配列を指定します。Trained には k 個のセルがあります。k は分割数です。
データ型: cell
モデルの交差検証に使用した観測値の重み。数値ベクトルを指定します。W には NumObservations 個の要素があります。
学習に使用する重みは正規化され sum(W,'omitnan') は 1 になります。
データ型: single | double
分類器の交差検証に使用する、標準化されていない予測子データ。数値行列または table を指定します。
X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
データ型: single | double | table
モデルの交差検証に使用される、観測されたクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y には NumObservations 個の要素があり、データ型はモデルの交差検証を実行するために fitcecoc に渡した入力引数 Y と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
Y の各行は、X の対応する行の観測された分類を表します。
データ型: categorical | char | logical | single | double | cell
ECOC のプロパティ
バイナリ学習器の損失関数。損失関数名を表す文字ベクトルを指定します。
次の表に BinaryLoss の既定値を示します。既定値は、バイナリ学習器が返すスコアの範囲によって異なります。
| 仮定 | 既定値 |
|---|---|
すべてのバイナリ学習器が次のいずれかである。
| 'quadratic' |
| すべてのバイナリ学習器が SVM である。 | 'hinge' |
すべてのバイナリ学習器が、AdaboostM1 または GentleBoost によって学習をさせたアンサンブルである。 | 'exponential' |
すべてのバイナリ学習器が、LogitBoost によって学習をさせたアンサンブルである。 | 'binodeviance' |
fitcecoc で 'FitPosterior',true を設定して、クラスの事後確率を予測するように指定している。 | 'quadratic' |
| バイナリ学習器が異種混合で、さまざまな損失関数を使用している。 | 'hamming' |
既定値を確認するには、コマンド ラインでドット表記を使用して学習済みモデルの BinaryLoss プロパティを表示します。
精度が向上する可能性を高めるには、kfoldPredict または kfoldLoss の名前と値の引数 BinaryLoss を使用して、予測または損失を計算するときに既定以外のバイナリ損失関数を指定します。詳細については、バイナリ損失を参照してください。
データ型: char
バイナリ学習器クラス ラベル。数値行列または [] として指定します。
すべての分割で符号化行列が同じである場合、
BinaryYはNumObservations行 L 列の行列になります。L はバイナリ学習器の個数 (size(CodingMatrix,2)) です。BinaryYの要素は–1、0、1であり、値は二分法によるクラス割り当てに対応します。次の表に、学習器jが観測値kをBinaryY(k,j)の値に対応する二分クラスに割り当てる方法を示します。値 二分法によるクラス割り当て –1学習器 jは、観測値kを陰性クラスに割り当てます。0学習の前に、学習器 jは観測値kをデータ セットから削除します。1学習器 jは、観測値kを陽性クラスに割り当てます。符号化行列が分割全体で異なる場合、
BinaryYは空 ([]) です。
データ型: double
バイナリ学習器のクラス割り当てを指定するコード。数値行列または [] として指定します。
すべての分割で符号化行列が同じである場合、
CodingMatrixは K 行 L 列の行列になります。K はクラスの個数、L はバイナリ学習器の個数です。CodingMatrixの要素は–1、0、1であり、値は二分法によるクラス割り当てに対応します。次の表に、学習器jがクラスiの観測値をCodingMatrix(i,j)の値に対応する二分クラスに割り当てる方法を示します。値 二分法によるクラス割り当て –1学習器 jは、クラスiの観測値を陰性クラスに割り当てます。0学習の前に、学習器 jはクラスiの観測値をデータ セットから削除します。1学習器 jは、クラスiの観測値を陽性クラスに割り当てます。符号化行列が分割全体で異なる場合、
CodingMatrixは空 ([]) です。Trainedプロパティを使用することにより、各分割の符号化行列を取得できます。たとえば、CVMdl.Trained{1}.CodingMatrixは、交差検証された ECOC モデルCVMdlの最初の分割の符号化行列です。
データ型: double | single | int8 | int16 | int32 | int64
他の分類のプロパティ
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。
データ型: single | double
この プロパティ は読み取り専用です。
学習で使用する一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames のデータ型はクラス ラベル Y と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。ClassNames はクラスの順序も決定します。
データ型: categorical | char | logical | single | double | cell
この プロパティ は読み取り専用です。
誤分類のコスト。正方数値行列として指定します。Cost には K 個の行および列が含まれ、K はクラスの数です。
Cost(i,j) は、真のクラスが i である点をクラス j に分類するコストです。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。
データ型: double
この プロパティ は読み取り専用です。
予測子データ X に現れる順序で並んでいる予測子名。文字ベクトルの cell 配列を指定します。PredictorNames の長さは、X の列数と同じです。
データ型: cell
この プロパティ は読み取り専用です。
クラスの事前確率。数値ベクトルを指定します。Prior の要素数は ClassNames のクラス数と同じであり、要素の順序は ClassNames 内のクラスの順序に対応します。
fitcecoc は、異なるタイプのバイナリ学習器に異なる誤分類のコストを組み込みます。
データ型: double
応答変数名。文字ベクトルを指定します。
データ型: char
この プロパティ は読み取り専用です。
予測されたスコアに適用するスコア変換関数。'none' を指定します。ECOC モデルではスコア変換はサポートされません。
オブジェクト関数
gather | Gather properties of Statistics and Machine Learning Toolbox object from GPU |
kfoldEdge | 交差検証済み ECOC モデルの分類エッジ |
kfoldLoss | 交差検証済み ECOC モデルの分類損失 |
kfoldMargin | 交差検証済み ECOC モデルの分類マージン |
kfoldPredict | 交差検証済み ECOC モデルの観測値の分類 |
kfoldfun | 交差検証済み ECOC モデルを使用する交差検証関数 |
例
SVM バイナリ学習器による ECOC 分類器を交差検証し、一般化分類誤差を推定します。
フィッシャーのアヤメのデータ セットを読み込みます。予測子データ X と応答データ Y を指定します。
load fisheriris X = meas; Y = species; rng(1); % For reproducibility
SVM テンプレートを作成し、予測子を標準化します。
t = templateSVM('Standardize',true)t =
Fit template for SVM.
Standardize: 1
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 分類器がかなり良好に一般化を行うことがわかります。
代理分岐をもつ決定木の GentleBoost アンサンブルを使用して、1 対他の ECOC 分類器に学習をさせます。学習を高速化するため、数値予測子をビン化し、並列計算を使用します。ビン化は、fitcecoc が木学習器を使用する場合のみ有効です。学習後、10 分割交差検証を使用して分類誤差を推定します。並列計算には Parallel Computing Toolbox™ が必要であることに注意してください。
標本データの読み込み
arrhythmia データ セットを読み込み検証します。
load arrhythmia
[n,p] = size(X)n = 452
p = 279
isLabels = unique(Y); nLabels = numel(isLabels)
nLabels = 13
tabulate(categorical(Y))
Value Count Percent
1 245 54.20%
2 44 9.73%
3 15 3.32%
4 15 3.32%
5 13 2.88%
6 25 5.53%
7 3 0.66%
8 2 0.44%
9 9 1.99%
10 50 11.06%
14 4 0.88%
15 5 1.11%
16 22 4.87%
このデータ セットには 279 個の予測子が含まれ、452 という標本サイズは相対的に小さいものです。16 個の異なるラベルのうち、13 個のみが応答 (Y) で表現されています。各ラベルは不整脈のさまざまな段階を表しており、観測値の 54.20% がクラス 1 に含まれています。
1 対他 ECOC 分類器の学習
アンサンブル テンプレートを作成します。少なくとも 3 つの引数を指定しなければなりません。手法、学習器の数、および学習器のタイプです。この例では、手法として 'GentleBoost'、学習器の個数として 100 を指定します。欠損観測値があるので、代理分岐を使用する決定木テンプレートを指定します。
tTree = templateTree('surrogate','on'); tEnsemble = templateEnsemble('GentleBoost',100,tTree);
tEnsemble はテンプレート オブジェクトです。ほとんどのプロパティは空ですが、学習中に既定値が入力されます。
決定木のアンサンブルをバイナリ学習器として使用して、1 対他の ECOC 分類器を学習させます。学習を高速化するため、ビン化と並列計算を使用します。
ビン化 (
'NumBins',50) — 学習データ セットが大きい場合、名前と値のペアの引数'NumBins'を使用することにより学習を高速化できます (精度が低下する可能性があります)。この引数は、fitcecocが木学習器を使用する場合のみ有効です。'NumBins'の値を指定した場合、指定した個数の同確率のビンにすべての数値予測子がビン化され、元のデータではなくビンのインデックスに対して木が成長します。はじめに'NumBins',50を試してから、精度と学習速度に応じて'NumBins'の値を変更できます。並列計算 (
'Options',statset('UseParallel',true)) — Parallel Computing Toolbox のライセンスがある場合、プール内のワーカーに各バイナリ学習器を送る並列計算を使用して、計算を高速化できます。ワーカーの個数はシステム構成によって異なります。デュアルコア以上のシステムの場合、バイナリ学習器について決定木を使用すると、fitcecocは Intel® スレッディング ビルディング ブロック (TBB) を使用して学習を並列化します。したがって、単一のコンピューターで'UseParallel'オプションを指定しても役に立ちません。このオプションは、クラスターに対して使用します。
さらに、事前確率として 1/K を指定します。K = 13 は異なるクラスの個数です。
options = statset('UseParallel',true); Mdl = fitcecoc(X,Y,'Coding','onevsall','Learners',tEnsemble,... 'Prior','uniform','NumBins',50,'Options',options);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
Mdl は ClassificationECOC モデルです。
交差検証
10 分割交差検証を使用して ECOC 分類器の交差検証を実行します。
CVMdl = crossval(Mdl,'Options',options);Warning: One or more folds do not contain points from all the groups.
CVMdl は ClassificationPartitionedECOC モデルです。少なくとも 1 つの分割の学習中に、いくつかのクラスが表示されないことが警告でわかります。したがって、これらの分割は欠損クラスに対するラベルを予測できません。cell のインデックス指定とドット表記を使用して、分割の結果を調査できます。たとえば、1 番目の分割の結果にアクセスするには CVMdl.Trained{1} と入力します。
交差検証済みの ECOC 分類器を使用して、検証分割のラベルを予測します。混同行列は、confusionchart を使用して計算できます。内側の位置のプロパティを変更してチャートを移動およびサイズ変更することにより、行要約の内部にパーセントが表示されるようにします。
oofLabel = kfoldPredict(CVMdl,'Options',options); ConfMat = confusionchart(Y,oofLabel,'RowSummary','total-normalized'); ConfMat.InnerPosition = [0.10 0.12 0.85 0.85];

ビン化されたデータの再現
学習済みモデルの BinEdges プロパティと関数discretizeを使用して、ビン化された予測子データを再現します。
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
数値予測子の場合、1 からビンの数までの範囲にあるビンのインデックスが Xbinned に格納されます。カテゴリカル予測子の場合、Xbinned の値は 0 になります。X に NaN が含まれている場合、対応する Xbinned の値は NaN になります。
拡張機能
次のオブジェクト関数は GPU 配列を完全にサポートしています。
kfoldfunオブジェクト関数は GPU 配列のサポートに制限があります。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
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)