主要内容

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

kfoldLoss

学习でしない値の分类损失

説明

L= kfoldLoss(CVMDL)は、線形分類モデルから構成される交差検証済みの誤り訂正出力符号 (ECOC) モデルCVMDLによって推定された交差検証分類誤差率を返します。つまり、他のすべての観測値を使用して学習を行うときにホールドアウトする観測値の分類誤差率を、kfoldLossはすべての分割について推定します。kfoldLossは、CVMDLを作成するために使用したものと同じデータを適用します (fitcecocを参照)。

Lには,CVMDLを構成する線形分類モデルの各正則化強度に対する分類損失が格納されます。

L= kfoldLoss(CVMDL,Name,Value)は、1 つ以上のName,Value引数のペアによって指定された追加オプションを使用します。たとえば、復号化方式、損失の計算に使用する分割、詳細レベルなどを指定します。

入力引数

すべて展开する

線形分類モデルから構成される交差検証済みの ECOC モデル。ClassificationPartitionedLinearECOCモデル オブジェクトとして指定します。ClassificationPartitionedLinearECOCモデルを作成するには、fitcecocを使用し、以下を行います。

  1. 交差検証用の名前と値のペアの引数のいずれか 1 つ (CrossValなど) を指定

  2. 名前と値のペアの引数Learnersを、'linear'に、またはtemplateLinearによって返される線形分類モデル テンプレートに設定

推定値取得する,,K foldlossはecocはXおよびY) を適用します。

名前と値の引数

オプションのName,Value引数のコンマ区切りペアを指定します。Nameは引数名で、Valueは対応する値です。Nameは引用符で囲まなければなりません。NAME1,Value1,...,Namen,Valuenのように、複数の名前と値のペアの引数を、任意の順番で指定できます。

バイナリ学習器の損失関数。“二进制”と組み込みの損失関数名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。

  • 次の表には、組み込み関数の名前と説明が含まれています。ここで、yjは特定のバイナリ学習器のクラス ラベル (集合 {-1,1,0} 内)、sjは観測値 j のスコア、g(yj,sj)はバイナリの式です。

    説明 スコア領域 g(yj,sj)
    'binodeviance' 二項分布からの逸脱度 (–∞,∞) log [1 + EXP(–2y)jsj)]/[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)]
    “二次” 2 次 [0,1] [1 – yj(2sj- 1)]2/2

    バイナリ損失は、yj= 0 の場合に損失が 0.5 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます。

  • カスタムバイナリ損失関数、たとえばcustomFunctionは関数ハンドル“二进制”,@customFunctionを指定します。

    customFunctionは以下のような形式になります。

    bLoss = customFunction(M,s)
    ここで、

    • MMdl.CodingMatrixに格納された K 行 L 列のコーディング行列です。

    • sは、1 行 L 列の分類スコアの行ベクトルです。

    • bLossは分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。

    • K は、クラスの数です。

    • L は、バイナリ学習器の数です。

    カスタムなバイナリ損失関数を渡す例については、カスタムバイナリ損失関数の使用による ECOC モデルの検定標本ラベルの予測を参照してください。

既定の設定では、すべてのバイナリ学習器が以下を使用する線形分類モデルである場合、次のようになります。

  • SVM の場合、BinaryLoss'hinge'になります。

  • ロジスティック回帰の場合、BinaryLoss“二次”になります。

例:“二进制”,'binodeviance'

データ::char|string|function_handle

バイナリ损失集计する复号。。'Decoding''lossweighted'または'lossbased'から构成コンマ区のペアとしてし。。はは,バイナリ損失を参照してください。

例:'Decoding','lossbased'

分类スコア予测使用する分割の。。'Folds'と正の整数の数値ベクトルから構成されるコンマ区切りのペアとして指定します。Foldsの要素は1からCVMDL.KFoldの范囲なければなり。。

例:'Folds',[1 4 10]

データ::single|double

損失関数。'LossFun'および关数ハンドルまたは“分类”のいずれかで構成されるコンマ区切りのペアとして指定します。

次が可能です。

  • 組み込み関数“分类”を指定します。この場合、損失関数は分類誤差になります。

  • 関数ハンドル表記を使用して独自の関数を指定します。

    以下では、nは学習データの観測値数 (CVMDL.NumObservations)、Kはクラス数 (numel(CVMdl.ClassNames))です。使用する関数ではLossValue =lossfun(C,S,W,Cost)というシグネチャが必要です。ここで

    • 出力引数lossvalueはスカラーです。

    • 関数名 (lossfun) を選択します。

    • CnK逻辑行列行列,は対応する値属する属するを示していいます。。列顺序顺序CVMDL.ClassNamesのクラスの順序に対応します。

      Cを作成するには、各行について観測値pがクラスqに含まれている場合にC(p,q) = 1を設定します。p行のすべての要素を0に設定します。

    • Sは,をしたの损失値からなるnK列の数値行列です。各列は観測と対応しています。列の順序はCVMDL.ClassNamesのクラスの順序に対応します。SkfoldPredictの出力引数NegLossに類似します。

    • Wは、観測値の重みのn行 1 列の数値ベクトルです。Wを渡すその要素正规化さ,ががが1になります。

    • 成本は、誤分類コストの、KK列の数値行列です。たとえば、成本=一个(k) - 眼(k)は正確な分類を 0 のコストで指定し、誤判定を 1 で指定します。

    “ LossFun”,@LossFunを使用して独自の関数を指定します。

