Main Content

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

predict

クラス: RegressionLinear

線形回帰モデルの応答予測

説明

YHat = predict(Mdl,X) は、学習済みの線形回帰モデル Mdl に基づいて予測子データ X 内の各観測値に対する予測応答を返します。YHat には、Mdl 内の各正則化強度に対する応答が格納されます。

YHat = predict(Mdl,X,'ObservationsIn',dimension) は、予測子データにおける観測値の次元を、'rows' (既定) または 'columns' のいずれかで指定します。たとえば、'ObservationsIn','columns' と指定して、予測子データの列が観測値に対応することを示します。

入力引数

すべて展開する

線形回帰モデル。RegressionLinear モデル オブジェクトとして指定します。RegressionLinear モデル オブジェクトは、fitrlinear を使用して作成できます。

応答の生成に使用する予測子データ。非スパースまたはスパースの数値行列またはテーブルとして指定します。

既定では、X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

  • 数値行列の場合

    • X の列に含まれている変数の順序は、Mdl に学習させた予測子変数の順序と同じでなければなりません。

    • テーブル (たとえば Tbl) を使用して Mdl に学習をさせる場合、Tbl に含まれている予測子変数が数値のみであれば、X を数値行列にすることができます。学習時に Tbl 内の数値予測子をカテゴリカルとして扱うには、fitrlinear の名前と値のペアの引数 CategoricalPredictors を使用してカテゴリカル予測子を指定します。Tbl に種類の異なる予測子変数 (数値および categorical データ型など) が混在し、X が数値行列である場合、predict でエラーがスローされます。

  • テーブルの場合

    • predict は、文字ベクトルの cell 配列ではない cell 配列や複数列の変数をサポートしません。

    • テーブル (たとえば Tbl) を使用して Mdl に学習をさせた場合、X 内のすべての予測子変数は変数名およびデータ型が、Mdl に学習させた (Mdl.PredictorNames に格納されている) 変数と同じでなければなりません。ただし、X の列の順序が Tbl の列の順序に対応する必要はありません。また、TblX に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict はこれらを無視します。

    • 数値行列を使用して Mdl に学習をさせる場合、Mdl.PredictorNames 内の予測子名と X 内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定するには、fitrlinear の名前と値のペアの引数 PredictorNames を使用します。X 内の予測子変数はすべて数値ベクトルでなければなりません。X に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predict はこれらを無視します。

メモ

観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、最適化実行時間が大幅に短縮される可能性があります。table の予測子データに対して 'ObservationsIn','columns' を指定することはできません。

データ型: double | single | table

予測子データにおける観測値の次元。'columns' または 'rows' として指定します。

メモ

観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、最適化実行時間が大幅に短縮される可能性があります。table の予測子データに対して 'ObservationsIn','columns' を指定することはできません。

出力引数

すべて展開する

予測応答。n 行 L 列の数値行列として返されます。n は X 内の観測値数、L は Mdl.Lambda 内の正則化強度の数です。YHat(i,j) は、正則化強度が Mdl.Lambda(j) である線形回帰モデルを使用した、観測値 i の応答です。

正則化強度が j であるモデルを使用して予測された応答は以下です。y^j=xβj+bj.

  • x は予測子データ行列 X の観測値であり、行列ベクトルです。

  • βj は推定された係数の列ベクトルです。このベクトルは Mdl.Beta(:,j) に格納されます。

  • bj は推定されたスカラー バイアスであり、Mdl.Bias(j) に格納されます。

すべて展開する

次のモデルにより、10000 個の観測値をシミュレートします。

y=x100+2x200+e.

  • X=x1,...,x1000 は、10% の要素が非ゼロ標準正規である 10000 行 1000 列のスパース行列です。

  • e は、平均が 0、標準偏差が 0.3 のランダムな正規誤差です。

rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

線形回帰モデルに学習をさせます。観測値の 30% をホールドアウト標本として予約します。

CVMdl = fitrlinear(X,Y,'Holdout',0.3);
Mdl = CVMdl.Trained{1}
Mdl = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x1 double]
                 Bias: -0.0066
               Lambda: 1.4286e-04
              Learner: 'svm'


  Properties, Methods

