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 つの方法で作成できます。
プロパティ
交差検証のプロパティ
CrossValidatedModel
— 交差検証されたモデル名
文字ベクトル
交差検証済みモデルの名前。文字ベクトルを指定します。
たとえば、'ECOC'
は交差検証された ECOC モデルを指定します。
データ型: char
KFold
— 交差検証された分割の数
正の整数
交差検証された分割の数。正の整数で指定します。
データ型: double
ModelParameters
— 交差検証パラメーター値
オブジェクト
交差検証パラメーター値。オブジェクトを指定します。パラメーター値は、ECOC 分類器の交差検証に使用した名前と値のペアの引数の値に対応します。推定されたパラメーターは ModelParameters
に含まれません。
ドット表記を使用して ModelParameters
のプロパティにアクセスできます。
NumObservations
— 観測値の数
正の数値スカラー
学習データに含まれている観測値の数。正の数値スカラーを指定します。
データ型: double
Partition
— データ分割
cvpartition
モデル
データを交差検証分割に分割する方法を含むデータ分割。cvpartition
モデルとして指定します。
Trained
— 交差検証分割で学習させたコンパクトな分類器
CompactClassificationECOC
モデルの cell 配列
交差検証分割で学習させたコンパクトな分類器。CompactClassificationECOC
モデルの cell 配列を指定します。Trained
には k 個のセルがあります。k は分割数です。
データ型: cell
W
— 観測値の重み
数値ベクトル
モデルの交差検証に使用した観測値の重み。数値ベクトルを指定します。W
には NumObservations
個の要素があります。
学習に使用する重みは正規化され sum(W,'omitnan')
は 1
になります。
データ型: single
| double
X
— 標準化されていない予測子データ
数値行列 | テーブル
分類器の交差検証に使用する、標準化されていない予測子データ。数値行列または table を指定します。
X
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
データ型: single
| double
| table
Y
— 観測されたクラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
モデルの交差検証に使用される、観測されたクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y
には NumObservations
個の要素があり、データ型はモデルの交差検証を実行するために fitcecoc
に渡した入力引数 Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
Y
の各行は、X
の対応する行の観測された分類を表します。
データ型: categorical
| char
| logical
| single
| double
| cell
ECOC のプロパティ
BinaryLoss
— バイナリ学習器損失関数
'binodeviance'
| 'exponential'
| 'hamming'
| 'hinge'
| 'linear'
| 'logit'
| 'quadratic'
バイナリ学習器の損失関数。損失関数名を表す文字ベクトルを指定します。
次の表に BinaryLoss
の既定値を示します。既定値は、バイナリ学習器が返すスコアの範囲によって異なります。
仮定 | 既定値 |
---|---|
すべてのバイナリ学習器が次のいずれかである。
| 'quadratic' |
すべてのバイナリ学習器が SVM である。 | 'hinge' |
すべてのバイナリ学習器が、AdaboostM1 または GentleBoost によって学習をさせたアンサンブルである。 | 'exponential' |
すべてのバイナリ学習器が、LogitBoost によって学習をさせたアンサンブルである。 | 'binodeviance' |
fitcecoc で 'FitPosterior',true を設定して、クラスの事後確率を予測するように指定している。 | 'quadratic' |
バイナリ学習器が異種混合で、さまざまな損失関数を使用している。 | 'hamming' |
既定値を確認するには、コマンド ラインでドット表記を使用して学習済みモデルの BinaryLoss
プロパティを表示します。
精度が向上する可能性を高めるには、kfoldPredict
または kfoldLoss
の名前と値の引数 BinaryLoss
を使用して、予測または損失を計算するときに既定以外のバイナリ損失関数を指定します。詳細については、バイナリ損失を参照してください。
データ型: char
BinaryY
— バイナリ学習器クラス ラベル
数値行列 | []
バイナリ学習器クラス ラベル。数値行列または []
として指定します。
すべての分割で符号化行列が同じである場合、
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
— クラス割り当てを指定するコード
数値行列 | []
バイナリ学習器のクラス割り当てを指定するコード。数値行列または []
として指定します。
すべての分割で符号化行列が同じである場合、
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
— カテゴリカル予測子のインデックス
正の整数のベクトル | []
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。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
PredictorNames
— 予測子名
文字ベクトルの cell 配列
予測子データ X
に現れる順序で並んでいる予測子名。文字ベクトルの cell 配列を指定します。PredictorNames
の長さは、X
の列数と同じです。
データ型: cell
Prior
— 事前クラス確率
数値ベクトル
この プロパティ は読み取り専用です。
クラスの事前確率。数値ベクトルを指定します。Prior
の要素数は ClassNames
のクラス数と同じであり、要素の順序は ClassNames
内のクラスの順序に対応します。
fitcecoc
は、異なるタイプのバイナリ学習器に異なる誤分類のコストを組み込みます。
データ型: double
ResponseName
— 応答変数名
文字ベクトル
応答変数名。文字ベクトルを指定します。
データ型: char
ScoreTransform
— 予測されたスコアに適用するスコア変換関数
'none'
この プロパティ は読み取り専用です。
予測されたスコアに適用するスコア変換関数。'none'
を指定します。ECOC モデルではスコア変換はサポートされません。
オブジェクト関数
gather | GPU からの Statistics and Machine Learning Toolbox オブジェクトのプロパティの収集 |
kfoldEdge | 交差検証済み ECOC モデルの分類エッジ |
kfoldLoss | 交差検証済み ECOC モデルの分類損失 |
kfoldMargin | 交差検証済み ECOC モデルの分類マージン |
kfoldPredict | 交差検証済み ECOC モデルの観測値の分類 |
kfoldfun | 交差検証済み ECOC モデルを使用する交差検証関数 |
例
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 分類器がかなり良好に一般化を行うことがわかります。
ビン化と並列計算の使用による 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 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
ClassificationPartitionedECOC
モデルのオブジェクト関数は 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)