データ::function_handle|char|string

損失の集約レベル。“模式”'average'または'individual'から構成されるコンマ区切りのペアとして指定します。

説明
'average' 分割全体で平均した損失を返す
'individual' 各分割について損失を返す

例:“模式”,'individual'

推定オプション。statsetにより返される'Options'と構造体配列から構成されるコンマ区切りのペアとして指定します。

並列計算を起動するには、以下を行います。

  • Parallel Computing Toolbox™ ライセンスが必要です。

  • 'Options',statset('UseParallel',true)を指定します。

詳細レベル。'Verbose'0または1から構成されるコンマ区切りのペアとして指定します。Verboseは、コマンド ウィンドウに表示される診断メッセージの量を制御します。

Verbose0の场合,診断メッセージは表示されません。それ以外の場合は、診断メッセージが表示されます。

例:'Verbose',1

データ::single|double

出力引数

すべて展开する

交差検証分類損失。数値,または行列返されます。Lの解釈はLossFunによって異なります。

交差検証済みモデルの正則化強度の数 (cvmdl.Trained {1} .binarylearners {1} .lambda) をR、分割数 (CVMDL.KFoldに格納) をFとします。

  • Mode'average'の场合,Lは 1 行R列のベクトルになります。L(j)は、正則化強度jを使用検证済みのすべてのに対する分类分类损失です。

  • それ以外の場合、LFR列のになります。L(i,j)は、正則化強度jを使用する交差検証済みモデルの分割iに対する分類損失です。

すべて展开する

NLP のデータセットを読み込みます。

loadnlpdata

Xは予測子データのスパース行列、Yはクラス ラベルの categorical ベクトルです。

线形分类からされているいるいるモデルモデル交差検证し。。。

RNG(1);%可再现性CVMDL= fitcecoc(X,Y,'Learner','linear','CrossVal','on');

CVMDLClassificationPartitionedLinearECOCモデルです。既定では、10 分割交差検証が実行されます。

分割外分類誤差率の平均を推定します。

ce = kfoldLoss(CVMdl)
ce = 0.0958

または、名前と値のペアの引数“模式”,'individual'kfoldLossで指定することにより、分割ごとの分類誤差率を取得できます。

NLP のデータセットを読み込みます。予測子データを転置します。

loadnlpdataX = X';

簡単にするため、'simulink''dsp''comm'のいずれでもないYの観測値すべてに対して 'others' というラベルを使用します。

Y(~(ismember(Y,{'simulink','dsp','comm'}))) ='others';

SpaRSA を使用して目的関数を最適化するように指定する線形分類モデル テンプレートを作成します。

t = templatelinear('Solver','sparsa');

5 分割の交差検証を使用して、線形分類モデルから構成されている ECOC モデルを交差検証します。SpaRSA を使用して目的関数を最適化します。予測子の観測値が列に対応することを指定します。

RNG(1);%可再现性CVMDL= fitcecoc(X,Y,“学习者”,t,'KFold',5,“观察”,'columns'); CMdl1 = CVMdl.Trained{1}
CMdl1 = CompactClassificationECOC ResponseName: 'Y' ClassNames: [comm dsp simulink others] ScoreTransform: 'none' BinaryLearners: {6x1 cell} CodingMatrix: [4x6 double] Properties, Methods

CVMDLClassificationPartitionedLinearECOCモデルですこのモデル含まれているTrainedプロパティは、各分割の学習セットを使用して学習を行ったCompactClassificationECOCモデルが格納されている 5 行 1 列の cell 配列です。

各観測値の最小損失を取る関数を作成し、すべての観測値の最小損失を平均化します。この関数ではクラス識別行列 (C)、観測値の重み (W) および分類コスト (成本) を使用しないので、~を使用してこれらの位置をkfoldLossに無視させます。

lossfun = @(~,S,~,~)mean(min(-S,[],2));

観測値ごとの最小損失を求める関数を使用して、平均の交差検証分類損失を推定します。また、各分割の損失を取得します。

ce = kfoldLoss(CVMdl,'LossFun',lossfun)
ce = 0.0243
ceFold = kfoldLoss(CVMdl,'LossFun',lossfun,“模式”,'individual')
ceFold =5×10.0244 0.0255 0.0248 0.0240 0.0226