CVMdlRegressionPartitionedLinear モデルです。これには Trained プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた RegressionLinear モデルが格納されています。

学習データと検定データを分割の定義から抽出します。

trainIdx = training(CVMdl.Partition);
testIdx = test(CVMdl.Partition);

学習標本および検定標本の応答を予測します。

yHatTrain = predict(Mdl,X(trainIdx,:));
yHatTest = predict(Mdl,X(testIdx,:));

Mdl 内の正則化強度は 1 つなので、yHatTrainyHatTest は数値ベクトルになります。

LASSO ペナルティと最小二乗を使用する最適な線形回帰モデルから応答を予測します。

検定標本の応答の予測 で説明されているように 10000 個の観測値をシミュレートします。

rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

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

Lambda = logspace(-5,-1,15);

モデルを交差検証します。実行速度を向上させるため、予測子データを転置し、観測値が列単位であることを指定します。SpaRSA を使用して目的関数を最適化します。

X = X'; 
CVMdl = fitrlinear(X,Y,'ObservationsIn','columns','KFold',5,'Lambda',Lambda,...
    'Learner','leastsquares','Solver','sparsa','Regularization','lasso');

numCLModels = numel(CVMdl.Trained)
numCLModels = 5

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

1 番目の学習済み線形回帰モデルを表示します。

Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x15 double]
                 Bias: [1x15 double]
               Lambda: [1x15 double]
              Learner: 'leastsquares'


  Properties, Methods

Mdl1RegressionLinear モデル オブジェクトです。fitrlinear は最初の 4 つの分割に対して学習を行うことにより Mdl1 を構築しました。Lambda は正則化強度のシーケンスなので、Mdl1 はそれぞれが Lambda の各正則化強度に対応する 11 個のモデルであると考えることができます。

交差検証された MSE を推定します。

mse = kfoldLoss(CVMdl);

Lambda の値が大きくなると、予測子変数がスパースになります。これは回帰モデルの品質として優れています。データセット全体を使用し、モデルの交差検証を行ったときと同じオプションを指定して、各正則化強度について線形回帰モデルに学習をさせます。モデルごとに非ゼロの係数を特定します。

Mdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,...
    'Learner','leastsquares','Solver','sparsa','Regularization','lasso');
numNZCoeff = sum(Mdl.Beta~=0);

同じ図に、各正則化強度についての交差検証された MSE と非ゼロ係数の頻度をプロットします。すべての変数を対数スケールでプロットします。

figure;
[h,hL1,hL2] = plotyy(log10(Lambda),log10(mse),...
    log10(Lambda),log10(numNZCoeff)); 
hL1.Marker = 'o';
hL2.Marker = 'o';
ylabel(h(1),'log_{10} MSE')
ylabel(h(2),'log_{10} nonzero-coefficient frequency')
xlabel('log_{10} Lambda')
hold off

予測子変数のスパース性と MSE の低さのバランスがとれている正則化強度 (Lambda(10) など) のインデックスを選択します。

idxFinal = 10;

最小の MSE に対応するモデルを抽出します。

MdlFinal = selectModels(Mdl,idxFinal)
MdlFinal = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x1 double]
                 Bias: -0.0050
               Lambda: 0.0037
              Learner: 'leastsquares'


  Properties, Methods

idxNZCoeff = find(MdlFinal.Beta~=0)
idxNZCoeff = 2×1

   100
   200

EstCoeff = Mdl.Beta(idxNZCoeff)
EstCoeff = 2×1

    1.0051
    1.9965

MdlFinal は、1 つの正則化強度がある RegressionLinear モデルです。非ゼロ係数 EstCoeff は、データをシミュレートした係数に近くなっています。

10 個の新しい観測値をシミュレートし、最適なモデルを使用して対応する応答を予測します。

XNew = sprandn(d,10,nz);
YHat = predict(MdlFinal,XNew,'ObservationsIn','columns');

拡張機能

R2016a で導入