Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

kfoldMargin

学習で使用しない観測値の分類マージン

説明

m = kfoldMargin(CVMdl) は、交差検証済みのバイナリ線形分類モデル CVMdl により取得した交差検証分類マージンを返します。つまり、他のすべての観測値を使用して学習を行うときにホールドアウトする観測値の分類マージンを、kfoldMargin はすべての分割について推定します。

m には、CVMdl から構成される線形分類モデルの各正則化強度に対する分類マージンが格納されます。

入力引数

すべて展開する

交差検証済みバイナリ線形分類モデル。ClassificationPartitionedLinear モデル オブジェクトとして指定します。ClassificationPartitionedLinear モデル オブジェクトを作成するには、fitclinear を使用し、交差検証用の名前と値のペアの引数のいずれか 1 つ (CrossVal など) を指定します。

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

出力引数

すべて展開する

交差検証分類マージン。数値ベクトルまたは行列として返されます。

m は n 行 L 列です。n は CVMdl を作成したデータ (XY を参照) に含まれている観測値の数、L は CVMdl に含まれている正則化強度の数 (numel(CVMdl.Trained{1}.Lambda)) です。

m(i,j) は、正則化強度が CVMdl.Trained{1}.Lambda(j) である線形分類モデルを使用した、観測値 i の交差検証分類マージンです。

データ型: single | double

すべて展開する

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

load nlpdata

X は予測子データのスパース行列、Y はクラス ラベルの categorical ベクトルです。データには 2 つを超えるクラスがあります。

モデルでは、ある Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できなければなりません。したがって、Statistics and Machine Learning Toolbox™ のドキュメンテーション Web ページに対応するラベルを識別します。

Ystats = Y == 'stats';

あるドキュメンテーション Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できるバイナリ線形分類モデルの交差検証を行います。

rng(1); % For reproducibility 
CVMdl = fitclinear(X,Ystats,'CrossVal','on');

CVMdlClassificationPartitionedLinear モデルです。既定では、10 分割交差検証が実行されます。'KFold' 名前と値のペアの引数を使用して分割数を変更できます。

交差検証マージンを推定します。

m = kfoldMargin(CVMdl);
size(m)
ans = 1×2

       31572           1

m は 31572 行 1 列のベクトルです。m(j) は観測値 j の分割外マージンの平均です。

箱ひげ図を使用して k 分割マージンをプロットします。

figure;
boxplot(m);
h = gca;
h.YLim = [-5 30];
title('Distribution of Cross-Validated Margins')

Figure contains an axes object. The axes object with title Distribution of Cross-Validated Margins contains 7 objects of type line. One or more of the lines displays its values using only markers

特徴選択を実行する方法の 1 つは、複数のモデルの k 分割マージンを比較することです。この基準のみに基づくと、マージンが大きい方が分類器として優れています。

NLP のデータセットを読み込みます。k 分割交差検証マージンの推定で説明されているようにデータを前処理します。

load nlpdata
Ystats = Y == 'stats';
X = X';

2 つのデータセットを作成します。

  • fullX にはすべての予測子が含まれます。

  • partX には、無作為に選択した予測子の 1/2 が含まれます。

rng(1); % For reproducibility
p = size(X,1); % Number of predictors
halfPredIdx = randsample(p,ceil(0.5*p));
fullX = X;
partX = X(halfPredIdx,:);

2 つのバイナリ線形分類モデルを交差検証します。1 つではすべての予測子を、もう 1 つでは半分の予測子を使用します。観測値が列に対応することを指定し、SpaRSA を使用して目的関数を最適化します。

CVMdl = fitclinear(fullX,Ystats,'CrossVal','on','Solver','sparsa',...
    'ObservationsIn','columns');
PCVMdl = fitclinear(partX,Ystats,'CrossVal','on','Solver','sparsa',...
    'ObservationsIn','columns');

CVMdl および PCVMdlClassificationPartitionedLinear モデルです。

各分類器の k 分割マージンを推定します。箱ひげ図を使用して k 分割マージン セットの分布をプロットします。

fullMargins = kfoldMargin(CVMdl);
partMargins = kfoldMargin(PCVMdl);

figure;
boxplot([fullMargins partMargins],'Labels',...
    {'All Predictors','Half of the Predictors'});
h = gca;
h.YLim = [-30 60];
title('Distribution of Cross-Validated Margins')

Figure contains an axes object. The axes object with title Distribution of Cross-Validated Margins contains 14 objects of type line. One or more of the lines displays its values using only markers

2 つの分類器でマージンの分布は似ています。

ロジスティック回帰学習器を使用する線形分類モデルに適した LASSO ペナルティの強度を決定するため、k 分割マージンの分布を比較します。

NLP のデータセットを読み込みます。k 分割交差検証マージンの推定で説明されているようにデータを前処理します。

load nlpdata
Ystats = Y == 'stats';
X = X';

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

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

5 分割の交差検証と各正則化強度を使用して、バイナリ線形分類モデルを交差検証します。SpaRSA を使用して目的関数を最適化します。目的関数の勾配の許容誤差を 1e-8 に下げます。

rng(10); % For reproducibility
CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns','KFold',5, ...
    'Learner','logistic','Solver','sparsa','Regularization','lasso', ...
    'Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = 
  ClassificationPartitionedLinear
    CrossValidatedModel: 'Linear'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 5
              Partition: [1x1 cvpartition]
             ClassNames: [0 1]
         ScoreTransform: 'none'


CVMdlClassificationPartitionedLinear モデルです。fitclinear は 5 分割の交差検証を実装するので、各分割について学習させる 5 つの ClassificationLinear モデルが CVMdl に格納されます。

各正則化強度の k 分割マージンを推定します。

m = kfoldMargin(CVMdl);
size(m)
ans = 1×2

       31572          11

m は各観測値の交差検証マージンから構成される 31572 行 11 列の行列です。列は正則化強度に対応します。

各正則化強度について k 分割マージンをプロットします。ロジスティック回帰スコアは [0,1] の範囲にあるので、マージンは [-1,1] の範囲にあります。グリッド全体でマージンを最大化する正則化強度を識別しやすくするため、マージンのスケールを変更します。

figure
boxplot(10000.^m)
ylabel('Exponentiated test-sample margins')
xlabel('Lambda indices')

Figure contains an axes object. The axes object with xlabel Lambda indices, ylabel Exponentiated test-sample margins contains 77 objects of type line. One or more of the lines displays its values using only markers

いくつかの Lambda の値では、10000 の付近で k 分割マージンの分布が密になっています。Lambda の値が大きくなると、予測子変数がスパースになります。これは分類器の品質として優れています。

k 分割マージンの分布の中心が低下する直前にある正則化強度を選択します。

LambdaFinal = Lambda(5);

データセット全体を使用して線形分類モデルに学習をさせます。目的の正則化強度を指定します。

MdlFinal = fitclinear(X,Ystats,'ObservationsIn','columns', ...
    'Learner','logistic','Solver','sparsa','Regularization','lasso', ...
    'Lambda',LambdaFinal);

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

詳細

すべて展開する

バージョン履歴

R2016a で導入

すべて展開する