Main Content

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

selectModels

バイナリ ClassificationLinear 学習器から構成されるマルチクラス ECOC モデルのサブセットを選択

説明

SubMdl = selectModels(Mdl,idx) は、さまざまな正則化強度を使用して学習をさせた一連のマルチクラス誤り訂正出力符号 (ECOC) モデル (Mdl) から、ClassificationLinear バイナリ モデルで構成される学習済み ECOC モデルのサブセットを返します。インデックス (idx) は Mdl.BinaryLearners{1}.Lambda の正則化強度に対応し、どのモデルを返すかを指定します。

SubMdl は、CompactClassificationECOC モデル オブジェクトとして返されます。

すべて折りたたむ

さまざまな正則化強度を使用して、線形バイナリ学習器から構成される学習済み ECOC モデルのサブセットを選択します。

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

load nlpdata

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

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

Lambda = logspace(-8,-1,11);

SpaRSA を使用して目的関数を最適化するように指定する線形分類モデル テンプレートを作成します。Lambda で指定される強度の LASSO ペナルティを使用します。

t = templateLinear('Solver','sparsa','Regularization','lasso',...
    'Lambda',Lambda);

データの 30% を検定用にホールドアウトします。検定標本のインデックスを識別します。

rng(1); % For reproducibility
cvp = cvpartition(Y,'Holdout',0.30);
idxTest = test(cvp);

線形分類モデルから構成されている ECOC モデルに学習をさせます。実行時間を短縮するため、各観測値が列に対応するように予測子データを配置します。

X = X';
PMdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns','CVPartition',cvp);
Mdl = PMdl.Trained{1};
numel(Mdl.BinaryLearners{1}.Lambda)
ans = 11

MdlCompactClassificationECOC モデル オブジェクトです。Lambda は正則化強度の 11 次元ベクトルなので、Mdl はそれぞれが各正則化強度に対応する 11 個の学習済みモデルであると考えることができます。

各正則化モデルについて検定標本の誤分類率を推定します。

ce = loss(Mdl,X(:,idxTest),Y(idxTest),'ObservationsIn','columns');

対数スケールで正則化強度に対して誤分類率をプロットします。

figure
plot(log10(Lambda),log10(ce),'-o')
ylabel('log_{10} misclassification rates')
xlabel('log_{10} Lambda')
[~,minCEIdx] = min(ce);
minLambda = Lambda(minCEIdx);
hold on
plot(log10(minLambda),log10(ce(minCEIdx)),'ro');
hold off

Figure contains an axes object. The axes object contains 2 objects of type line.

いくつかの Lambda の値で同じように分類誤差の値が小さくなっています。予測子変数をスパースにするため、(分類率が優れているままの) より大きい値の Lambda を選択することを考えます。

分類誤差が増加し始める点の付近にある正則化強度をもつ 4 つのモデルを選択します。

idx = 7:10;
MdlFinal = selectModels(Mdl,idx)
MdlFinal = 
  CompactClassificationECOC
      ResponseName: 'Y'
        ClassNames: [comm    dsp    ecoder    fixedpoint    ...    ]
    ScoreTransform: 'none'
    BinaryLearners: {78x1 cell}
      CodingMatrix: [13x78 double]


  Properties, Methods

LambdaFinal = MdlFinal.BinaryLearners{1}.Lambda
LambdaFinal = 1×4

    0.0002    0.0008    0.0040    0.0200

MdlFinalCompactClassificationECOC モデル オブジェクトです。これは、LambdaFinal 内の 4 つの正則化強度を使用して学習を行った 4 つのモデルであると考えることができます。

入力引数

すべて折りたたむ

さまざまな正則化強度を使用して学習を行った、バイナリ線形分類器から構成されるマルチクラス ECOC モデル。CompactClassificationECOC モデル オブジェクトを指定します。

Mdl を作成するときは、以下を行わなければなりません。

  • fitcecoc を使用する。

  • ClassificationLinear バイナリ学習器 (Learners を参照) を指定する。

  • 各線形バイナリ学習器に対して同じ正則化強度を指定する。

Mdl は 1 つのモデル オブジェクトですが、numel(Mdl.BinaryLearners{1}.Lambda) = L ≥ 2 の場合、Mdl は L 個の学習済みモデルであると考えることができます。

正則化強度に対応するインデックス。正の整数ベクトルを指定します。idx の値は [1,L] の範囲になければなりません。L = numel(Mdl.BinaryLearners{1}.Lambda) です。

データ型: double | single

ヒント

  • バイナリ線形分類モデルから構成されている複数の ECOC 予測モデルを構築する方法の 1 つに、次のようなものがあります。

    1. templateLinear を使用して線形分類モデル テンプレートを作成し、名前と値のペアの引数 'Lambda' を使用して正則化強度のグリッドを指定します。

    2. データの一部を検定用にホールドアウトします。

    3. fitcecoc を使用して ECOC モデルに学習をさせます。名前と値のペアの引数 'Learners' を使用してテンプレートを指定し、学習データを与えます。fitcecocClassificationLinear バイナリ学習器が含まれている CompactClassificationECOC モデル オブジェクトを 1 つ返しますが、すべてのバイナリ学習器にはモデルが 1 つ含まれ、それぞれの正則化強度に対応します。

    4. 各正則化モデルの品質を判断するため、返されたモデル オブジェクトとホールドアウトされたデータを loss などに渡します。

    5. 満足できる正則化モデルのサブセットのインデックス (idx) を識別し、返されたモデルとインデックスを selectModels に渡します。関数 selectModels は 1 つの CompactClassificationECOC モデル オブジェクトを返しますが、これには numel(idx) 個の正則化モデルが含まれています。

    6. 新しいデータのクラス ラベルを予測するため、データと正則化モデルのサブセットを predict に渡します。

バージョン履歴

R2016a で導入