ドキュメンテーション

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

crossval

クラス: RegressionGP

ガウス過程回帰モデルの交差検証

構文

cvMdl = crossval(gprMdl)
cvmdl = crossval(gprMdl,Name,Value)

説明

cvMdl = crossval(gprMdl) は、10 分割の交差検証を使用してガウス過程回帰 (GPR) モデル gprMdl から構築された、分割モデル cvMdl を返します。

cvmdlRegressionPartitionedModel オブジェクト、gprMdlRegressionGP オブジェクト (完全なオブジェクト) です。

cvmdl = crossval(gprMdl,Name,Value) は、1 つ以上の Name,Value ペア引数で指定された追加オプションを使用して、分割されたモデル cvmdl を返します。たとえば、分割の数や検証に使用するデータの比率を指定できます。

入力引数

すべて展開する

ガウス過程回帰モデル。RegressionGP オブジェクト (完全なオブジェクト) として指定します。コンパクトな回帰オブジェクトに対して crossval を呼び出すことはできません。

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

k 分割交差検証用の無作為な分割。'CVPartition'cvpartition オブジェクトから構成されるコンマ区切りのペアとして指定します。

例: 'CVPartition',cvp では、cvp によって定義される無作為な分割を使用します。

CVPartition を指定する場合、HoldoutKFold または LeaveOut のいずれも指定できません。

ホールドアウト検定で検定に使用するデータの比率。'Holdout' と 0 から 1 の範囲にあるスカラー値から構成されるコンマ区切りのペアとして指定します。'Holdout',p を指定した場合、crossval では以下が行われます。
1. データの p*100% を検証データとして無作為に予約し、残りのデータを使用してモデルに学習をさせる。
2. コンパクトな学習済みモデルを cvgprMdl.Trained に格納する。

例: 'Holdout', 0.3 では、データの 30% を検証に、70% を学習に使用します。

Holdout を指定する場合、次のいずれも指定できません。CVPartitionKFold または Leaveout

データ型: single | double

交差検証済みの GPR モデルで使用する分割数。'KFold' と 1 より大きい正の整数値から構成されるコンマ区切りのペアとして指定します。Kfold は 1 より大きくなければなりません。'Kfold',k を指定した場合、crossval では以下が行われます。
1. データを無作為に k 個のセットに分割する。
2. 各セットについて、そのセットを検定データとして予約し、他の k - 1 個のセットを使用してモデルを学習させる。
3. k 個のコンパクトな学習済みモデルを cvgprMdl.Trained 内の k 行 1 列の cell 配列のセルに格納する。

例: 'KFold',5 では、5 つの分割を交差検証で使用します。つまり、各分割について、その分割を検定データとして使用し、残りの 4 つの分割でモデルを学習させます。

KFold を指定する場合、次のいずれも指定できません。CVPartitionHoldout または Leaveout

データ型: single | double

leave-one-out 交差検証のインジケーター。'LeaveOut''on' または 'off' のいずれかから構成されるコンマ区切りのペアとして指定します。'Leaveout','on' を指定した場合、crossval では n 個の観測値のそれぞれについて以下が行われます。
1. その観測値を検定データとして予約し、他の n - 1 個の観測値を使用してモデルを学習させる。
2. n 個のコンパクトな学習済みモデルを cvgprMdl.Trained 内の n 行 1 列の cell 配列のセルに格納する。

例: 'Leaveout','on'

Leaveout を指定する場合、次のいずれも指定できません。CVPartitionHoldout または KFold

出力引数

すべて展開する

分割されたガウス過程回帰モデル。RegressionPartitionedModel オブジェクトとして返されます。

すべて展開する

住宅データ[1]を UCI Machine Learning Repository [4]からダウンロードします。

このデータセットには、506 個の観測値が含まれています。最初の 13 列には予測子の値が、最後の列には応答値が含まれています。目標は、ボストン郊外にある持ち家の数の中央値を 13 個の予測子の関数として予測することです。

データを読み込み、応答ベクトルと予測子行列を定義します。

load('housing.data');
X = housing(:,1:13);
y = housing(:,end);

