Main Content

cvshrink

線形判別の正則化の交差検証

説明

err = cvshrink(Mdl) は、正則化パラメーター gamma の異なる値で交差検証された分類誤差の値を含むベクトルを返します。

[err,gamma] = cvshrink(Mdl) は、gamma の値のベクトルも返します。

[err,gamma,delta] = cvshrink(Mdl) は、delta の値のベクトルも返します。

[err,gamma,delta,numpred] = cvshrink(Mdl) は、パラメーター gamma および delta の各設定に対する非ゼロの予測子の数を含むベクトルまたは行列を返します。

[___] = cvshrink(Mdl,Name=Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、交差検証用の delta 区間および gamma 区間の数や進捗メッセージの詳細レベルを指定できます。

すべて折りたたむ

判別分析分類器を正則化し、モデル内の予測子の数と分類精度の間のトレードオフを表示します。

データ ovariancancer の線形判別分析分類器を作成します。結果のモデルを適度に小さく維持するためにオプション SaveMemory とオプション FillCoeffs を設定します。

load ovariancancer
obj = fitcdiscr(obs,grp,...
    'SaveMemory','on','FillCoeffs','off');

Gamma の 10 レベルと Delta の 10 レベルを使用して、適切なパラメーターを検索します。この検索には時間がかかります。進行状況を表示するために Verbose1 に設定します。

rng('default') % for reproducibility
[err,gamma,delta,numpred] = cvshrink(obj,...
    'NumGamma',9,'NumDelta',9,'Verbose',1);
Done building cross-validated model.
Processing Gamma step 1 out of 10.
Processing Gamma step 2 out of 10.
Processing Gamma step 3 out of 10.
Processing Gamma step 4 out of 10.
Processing Gamma step 5 out of 10.
Processing Gamma step 6 out of 10.
Processing Gamma step 7 out of 10.
Processing Gamma step 8 out of 10.
Processing Gamma step 9 out of 10.
Processing Gamma step 10 out of 10.

予測子の数に対して分類誤差率をプロットします。

plot(err,numpred,'k.')
xlabel('Error rate');
ylabel('Number of predictors');

入力引数

すべて折りたたむ

学習済みの判別分析分類器。fitcdiscr で学習させた ClassificationDiscriminant モデル オブジェクトとして指定します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: [err,gamma,delta,numpred] = cvshrink(Mdl,NumGamma=9,NumDelta=9,Verbose=1);

交差検証用の Delta 値。数値スカラー、行ベクトル、または行列として指定します。

  • スカラー deltacvshrink は、この delta の値と gamma のすべての値を正則化に使用します。

  • 行ベクトル delta — 各 i および j に対して、cvshrinkdelta(j)gamma(i) を正則化に使用します。

  • 行列 deltadelta の行数は gamma に含まれる要素の数と等しくなければなりません。各 i および jに対して、cvshrinkdelta(i,j)gamma(i) を正則化に使用します。

例: delta=[0 .01 .1]

データ型: double

交差検証用の Gamma 値。数値ベクトルとして指定します。

例: gamma=[0 .01 .1]

データ型: double

交差検証用の delta 区間の数。非負の整数として指定します。cvshrink は、すべての gamma の値について、ゼロから delta の最大値までの NumDelta + 1 個の等間隔な delta の値を使用して判別式を交差検証します。最大値では、すべての予測子がこの値の gamma について排除されます。delta を設定した場合、cvshrinkNumDelta を無視します。

例: NumDelta=3

データ型: double

交差検証用の gamma 区間の数。非負の整数として指定します。cvshrink は、MinGamma から 1 までの NumGamma + 1 個の等間隔な gamma の値を使用して判別式を交差検証します。gamma を設定した場合、cvshrinkNumGamma を無視します。

例: NumGamma=3

データ型: double

詳細レベル。01、または 2 を指定します。値が大きいほど進捗メッセージの数が増えます。

例: Verbose=2

データ型: double

出力引数

すべて折りたたむ

誤分類誤差率。誤差の数値のベクトルまたは行列として返されます。誤分類誤差率は、すべての分割で誤分類されたデータの平均の比率です。

  • delta がスカラー (既定) の場合、err(i)gamma(i) で正則化された Mdl に対する誤分類誤差率です。

  • delta がベクトルの場合、err(i,j)gamma(i)delta(j) で正則化された Mdl に対する誤分類誤差率です。

  • delta が行列の場合、err(i,j)gamma(i)delta(i,j) で正則化された Mdl に対する誤分類誤差率です。

正則化に使用された Gamma 値。数値ベクトルとして返されます。ガンマとデルタを参照してください。

正則化に使用された Delta 値。数値ベクトルまたは行列として返されます。ガンマとデルタを参照してください。

  • 名前と値の引数 delta にスカラーを指定した場合、出力 deltagamma と同じサイズで、入力スカラーと等しいエントリをもつ行ベクトルになります。

  • 名前と値の引数 delta に行ベクトルを指定した場合、出力 delta はこの行ベクトルと同じ列数で gamma の要素の数と等しい行数の行列になります。出力 delta(i,j) は入力 delta(j) と等しくなります。

  • 名前と値の引数 delta に行列を指定した場合、出力 delta はこの入力行列と同じになります。delta の行数は、gamma 内の要素の数と等しくなければなりません。

さまざまな正則化を実行したときのモデル内の予測子の数。数値ベクトルまたは行列として返されます。numprederr と同じサイズです。

  • delta がスカラー (既定) の場合、numpred(i)gamma(i)delta で正則化された Mdl の予測子の数です。

  • delta がベクトルの場合、numpred(i,j)gamma(i)delta(j) で正則化された Mdl の予測子の数です。

  • delta が行列の場合、numpred(i,j)gamma(i)delta(i,j) で正則化された Mdl の予測子の数です。

詳細

すべて折りたたむ

ガンマとデルタ

正則化とは、効果的な予測モデルを生み出す予測子の小さな集合を見つけ出す過程です。線形判別分析には、γ および δ の 2 つのパラメーターがあり、これらは次のように正則化を制御します。cvshrink は適切なパラメーター値の選択を支援します。

Σ がデータ X の共分散行列を表し、X^ が中心データ (データ X からクラス別の平均を減算したデータ) であるとします。次のように定義します。

D=diag(X^T*X^).

正則化した共分散行列 Σ˜ は次のようになります。

Σ˜=(1γ)Σ+γD.

γ ≥ MinGamma である場合、Σ˜ は常に正則です。

μk を k クラスの X の要素の平均ベクトルとし、μ0 をグローバル平均ベクトル (X の行の平均) とします。C がデータ X の相関行列、C˜ が正則化された相関行列であるとします。

C˜=(1γ)C+γI,

ここで I が単位行列です。

データ点 x の正則化された判別分析分類器にある線形項は

(xμ0)TΣ˜1(μkμ0)=[(xμ0)TD1/2][C˜1D1/2(μkμ0)].

パラメーター δ は、大かっこ内の最後の項にしきい値としてこの式を入力します。ベクトル [C˜1D1/2(μkμ0)] の各成分は、大きさがしきい値 δ より小さい場合、ゼロが設定されます。そのため、クラス k に対して、コンポーネント j のしきい値を 0 に設定した場合、x のコンポーネント j は事後確率の評価には入りません。

DeltaPredictor プロパティは、このしきい値に関係するベクトルです。δ ≥ DeltaPredictor(i) の場合、すべてのクラス k には次の値があります。

|C˜1D1/2(μkμ0)|δ.

したがって、δ ≥ DeltaPredictor(i) の場合、正則化された分類器は予測子 i を使用しません。

ヒント

  • err および numpred 出力を調べて、交差検証誤差と予測子の数の間のトレードオフを確認します。満足のいく点が見つかったら、ドット表記を使用して対応する gamma および delta プロパティをモデルに設定します。たとえば、(i,j) が満足のいく点の位置である場合は、次のように設定します。

    Mdl.Gamma = gamma(i);
    Mdl.Delta = delta(i,j);

バージョン履歴

R2012b で導入