kfoldPredict
交差検証済みカーネル ECOC モデルの観測値の分類
構文
説明
は、交差検証済みカーネル ECOC モデル (label
= kfoldPredict(CVMdl
)ClassificationPartitionedKernelECOC
) CVMdl
によって予測されたクラス ラベルを返します。kfoldPredict
は、すべての分割について、学習分割観測値に対して学習をさせたモデルを使用して、検証分割観測値のクラス ラベルを予測します。kfoldPredict
は、CVMdl
の作成に使用されたものと同じデータを適用します (fitcecoc
を参照)。
符号を反転した最大の平均バイナリ損失 (つまり、最小の平均バイナリ損失と等しい) の発生するクラスに観測を割り当てることで、観測の分類が予測されます。
は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、予測クラス ラベルを返します。たとえば、事後確率推定法、復号化スキームまたは詳細レベルを指定します。label
= kfoldPredict(CVMdl
,Name,Value
)
例
交差検証済みマルチクラス カーネル ECOC 分類器を使用して観測値を分類し、生成された分類の混同行列を表示します。
フィッシャーのアヤメのデータ セットを読み込みます。X
には花の測定値が、Y
には花の種類の名前が格納されています。
load fisheriris
X = meas;
Y = species;
カーネル バイナリ学習器から構成される ECOC モデルを交差検証します。
rng(1); % For reproducibility CVMdl = fitcecoc(X,Y,'Learners','kernel','CrossVal','on')
CVMdl = ClassificationPartitionedKernelECOC CrossValidatedModel: 'KernelECOC' ResponseName: 'Y' NumObservations: 150 KFold: 10 Partition: [1×1 cvpartition] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' Properties, Methods
CVMdl
は ClassificationPartitionedKernelECOC
モデルです。既定では、10 分割交差検証が実行されます。異なる分割数を指定するには、'Crossval'
ではなく名前と値のペアの引数 'KFold'
を指定します。
分割の学習で fitcecoc
が使用しない観測値を分類します。
label = kfoldPredict(CVMdl);
混同行列を作成して、観測値の真のクラスを予測されたラベルと比較します。
C = confusionchart(Y,label);
CVMdl
モデルは、4 つの 'versicolor'
種のアヤメを 'virginica'
種のアヤメとして誤分類し、1 つの 'virginica'
種のアヤメを 'versicolor'
種のアヤメとして誤分類します。
フィッシャーのアヤメのデータ セットを読み込みます。X
には花の測定値が、Y
には花の種類の名前が格納されています。
load fisheriris
X = meas;
Y = species;
5 分割の交差検証を使用して、カーネル分類モデルから構成される ECOC モデルを交差検証します。
rng(1); % For reproducibility CVMdl = fitcecoc(X,Y,'Learners','kernel','KFold',5)
CVMdl = ClassificationPartitionedKernelECOC CrossValidatedModel: 'KernelECOC' ResponseName: 'Y' NumObservations: 150 KFold: 5 Partition: [1×1 cvpartition] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' Properties, Methods
CVMdl
は ClassificationPartitionedKernelECOC
モデルです。これには、5 行 1 列の CompactClassificationECOC
モデルの cell 配列である Trained
プロパティが含まれています。
既定では、CompactClassificationECOC
モデルを構成するカーネル分類モデルは SVM を使用します。SVM スコアは観測から判定境界までの符号付き距離です。したがって、定義域は です。以下のようなカスタム バイナリ損失関数を作成します。
各学習器の符号化設計行列 (M) と陽性クラスの分類スコア (s) を各観測値のバイナリ損失にマッピングする
線形損失を使用する
中央値を使用して、バイナリ学習器損失を集計します。
バイナリ損失関数用に独立した関数を作成し、MATLAB® パスに保存できます。あるいは、無名バイナリ損失関数を指定できます。この場合、無名バイナリ損失関数に対する関数ハンドル (customBL
) を作成します。
customBL = @(M,s)median(1 - (M.*s),2,'omitnan')/2;
交差検証ラベルを予測し、クラスごとのバイナリ損失の中央値を推定します。10 件の観測の無作為セットについて、クラスごとに中央値の符号を反転したバイナリ損失を出力します。
[label,NegLoss] = kfoldPredict(CVMdl,'BinaryLoss',customBL); idx = randsample(numel(label),10); table(Y(idx),label(idx),NegLoss(idx,1),NegLoss(idx,2),NegLoss(idx,3),... 'VariableNames',[{'True'};{'Predicted'};... unique(CVMdl.ClassNames)])
ans=10×5 table
True Predicted setosa versicolor virginica
______________ ______________ ________ __________ _________
{'setosa' } {'setosa' } 0.20926 -0.84572 -0.86354
{'setosa' } {'setosa' } 0.16144 -0.90572 -0.75572
{'virginica' } {'versicolor'} -0.83532 -0.12157 -0.54311
{'virginica' } {'virginica' } -0.97235 -0.69759 0.16994
{'virginica' } {'virginica' } -0.89441 -0.69937 0.093778
{'virginica' } {'virginica' } -0.86774 -0.47297 -0.15929
{'setosa' } {'setosa' } -0.1026 -0.69671 -0.70069
{'setosa' } {'setosa' } 0.1001 -0.89163 -0.70848
{'virginica' } {'virginica' } -1.0106 -0.52919 0.039829
{'versicolor'} {'versicolor'} -1.0298 0.027354 -0.49757
交差検証済みモデルは、10 個のランダムな観測値のうち 9 個のラベルを正しく予測します。
交差検証済みマルチクラス カーネル ECOC 分類モデルを使用して、事後クラス確率を推定します。カーネル分類モデルは、ロジスティック回帰学習器の場合のみ事後確率を返します。
フィッシャーのアヤメのデータ セットを読み込みます。X
には花の測定値が、Y
には花の種類の名前が格納されています。
load fisheriris
X = meas;
Y = species;
バイナリ カーネル分類モデルのカーネル テンプレートを作成します。ロジスティック回帰学習器を当てはめるよう指定します。
t = templateKernel('Learner','logistic')
t = Fit template for classification Kernel. BetaTolerance: [] BlockSize: [] BoxConstraint: [] Epsilon: [] NumExpansionDimensions: [] GradientTolerance: [] HessianHistorySize: [] IterationLimit: [] KernelScale: [] Lambda: [] Learner: 'logistic' LossFunction: [] Stream: [] VerbosityLevel: [] StandardizeData: [] Version: 1 Method: 'Kernel' Type: 'classification'
t
はカーネル テンプレートです。ほとんどのプロパティは空です。テンプレートを使用して ECOC 分類器に学習をさせると、該当するプロパティが既定値に設定されます。
カーネル テンプレートを使用して、ECOC モデルを交差検証します。
rng('default'); % For reproducibility CVMdl = fitcecoc(X,Y,'Learners',t,'CrossVal','on')
CVMdl = ClassificationPartitionedKernelECOC CrossValidatedModel: 'KernelECOC' ResponseName: 'Y' NumObservations: 150 KFold: 10 Partition: [1×1 cvpartition] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' Properties, Methods
CVMdl
は ClassificationPartitionedECOC
モデルです。既定では、10 分割交差検証が使用されます。
検証分割のクラス事後確率を予測します。
[label,~,~,Posterior] = kfoldPredict(CVMdl);
バイナリ損失の平均が最小となるクラスに観測が割り当てられます。すべてのバイナリ学習器が事後確率を計算しているので、バイナリ損失関数は quadratic
になります。
無作為に選択した 10 個の観測値について事後確率を表示します。
idx = randsample(size(X,1),10); CVMdl.ClassNames
ans = 3×1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
table(Y(idx),label(idx),Posterior(idx,:),... 'VariableNames',{'TrueLabel','PredLabel','Posterior'})
ans=10×3 table
TrueLabel PredLabel Posterior
______________ ______________ ________________________________
{'setosa' } {'setosa' } 0.68216 0.18546 0.13238
{'virginica' } {'virginica' } 0.1581 0.14405 0.69785
{'virginica' } {'virginica' } 0.071807 0.093291 0.8349
{'setosa' } {'setosa' } 0.74918 0.11434 0.13648
{'versicolor'} {'versicolor'} 0.09375 0.67149 0.23476
{'versicolor'} {'versicolor'} 0.036202 0.85544 0.10836
{'versicolor'} {'versicolor'} 0.2252 0.50473 0.27007
{'virginica' } {'virginica' } 0.061562 0.11086 0.82758
{'setosa' } {'setosa' } 0.42448 0.21181 0.36371
{'virginica' } {'virginica' } 0.082705 0.1428 0.7745
Posterior
の列は CVMdl.ClassNames
のクラスの順序に対応します。
入力引数
交差検証済みのカーネル ECOC モデル。ClassificationPartitionedKernelECOC
モデルを指定します。ClassificationPartitionedKernelECOC
モデルは、fitcecoc
を使用し、以下の名前と値のペアの引数を指定して、ECOC モデルに学習をさせることにより作成できます。
'Learners'
– 値を'kernel'
、templateKernel
が返すテンプレート オブジェクト、またはこのようなテンプレート オブジェクトの cell 配列に設定します。引数
'CrossVal'
、'CVPartition'
、'Holdout'
、'KFold'
、'Leaveout'
のいずれか。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: kfoldPredict(CVMdl,'PosteriorMethod','qp')
は、二次計画法を使用して最小二乗問題を解くことによりマルチクラス事後確率を推定するよう指定します。
バイナリ学習器の損失関数。'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 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます[1]。
カスタム バイナリ損失関数の場合は関数ハンドルを指定します。たとえば、
customFunction
の場合は'BinaryLoss',@customFunction
を指定します。customFunction
の形式は次のとおりです。bLoss = customFunction(M,s)
M
はMdl.CodingMatrix
に格納された K 行 B 列の符号化行列です。s
は 1 行 B 列の分類スコアの行ベクトルです。bLoss
は分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。K は、クラスの数です。
B はバイナリ学習器の数です。
既定では、すべてのバイナリ学習器が SVM を使用するカーネル分類モデルである場合、BinaryLoss
は 'hinge'
です。すべてのバイナリ学習器がロジスティック回帰を使用するカーネル分類モデルである場合、BinaryLoss
は 'quadratic'
です。
例: 'BinaryLoss','binodeviance'
データ型: char
| string
| function_handle
バイナリ損失を集計する復号化方式。'Decoding'
と 'lossweighted'
または 'lossbased'
から構成されるコンマ区切りのペアとして指定します。詳細については、バイナリ損失を参照してください。
例: 'Decoding','lossbased'
カルバック・ライブラー ダイバージェンスの最小化により事後確率を当てはめるためのランダムな初期値の個数。'NumKLInitializations'
と非負の整数スカラーから構成されるコンマ区切りのペアとして指定します。
4 番目の出力引数 (Posterior
) を要求せず、'PosteriorMethod','kl'
(既定の設定) を設定する場合、NumKLInitializations
の値は無視されます。
詳細は、カルバック・ライブラー ダイバージェンスを使用する事後推定を参照してください。
例: 'NumKLInitializations',5
データ型: single
| double
推定オプション。statset
によって返される構造体配列として指定します。
並列計算を起動するには、Parallel Computing Toolbox™ ライセンスが必要です。
例: Options=statset(UseParallel=true)
データ型: struct
事後確率推定法。'PosteriorMethod'
と 'kl'
または 'qp'
で構成されるコンマ区切りのペアとして指定します。
PosteriorMethod
が'kl'
の場合、バイナリ学習器によって返される予測された事後確率と期待された事後確率間のカルバック・ライブラー ダイバージェンスを最小化することにより、マルチクラス事後確率が推定されます。詳細については、カルバック・ライブラー ダイバージェンスを使用する事後推定を参照してください。PosteriorMethod
が'qp'
の場合、二次計画法を使用して最小二乗問題を解決することでマルチクラス事後確率が推定されます。このオプションを使用するには Optimization Toolbox™ ライセンスが必要です。詳細については、二次計画法を使用する事後推定を参照してください。4 番目の出力引数 (
Posterior
) を要求しない場合、PosteriorMethod
の値は無視されます。
例: 'PosteriorMethod','qp'
詳細レベル。0
または 1
として指定します。Verbose
は、コマンド ウィンドウに表示される診断メッセージの量を制御します。
Verbose
が 0
の場合、診断メッセージは表示されません。それ以外の場合は、診断メッセージが表示されます。
例: Verbose=1
データ型: single
| double
出力引数
予測クラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として返されます。
label
のデータ型および行数は CVMdl.Y
と同じです。
符号を反転した最大の平均バイナリ損失 (つまり、最小の平均バイナリ損失と等しい) の発生するクラスに観測を割り当てることで、観測の分類が予測されます。
符号を反転した平均バイナリ損失。数値行列として返されます。NegLoss
は n 行 K 列の行列です。n は観測値の個数 (size(CVMdl.Y,1)
)、K は一意なクラスの個数 (size(CVMdl.ClassNames,1)
) です。
NegLoss(i,k)
は、観測値 i を k 番目のクラスに分類する平均バイナリ損失の符号を反転した値です。
Decoding
が'lossbased'
の場合、NegLoss(i,k)
はバイナリ損失の合計をバイナリ学習器の総数で割った値の符号を反転した値になります。Decoding
が'lossweighted'
の場合、NegLoss(i,k)
はバイナリ損失の合計を k 番目のクラスに対するバイナリ学習器の数で割った値の符号を反転した値になります。
詳細については、バイナリ損失を参照してください。
各バイナリ学習器の陽性クラスのスコア。数値行列として返されます。PBScore
は n 行 B 列の行列であり、n は観測値の数 (size(CVMdl.Y,1)
)、B はバイナリ学習器の数 (size(CVMdl.CodingMatrix,2)
) です。
符号化行列が分割ごとに異なる場合 (つまり、符号化方式が sparserandom
または denserandom
である場合)、PBScore
は空 ([]
) になります。
事後クラス確率。数値行列として返します。Posterior
は n 行 K 列の行列です。ここで n は観測 (size(CVMdl.Y,1)
) の数、K は一意のクラス (size(CVMdl.ClassNames,1)
) の数です。
事後確率を返すようにするには、各カーネル分類バイナリ学習器の Learner
プロパティを 'logistic'
に設定しなければなりません。それ以外の場合は、エラーがスローされます。
詳細
"バイナリ損失" は、バイナリ学習器がどの程度の精度で観測値をクラスに分類するかを決定する、クラスと分類スコアの関数です。ソフトウェアでバイナリ損失をどのように集計して各観測値の予測クラスを判定するかは、ECOC モデルの "復号化方式" で指定します。
以下のように仮定します。
mkj は符号化設計行列 M の要素 (k,j)、つまりバイナリ学習器 j のクラス k に対応する符号。M は K 行 B 列の行列であり、K はクラスの数、B はバイナリ学習器の数です。
sj は観測値に対するバイナリ学習器 j のスコア。
g はバイナリ損失関数。
は観測値の予測クラス。
ソフトウェアでは 2 つの復号化方式をサポートしています。
関数 predict
、resubPredict
、および kfoldPredict
は、それぞれの観測値とクラスについて、argmin
の目的関数の符号反転値を 2 番目の出力引数 (NegLoss
) として返します。
次の表は、サポートされる損失関数をまとめたものです。ここで、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 になるようにバイナリ損失が正規化され、バイナリ学習器の平均が集計に使用されます[1]。
ECOC 分類器の全体的な性能の尺度である全体の分類損失 (オブジェクト関数 kfoldLoss
および kfoldPredict
の名前と値の引数 LossFun
により指定) とバイナリ損失を混同しないでください。
アルゴリズム
カルバック・ライブラー ダイバージェンスを最小化するか、二次計画法を使用することにより、クラス事後確率を推定できます。以下の事後推定アルゴリズムに関する説明では、次のように仮定します。
mkj は符号化設計行列 M の要素 (k,j) です。
I はインジケーター関数です。
は、ある観測値のクラス k (k = 1、...、K) に対するクラス事後確率の推定値です。
rj はバイナリ学習器 j の陽性クラス事後確率です。つまり、rj は、学習データが与えられる場合、バイナリ学習器 j が観測値を陽性クラスに分類する確率です。
既定では、カルバック・ライブラー ダイバージェンスは最小化され、クラス事後確率が推定されます。予測された陽性クラス事後確率と観測された陽性クラス事後確率の間のカルバック・ライブラー ダイバージェンスは次のようになります。
ここで、 はバイナリ学習器 j の重みです。
Sj は、バイナリ学習器 j が学習する一連の観測値のインデックスです。
は、観測値 i の重みです。
ダイバージェンスは反復して最小化されます。最初のステップとして、クラス事後確率の初期値 を選択します。
'NumKLIterations'
を指定しない場合、次の確定的な初期値の集合が両方試され、Δ を最小化する集合が選択されます。は、次の連立方程式の解です。
ここで、M01 はすべての mkj = -1 を 0 に置き換えた M、r は L 個のバイナリ学習器によって返された陽性クラス事後確率のベクトルです [Dietterich 他]。
lsqnonneg
を使いシステムを解きます。
'NumKLIterations',c
を指定した場合 (c
は自然数)、集合 は次のように選択され、Δ を最小化する集合が使用されます。前述した確定的な初期値の集合の両方が試されます。
rand
を使用して長さ K のベクトルc
を無作為に生成し、各ベクトルの合計が 1 になるように正規化します。
反復 t では、以下の手順が実行されます。
を計算します。
次の式を使用して、次のクラスの事後確率を推定します。
合計が 1 になるように を正規化します。
収束を確認します。
詳細については、[Hastie 他] および [Zadrozny] を参照してください。
参照
[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] Dietterich, T., and G. Bakiri. “Solving Multiclass Learning Problems Via Error-Correcting Output Codes.” Journal of Artificial Intelligence Research. Vol. 2, 1995, pp. 263–286.
[3] 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.
[4] 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.
[5] Hastie, T., and R. Tibshirani. “Classification by Pairwise Coupling.” Annals of Statistics. Vol. 26, Issue 2, 1998, pp. 451–471.
[6] Wu, T. F., C. J. Lin, and R. Weng. “Probability Estimates for Multi-Class Classification by Pairwise Coupling.” Journal of Machine Learning Research. Vol. 5, 2004, pp. 975–1005.
[7] Zadrozny, B. “Reducing Multiclass to Binary by Coupling Probability Estimates.” NIPS 2001: Proceedings of Advances in Neural Information Processing Systems 14, 2001, pp. 1041–1048.
拡張機能
並列実行するには、この関数を呼び出すときに名前と値の引数 Options
を指定し、statset
を使用してオプション構造体の UseParallel
フィールドを true
に設定します。
Options=statset(UseParallel=true)
並列計算の詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2018b で導入R2023b 以降では、次の分類モデルのオブジェクト関数において、予測子に欠損値がある観測値が再代入 ("resub") と交差検証 ("kfold") による分類エッジ、損失、マージン、および予測の計算でその一部として使用されます。
以前のリリースでは、予測子に欠損値がある観測値は再代入と交差検証の計算で省略されていました。
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)