Main Content

このページ最新ではありませ。をクリックし,英语のの最新版版を参照参照し。

kfoldloss

学習で使用しない観測値の分類損失

説明

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

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

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

入力引数

すべて展開する

线形分类からされる交差検证検证のののモデルモデル分类部门甲基核酸杆菌モデルオブジェクト指定します。分类部门甲基核酸杆菌モデルをするには,fitcecocを使用し、以下を行います。

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

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

推定値を取得するため、kfoldLoss は ECOC モデルの交差検証に使用したものと同じデータ (XおよびY)を適用します。

名前と値の引数

オプションの姓名,Value引数のコンマ区切りペアを指定します。姓名は引数名,Valueは対応するです。姓名は引用でなければなりませ。。姓名1,Value1,...,NameN,ValueNのに复数名前とのペア引数を任意の顺番で指定指定ます。。。

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

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

    説明 スコア領域 g(yj,sj)
    'binodeviance' 二项分布の逸脱度 (–∞,∞) log[1 + exp(–2yjsj)]/[2log(2)]
    “指数” 指数 (–∞,∞) Exp(–yjsj)/2
    'hamming' ハミング [0,1]または(–∞,∞) [1 – sign(yjsj)/2
    '合页' ヒンジ (–∞,∞) max(0,1 - yjsj)/2
    “线性” 線形 (–∞,∞) (1 - yjsj)/2
    'logit' ロジスティック (–∞,∞) log[1 + exp(–yjsj)]/[2log(2)]
    'quadratic' 2次 [0,1] [1 – yj(2sj– 1)]2/2

    バイナリ,yj= 0のにがが=になるにされ。またまた,各クラスについて平均ののバイナリ损失がが计算计算

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

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

    开花= customFunction(M,s)
    ここで、

    • MMdl.CodingMatrixに格纳たたたl列列コーディングです。。。

    • sは,行行のスコアの行。。。。

    • 开花分类损失このは,特定特定のすべてのについてバイナリバイナリ损失损失をを集计集计します。。たとえば,,平均バイナリ损失を使用使用使用使用

    • kは,のです。

    • lは,学习器数。。。

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

既定のはすべての学习器以下をする线形分类モデルである场合,,次ののなりなりなり

  • SVMの场合,BinaryLoss'合页'になります。

  • ロジスティック回帰の場合、BinaryLoss'quadratic'になります。

例:'BinaryLoss','binodeviance'

データ型:char|细绳|function_handle

バイナリ損失を集計する復号化方式。'Decoding''lossweighted'または“损失”から構成されるコンマ区切りのペアとして指定します。詳細は、バイナリ損失を参照しください。

例:“解码”,“损失”

分类スコアの予測に使用する分割のインデックス。'Folds'と正のベクトルから构成さコンマ切りのペアとしてします。Foldsの要素は1からcvmdl.kfoldの範囲でなければなりません。

例:“折叠”,[1 4 10]

データ型:单身的|双倍的

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

次が可能です。

  • 组み込み关数'classiferror'を指定ますこの场合,损失はは分类误差になります。

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

    以下では、nは学習データの観測値数 (CVMdl.NumObservations)、Kはクラス(numel(CVMdl.ClassNames))です。する关数では损失价值=Lossfun(C,S,W,成本)というシグネチャが必要です。ここで

    • 出力引数损失价值はスカラーです。

    • 关数名(Lossfun)を選択します。

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

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

    • Sは、符号を反転したクラスの損失値からなるnK列の数値行列です。各列は観測と対応しています。列の順序はCVMdl.ClassNamesのクラスの順序に対応します。Skfoldpredictの出力引数NegLossに類似します。

    • Wは,値の重みのn1列列数値です。。Wを渡す場合、その要素は正規化され、合計が1になります。

    • Costは,误分类の,KK列の数値行列です。たとえば、Cost=上es(K) -eye(K)は正確な分類を 0 のコストで指定し、誤判定を 1 で指定します。

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

データ型:function_handle|char|细绳

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

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

例:“模式”,'individual'

推定オプション。Statsetにより返される'选项'と构造からされるコンマ区ペアとして指定し。。

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

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

  • “选项”,statset(“ useparalleal”,true)を指定します。

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

Verbose0の场合メッセージ表示さませんそれ以外のは,诊断メッセージメッセージが表示表示され

例:“冗长”,1

データ型:单身的|双倍的

出力引数

すべて展開する

交差検証分类損失。数値スカラー、ベクトルまたは行列として返されます。Lの解釈はLossfunによって异なり。

交差検证モデルの化强度の(CVMdl.Trained{1}.BinaryLearners{1}.Lambda)をR、分割数 (cvmdl.kfoldに格纳)をFとします。

  • 模式'average'の場合、Lは1行R列のベクトルになります。L(j)は,正强度jを使用する交差検証済みモデルのすべての分割に対する平均分類損失です。

  • それ以外の,LFR列の行列になります。L(i,j)は,正强度jを使用する交差検証済みモデルの分割iに対する分类损失。

すべて展開する

nlpのデータをます。。

loadnlpdata

Xは予测子のスパース行列,Yはクラス ラベルの categorical ベクトルです。

線形分類モデルから構成されている ECOC モデルを交差検証します。

rng(1);% For reproducibilitycvmdl = fitcecoc(x,y,'Learner',“线性”,'CrossVal','on');

CVMdl分类部门甲基核酸杆菌モデルです。既定では、10 分割交差検証が実行されます。

分割外误差の平均推定します。

ce = kfoldLoss(CVMdl)
CE = 0.0958

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

nlpのデータをます。。予測子データを転置します。

loadnlpdatax = x';

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

y(〜(ismember(y,{'万博1manbetxsimulink','dsp','comm'}))) ='其他';

sparsaをして关数最适するよう指定する线形モデルモデルテンプレートを作成し。。

t = templateLinear(“求解器”,'sparsa');

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

rng(1);% For reproducibilitycvmdl = fitcecoc(x,y,“学习者”,t,'kfold',5,'ObservationsIn','columns');CMdl1 = CVMdl.Trained{1}
CMdl1 = CompactClassificationECOC ResponseName: 'Y' ClassNames: [comm dsp 万博1manbetxsimulink others] ScoreTransform: 'none' BinaryLearners: {6x1 cell} CodingMatrix: [4x6 double] Properties, Methods

CVMdl分类部门甲基核酸杆菌モデルです。このモデルに含まれている训练有素プロパティは各学习セットを使用て学习を行ったCompactClassificationECOCモデルが格納されている 5 行 1 列の cell 配列です。

各観測値の最小損失を取る関数を作成し、すべての観測値の最小損失を平均化します。この関数ではクラス識別行列 (C),観测の(W)および分类(Cost)を使用しないので、~を使用してこれらの位置を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

ロジスティック回帰学習器を使用する線形分類モデルから構成される ECOC モデルに適した LASSO ペナルティの強度を決定するため、5 分割の交差検証を実装します。

nlpのデータをます。。

loadnlpdata

Xは予测子のスパース行列,Yはクラス ラベルの categorical ベクトルです。

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

y(〜(ismember(y,{'万博1manbetxsimulink','dsp','comm'}))) ='其他';

1 0 - 7 1 0 - 2 の范囲间隔で配置されたたた个个正则强度を作成作成し。

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

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

t = templateLinear('Learner','logistic',“求解器”,'sparsa',...'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1E-8);

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

x = x';RNG(10);% For reproducibilitycvmdl = fitcecoc(x,y,“学习者”,t,'ObservationsIn','columns','kfold',5);

CVMdl分类部门甲基核酸杆菌モデルです。

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-05 3.1623E-05-05 1.0000E-04 3.1623E-04 3.1623E-04 1.0000 E.0000E-0303 0.003 0.00303 03032 0.0032 0.032 0.032 0.032 0.032 0.032 0.0100]'属性,方法

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); hold图(log10(Minlambda),log10(CE(Minceidx)),'ro');ylabel('log_{10} 5-fold classification error')xlabel('log_{10} Lambda') 传奇('MSE',“最小分类错误”) 抓住off

データセット使用て线形分类モデル构成さささモデルモデルモデルモデル学习をさせ,最小のの正则化化强度强度を

t = templateLinear('Learner','logistic',“求解器”,'sparsa',...'Regularization','lasso','Lambda',Minlambda,'GradientTolerance',1E-8);mdlfinal= fitcecoc(X,Y,“学习者”,t,'ObservationsIn','columns');

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

詳細

すべて展開する

参照

[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] Escalera,S.,O。Pujol和P. Radeva。“在三元错误校正输出代码中的解码过程中。”IEEE关于模式分析和机器智能的交易。卷。32,第7期,2010年,第120-134页。

[3] Escalera,S.,O。Pujol和P. Radeva。“对于错误校正输出代码的稀疏设计的三元代码的可分离性。”模式识别。卷。30,第3期,2009年,第285–297页。

拡張機能

バージョン履歴

R2016Aで导入