特性長スケールが各予測子について異なる二乗指数カーネル関数を使用して、GPR モデルを近似させます。予測子変数を標準化します。

gprMdl = fitrgp(X,y,'KernelFunction','ardsquaredexponential','Standardize',1);

予測子 4 をグループ化変数として使用して、データの交差検証分割を作成します。

rng('default') % For reproducibility
cvp = cvpartition(X(:,4),'kfold',10);

cvp 内の分割データを使用して、10 分割で交差検証したモデルを作成します。

cvgprMdl = crossval(gprMdl,'CVPartition',cvp);

分割外の観測値で学習させたモデルを使用して、分割内の観測値について回帰の損失を計算します。

L = kfoldLoss(cvgprMdl)
L =

    9.5299

分割内の観測値、つまり学習に使用しなかった観測値について応答を予測します。

ypred = kfoldPredict(cvgprMdl);

kfoldPredict は、分割外の観測値で学習させたモデルを使用して、すべての分割について、その分割に含まれている観測値の応答を予測します。

実際の応答と予測データをプロットします。

plot(y,'r.');
hold on;
plot(ypred,'b--.');
axis([0 510 -15 65]);
legend('True response','GPR prediction','Location','Best');
hold off;

アワビのデータ[2][3]を UCI Machine Learning Repository [4]からダウンロードし、'abalone.data' という名前で現在のディレクトリに保存します。

データを table に読み込みます。

tbl = readtable('abalone.data','Filetype','text','ReadVariableNames',false);

このデータセットには、4177 個の観測値が含まれています。目標は、8 つの物理的な測定値からアワビの年齢を予測することです。

パラメーター推定に回帰変数サブセット (sr) 法、予測に完全独立条件 (fic) 法 を使用して、GPR モデルを近似させます。予測子を標準化し、各予測子について特性長スケールが異なる二乗指数カーネル関数を使用します。

gprMdl = fitrgp(tbl,tbl(:,end),'KernelFunction','ardsquaredexponential',...
      'FitMethod','sr','PredictMethod','fic','Standardize',1);

4 分割の交差検証をモデルに対して実行します。これにより、データが 4 つのセットに分割されます。fitrgp は、各セットについて、そのセット (データの 25%) を検定データに使用し、残りの 3 つのセット (データの 75%) でモデルを学習させます。

rng('default') % For reproducibility
cvgprMdl = crossval(gprMdl,'KFold',4);

各分割における損失を計算します。

L = kfoldLoss(cvgprMdl,'mode','individual')
L =

    4.3669
    4.6896
    4.0565
    4.3162

すべての分割について交差検証損失の平均を計算します。既定の設定は、平均二乗誤差です。

L2 = kfoldLoss(cvgprMdl)
L2 =

    4.3573

これは、各分割における平均損失と等しくなります。

mse = mean(L)
mse =

    4.3573

ヒント

  • 名前と値のペアの引数は、一度に 1 つだけ使用できます。

  • 交差検証済みモデルについて予測区間を計算することはできません。

代替方法

代替方法として、関連する名前と値のペアの引数を fitrgp で使用して、交差検証したモデルを学習させることができます。

fitrgp を呼び出すときにカスタムな 'ActiveSet' を指定した場合、GPR モデルの交差検証を行うことはできません。

参照

[1] Harrison, D. and D.L., Rubinfeld. "Hedonic prices and the demand for clean air." J. Environ. Economics & Management. Vol.5, 1978, pp. 81-102.

[2] Warwick J. N., T. L. Sellers, S. R. Talbot, A. J. Cawthorn, and W. B. Ford. "The Population Biology of Abalone (_Haliotis_ species) in Tasmania. I. Blacklip Abalone (_H. rubra_) from the North Coast and Islands of Bass Strait." Sea Fisheries Division, Technical Report No. 48 (ISSN 1034-3288), 1994.

[3] S. Waugh. "Extending and Benchmarking Cascade-Correlation", PhD Thesis. Computer Science Department, University of Tasmania, 1995.

[4] Lichman, M. UCI Machine Learning Repository, Irvine, CA: University of California, School of Information and Computer Science, 2013. http://archive.ics.uci.edu/ml.

R2015b で導入