lassoペナルティたモデルモデルモデルモデルモデルモデル线形モデルモデルモデルたたたたたたたペナルティペナルティペナルティペナルティペナルティ强度をを决定决定ためためためためため,,,,,,,,,,

NLP のデータセットを読み込みます。

loadnlpdata

Xは予測子データのスパース行列、Yはクラス ラベルの categorical ベクトルです。

簡単にするため、'simulink''dsp''comm'のいずれでもないYの観測値すべてに対して 'others' というラベルを使用します。

Y(~(ismember(Y,{'simulink','dsp','comm'}))) ='others';

1 0 - 7 1 0 - 2 の範囲で対数間隔で配置された 11 個の正則化強度を作成します。

Lambda = logspace(-7,-2,11);

ロジスティック回帰学習器を使用するように指定する線形分類モデル テンプレートを作成し、Lambdaの強度をもつ LASSO ペナルティを使用し、SpaRSA を使用して学習させ、目的関数の勾配の許容誤差を1e-8に下げます。

t = templatelinear('Learner','logistic','Solver','sparsa',...'Regularization','lasso','Lambda',Lambda,“梯度耐受”,1e-8);

モデルを交差検証します。実行速度を向上させるため、予測子データを転置し、観測値が列単位であることを指定します。

X = X'; rng(10);%可再现性CVMDL= fitcecoc(X,Y,“学习者”,t,“观察”,'columns','KFold',5);

CVMDLClassificationPartitionedLinearECOCモデルです。

CVMDLおよび格納されている各モデルを分析します。

numECOCModels = numel(CVMdl.Trained)
numECOCModels = 5
ECOCMdl1 = CVMdl.Trained{1}
ECOCMdl1 = CompactClassificationECOC ResponseName: 'Y' ClassNames: [comm dsp simulink others] ScoreTransform: 'none' BinaryLearners: {6×1 cell} CodingMatrix: [4×6 double] Properties, Methods
numclmodels = numel(ecocmdl1.binarylearners)
numCLModels = 6
clmdl1= ECOCMdl1.BinaryLearners{1}
clmdl1= ClassificationLinear ResponseName: 'Y' ClassNames: [-1 1] ScoreTransform: 'logit' Beta: [34023×11 double] Bias: [-0.3169 -0.3169 -0.3168 -0.3168 -0.3168 -0.3167 -0.1725 -0.0805 -0.1762 -0.3450 -0.5174] Lambda: [1.0000e-07 3.1623e-07 1.0000e-06 3.1623e-06 1.0000e-05 3.1623e-05 1.0000e-04 3.1623e-04 1.0000e-03 0.0032 0.0100] Learner: 'logistic' Properties, Methods

fitcecocは 5 分割の交差検証を実装するので、各分割について学習させるCompactClassificationECOCモデルから構成される 5 行 1 列の cell 配列がCVMDLに格納されます。各CompactClassificationECOCモデルのBinaryLearnersプロパティにはClassificationLinearモデルが格納されます。各コンパクト ECOC モデル内のClassificationLinearモデルの,のラベルの数化设计によって决まり。。Lambdaは正则强度のシーケンス,,clmdl1はそれぞれがLambdaの各正則化強度に対応する 11 個のモデルであると考えることができます。

各正則化強度について5分割分類誤差の平均をプロットすることにより,モデルがどの程度一般化を行うかを判断します。グリッド全体で汎化誤差を最小化する正則化強度を特定します。

ce = kfoldLoss(CVMdl); figure; plot(log10(Lambda),log10(ce)) [~,minCEIdx] = min(ce); minLambda = Lambda(minCEIdx); holdonplot(log10(minLambda),log10(ce(minCEIdx)),'ro'); ylabel('log_{10} 5-fold classification error') xlabel('log_{10} Lambda') legend('MSE','Min classification error') holdoff

データセット全体を使用して線形分類モデルから構成される ECOC モデルに学習をさせ、最小の正則化強度を指定します。

t = templatelinear('Learner','logistic','Solver','sparsa',...'Regularization','lasso','Lambda',minLambda,“梯度耐受”,1e-8); MdlFinal = fitcecoc(X,Y,“学习者”,t,“观察”,'columns');

新しい観測値のラベルを推定するには、MdlFinalと新しいデータをpredictに渡します。

詳細

すべて展开する

参照

[1] Allwein,E.,R。Schapire和Y. Singer。“将多类减少到二进制文件:边距分类器的统一方法。”机器学习研究杂志。卷。1,2000,第113–141页。

[2] 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.

[3] Escalera, S., O. Pujol, and P. Radeva. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recogn. Vol. 30, Issue 3, 2009, pp. 285–297.

拡张机能

バージョン履歴

R2016a で導入