ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

crossval

交差検証を使用した損失推定

構文

vals = crossval(fun,X)
vals = crossval(fun,X,Y,...)
mse = crossval('mse',X,y,'Predfun',predfun)
mcr = crossval('mcr',X,y,'Predfun',predfun)
val = crossval(criterion,X1,X2,...,y,'Predfun',predfun)
vals = crossval(...,'name',value)

説明

vals = crossval(fun,X) は、関数 funX 内のデータに適用して 10 分割交差検証を実行します。

fun は、2 つの入力をもつ関数への関数ハンドルです。2 つの入力は X の学習サブセット XTRAINX の検定データ XTEST で、次のようになります。

testval = fun(XTRAIN,XTEST)

呼び出される度に、funXTRAIN を使用してモデルを近似し、その近似モデルを使用して XTEST から計算した基準 testval を返します。

X は、列ベクトルまたは行列です。X の行は観測に対応し、列は変数または特徴量に対応します。vals の各行には、1 つの検定データに fun を適用した結果が含まれます。testval が非スカラー値の場合、crossval はそれを線形インデックスを使って行ベクトルに変換し、vals の 1 行に格納します。

vals = crossval(fun,X,Y,...) は、データが別々の変数 XY、... に格納されている場合に使用されます。すべての変数 (列ベクトル、行列、または配列) には、同じ数の行がなければなりません。fun は、XY、...の学習サブセットを使用して呼び出され、その後 YX、...の検証サブセットが以下のように続きます。

testvals = fun(XTRAIN,YTRAIN,...,XTEST,YTEST,...)

mse = crossval('mse',X,y,'Predfun',predfun) は、関数 predfun に対する平均二乗誤差の 10 分割交差検証の推定値が含まれているスカラー mse を返します。X は、予測子の列ベクトル、行列、または配列にすることができます。y は応答値の列ベクトルです。Xy は同じ行数でなければなりません。

predfun は関数ハンドルであり、X の学習サブセット、y の学習サブセットおよび X の検定データで次のように呼び出されます。

yfit = predfun(XTRAIN,ytrain,XTEST)

predfun は、呼び出されるたびに XTRAINytrain を使用して回帰モデルをあてはめ、近似値を列ベクトル yfit で返す必要があります。yfit の各行には、XTEST の対応する行の予測値が含まれています。関数 crossval は、yfit と対応する応答検証セットの間の平方誤差を計算し、すべての検証セットにわたる総合的な平均を返します。

mcr = crossval('mcr',X,y,'Predfun',predfun) は、関数 predfun に対する誤分類率 (誤分類された標本の比率) の 10 分割交差検証の推定値が含まれているスカラー mcr を返します。行列 X には予測値の値が含まれ、ベクトル y には、クラス ラベルが含まれています。predfun は、XTRAIN および YTRAIN を使用して、分類モデルを近似し、XTEST の予測クラス ラベルとして yfit を返します。crossval は、yfit と対応する応答検証セットの間での誤分類の数を計算し、すべての検証セットでの総誤分類率を返します。

val = crossval(criterion,X1,X2,...,y,'Predfun',predfun) は、X1, X2, ... の予測子値と y の応答値またはクラス ラベルを使用して、それぞれ平均二乗誤差 (回帰モデルの場合) または誤分類率 (分類モデルの場合) の交差検証推定値を返します。criterion'mse' または 'mcr' です。X1, X2, ...と y は同じ行数でなければなりません。predfun は、X1, X2, ... の学習サブセット、y の学習サブセット、および X1, X2, ... の検定サブセットを次のように渡して呼び出す関数のハンドルです。

yfit=predfun(X1TRAIN,X2TRAIN,...,ytrain,X1TEST,X2TEST,...)

yfit は、近似値を含む列ベクトルになります。

vals = crossval(...,'name',value) は、1 つまたは複数のオプション パラメーターの名前と値のペアを以下の表から選択して指定します。一重引用符で囲んで name を指定します。

名前
holdout

ホールドアウト交差検証用の観測値の比率または個数 p を指定するスカラー。0 < p < 1 の場合、約 p*n 個の観測が検定データ用に無作為に選択されます。p が整数の場合、p 個の観測が検定データ用に無作為に選択されます。

kfold

k 分割交差検証の分割数 k を指定する 1 より大きい正の整数。

leaveout

Leave-one-out 法の交差検証を指定します。値は 1 でなければなりません。

mcreps

検定用のモンテカルロ反復回数を指定する正の整数。crossval の最初の入力が 'mse' または 'mcr' である場合、crossval はすべてのモンテカルロ反復における誤分類率または平均二乗誤差の平均を返します。それ以外の場合、crossval は、1 番目の次元に沿ったすべてのモンテカルロ反復の値 vals を連結します。

partition

交差検証のタイプと分割を指定する cvpartition クラスの c オブジェクト。

stratify

列ベクトル group。階層化のためのグループを指定します。学習セットとテスト セットはどちらも group とほぼ同じクラス比率になります。group 内の NaN、空の文字ベクトル、空の string、<missing> 値、および <undefined> 値は欠損データとして扱われ、データの対応する行は無視されます。

options

並列実行するかどうかを指定し、乱数ストリームを指定する構造体。statset を使用して options 構造体を作成します。以下のオプションのフィールドがあります。

  • UseParallel — 並列計算する場合は true に設定します。既定値は false です。

    並列計算には Parallel Computing Toolbox™ が必要です。

  • UseSubstreams — 再生成可能な方法で並列計算する場合は true に設定します。既定値は false です。再現性のある計算を行うには、Streams をサブストリームを許可する型、'mlfg6331_64' または 'mrg32k3a' に設定します。

  • StreamsRandStream オブジェクトまたはそのようなオブジェクトで構成される cell 配列。Streams を指定しないと、crossval は既定のストリームを使用します。

指定できるのは kfoldholdoutleaveout、または partition のいずれか 1 つです。partitionstratify と共に指定できません。partitionmcreps の両方が指定されると、最初のモンテカルロ反復は、cvpartition オブジェクト内に含まれる分割情報を使用します。残りの各反復で新しい分割を作成するときは、repartition メソッドが呼び出されます。交差検証のタイプが指定されていない場合の既定値は 10 分割交差検証です。

メモ

分類アルゴリズムで交差検証を使用するときは、階層化をお勧めします。それ以外では、一部の検定データがすべてのクラスの観測値を含まない場合があります。

例 1

10 分割交差検証を使用して、回帰の平均二乗誤差を計算します。

load('fisheriris');
y = meas(:,1);
X = [ones(size(y,1),1),meas(:,2:4)];

regf=@(XTRAIN,ytrain,XTEST)(XTEST*regress(ytrain,XTRAIN));

cvMse = crossval('mse',X,y,'predfun',regf)
cvMse =
    0.1015

例 2

階層化 10 分割交差検証を使用して、誤分類率を計算します。

load('fisheriris');
y = species;
X = meas;
cp = cvpartition(y,'k',10); % Stratified cross-validation

classf = @(XTRAIN, ytrain,XTEST)(classify(XTEST,XTRAIN,...
ytrain));

cvMCR = crossval('mcr',X,y,'predfun',classf,'partition',cp)
cvMCR =
    0.0200

例 3

階層化 10 分割交差検証を使用して、混同行列を計算します。

load('fisheriris');
y = species;
X = meas;
order = unique(y); % Order of the group labels
cp = cvpartition(y,'k',10); % Stratified cross-validation

f = @(xtr,ytr,xte,yte)confusionmat(yte,...
classify(xte,xtr,ytr),'order',order);

cfMat = crossval(f,X,y,'partition',cp);
cfMat = reshape(sum(cfMat),3,3)
cfMat =
    50     0     0
     0    48     2
     0     1    49

cfMat は、10 個の検定データからの 10 個の混同行列の合計です。

参考文献

[1] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning. New York: Springer, 2001.

拡張機能

R2008a で導入