predict
クラス: RegressionLinear
線形回帰モデルの応答予測
説明
入力引数
線形回帰モデル。RegressionLinear モデル オブジェクトとして指定します。RegressionLinear モデル オブジェクトは、fitrlinear を使用して作成できます。
応答の生成に使用する予測子データ。完全な数値行列、スパースの数値行列、または table として指定します。
既定では、X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
数値行列の場合
Xの列に含まれている変数の順序は、Mdlに学習させた予測子変数の順序と同じでなければなりません。table (たとえば
Tbl) を使用してMdlに学習をさせる場合、Tblに含まれている予測子変数が数値のみであれば、Xを数値行列にすることができます。学習時にTbl内の数値予測子をカテゴリカルとして扱うには、fitrlinearの名前と値のペアの引数CategoricalPredictorsを使用してカテゴリカル予測子を指定します。Tblに種類の異なる予測子変数 (数値および categorical データ型など) が混在し、Xが数値行列である場合、predictでエラーがスローされます。
table の場合
predictは、文字ベクトルの cell 配列ではない cell 配列や複数列の変数をサポートしません。table (たとえば
Tbl) を使用してMdlに学習をさせた場合、X内のすべての予測子変数は変数名およびデータ型が、Mdlに学習させた (Mdl.PredictorNamesに格納されている) 変数と同じでなければなりません。ただし、Xの列の順序がTblの列の順序に対応する必要はありません。また、TblとXに追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predictはこれらを無視します。数値行列を使用して
Mdlに学習をさせる場合、Mdl.PredictorNames内の予測子名とX内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定するには、fitrlinearの名前と値のペアの引数PredictorNamesを使用します。X内の予測子変数はすべて数値ベクトルでなければなりません。Xに追加の変数 (応答変数や観測値の重みなど) を含めることができますが、predictはこれらを無視します。
メモ
観測値が列に対応するように予測子行列を配置して "ObservationsIn","columns" を指定すると、最適化実行時間が大幅に短縮される可能性があります。table の予測子データに対して "ObservationsIn","columns" を指定することはできません。
データ型: double | single | table
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: predict(Mdl,X,"ObservationsIn","columns") は、予測子データの列が観測値に対応することを示します。
予測子データにおける観測値の次元。"columns" または "rows" として指定します。
メモ
観測値が列に対応するように予測子行列を配置して "ObservationsIn","columns" を指定すると、最適化実行時間が大幅に短縮される可能性があります。table の予測子データに対して "ObservationsIn","columns" を指定することはできません。
データ型: char | string
R2023b 以降
予測子に欠損値がある観測値に使用する予測した応答値。"median"、"mean"、または数値スカラーとして指定します。
| 値 | 説明 |
|---|---|
"median" | predict は、予測子に欠損値がある観測値について予測した応答値として、学習データ内の観測された応答値の中央値を使用します。 |
"mean" | predict は、予測子に欠損値がある観測値について予測した応答値として、学習データ内の観測された応答値の平均値を使用します。 |
| 数値スカラー | predict は、予測子に欠損値がある観測値について予測した応答値として、この値を使用します。 |
例: PredictionForMissingValue="mean"
例: PredictionForMissingValue=NaN
データ型: single | double | char | string
出力引数
例
次のモデルにより、10000 個の観測値をシミュレートします。
は、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: [1000×1 double]
Bias: -0.0066
Lambda: 1.4286e-04
Learner: 'svm'
Properties, Methods
CVMdl は RegressionPartitionedLinear モデルです。これには 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 つなので、yHatTrain と yHatTest は数値ベクトルになります。
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);~ の範囲で対数間隔で配置された 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
CVMdl は RegressionPartitionedLinear モデルです。fitrlinear は 5 分割の交差検証を実装するので、各分割について学習させる 5 つの RegressionLinear モデルが CVMdl に格納されます。
1 番目の学習済み線形回帰モデルを表示します。
Mdl1 = CVMdl.Trained{1}Mdl1 =
RegressionLinear
ResponseName: 'Y'
ResponseTransform: 'none'
Beta: [1000×15 double]
Bias: [-0.0049 -0.0049 -0.0049 -0.0049 -0.0049 -0.0048 -0.0044 -0.0037 -0.0030 -0.0031 -0.0033 -0.0036 -0.0041 -0.0051 -0.0071]
Lambda: [1.0000e-05 1.9307e-05 3.7276e-05 7.1969e-05 1.3895e-04 2.6827e-04 5.1795e-04 1.0000e-03 0.0019 0.0037 0.0072 0.0139 0.0268 0.0518 0.1000]
Learner: 'leastsquares'
Properties, Methods
Mdl1 は RegressionLinear モデル オブジェクトです。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: [1000×1 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');
代替機能
Simulink ブロック
Simulink® に線形回帰モデルの予測を統合するには、Statistics and Machine Learning Toolbox™ ライブラリにある RegressionLinear Predict ブロックを使用するか、MATLAB® Function ブロックを関数 predict と共に使用します。例については、RegressionLinear Predict ブロックの使用による応答の予測とMATLAB Function ブロックの使用によるクラス ラベルの予測を参照してください。
使用するアプローチを判断する際は、以下を考慮してください。
Statistics and Machine Learning Toolbox ライブラリ ブロックを使用する場合、固定小数点ツール (Fixed-Point Designer)を使用して浮動小数点モデルを固定小数点に変換できます。
MATLAB Function ブロックを関数
predictと共に使用する場合は、可変サイズの配列に対するサポートを有効にしなければなりません。MATLAB Function ブロックを使用する場合、予測の前処理や後処理のために、同じ MATLAB Function ブロック内で MATLAB 関数を使用することができます。
拡張機能
predict 関数は、tall 配列を次の使用上の注意事項および制限事項付きでサポートします。
predictは talltableデータをサポートしていません。
詳細は、tall 配列を参照してください。
使用上の注意および制限:
コーダー コンフィギュアラーを使用して、
predictとupdateの両方について C/C++ コードを生成できます。または、saveLearnerForCoder、loadLearnerForCoder、およびcodegenを使用してpredictのコードのみを生成します。predictとupdateに対するコード生成 —learnerCoderConfigurerを使用してコーダー コンフィギュアラーを作成してから、generateCodeを使用してコードを生成します。これにより、生成されたコードのモデル パラメーターは、コードの再生成を必要としない更新が可能になります。predictのコード生成 —saveLearnerForCoderを使用して、学習済みモデルを保存します。loadLearnerForCoderを使用して保存済みモデルを読み込んで関数predictを呼び出す、エントリポイント関数を定義します。次に、codegen(MATLAB Coder) を使用して、エントリポイント関数のコードを生成します。
predictの単精度の C/C++ コードを生成するには、loadLearnerForCoder関数を呼び出すときにDataType="single"を指定します。次の表は、
predictの引数に関する注意です。この表に含まれていない引数は、完全にサポートされています。引数 注意と制限 Mdlモデル オブジェクトの使用上の注意および制限については、
RegressionLinearオブジェクトのコード生成を参照してください。X一般的なコード生成の場合、
Xは、単精度または倍精度の行列か、数値変数、カテゴリカル変数、またはその両方を含む table でなければなりません。コーダー コンフィギュアラー ワークフローでは、
Xは単精度または倍精度の行列でなければなりません。Xの観測値の数は可変サイズにすることができますが、Xの変数の数は固定でなければなりません。Xを table として指定する場合、モデルは table を使用して学習させたものでなければならず、かつ予測のためのエントリポイント関数で次を行う必要があります。データを配列として受け入れる。
データ入力の引数から table を作成し、その table 内で変数名を指定する。
table を
predictに渡す。
この table のワークフローの例については、table のデータを分類するためのコードの生成を参照してください。コード生成における table の使用の詳細については、table のコード生成 (MATLAB Coder)およびコード生成における table の制限事項 (MATLAB Coder)を参照してください。
名前と値の引数 名前と値の引数に含まれる名前はコンパイル時の定数でなければなりません。
ObservationsInの値はコンパイル時の定数でなければなりません。たとえば、生成されたコードで"ObservationsIn","columns"を使用するには、{coder.Constant("ObservationsIn"),coder.Constant("columns")}をcodegen(MATLAB Coder) の-argsの値に含めます。PredictionForMissingValueの値が非数値の場合、コンパイル時の定数でなければなりません。
詳細は、コード生成の紹介を参照してください。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入R2024a 以降では、predict で GPU 配列の入力引数が受け入れられますが、いくつかの制限があります。
R2023b 以降で損失を予測または計算する際、一部の回帰モデルでは、予測子に欠損値がある観測値について予測した応答値を指定できます。名前と値の引数 PredictionForMissingValue を指定して、予測値として数値スカラー、学習セットの中央値、または学習セットの平均値を使用します。損失を計算するときに、予測子に欠損値がある観測値を省略するように指定することもできます。
次の表は、名前と値の引数 PredictionForMissingValue をサポートするオブジェクト関数の一覧です。既定では、これらの関数は、予測子に欠損値がある観測値について予測した応答値として、学習セットの中央値を使用します。
| モデル タイプ | モデル オブジェクト | オブジェクト関数 |
|---|---|---|
| ガウス過程回帰 (GPR) モデル | RegressionGP, CompactRegressionGP | loss, predict, resubLoss, resubPredict |
RegressionPartitionedGP | kfoldLoss, kfoldPredict | |
| ガウス カーネル回帰モデル | RegressionKernel | loss, predict |
RegressionPartitionedKernel | kfoldLoss, kfoldPredict | |
| 線形回帰モデル | RegressionLinear | loss, predict |
RegressionPartitionedLinear | kfoldLoss, kfoldPredict | |
| ニューラル ネットワーク回帰モデル | RegressionNeuralNetwork, CompactRegressionNeuralNetwork | loss, predict, resubLoss, resubPredict |
RegressionPartitionedNeuralNetwork | kfoldLoss, kfoldPredict | |
| サポート ベクター マシン (SVM) 回帰モデル | RegressionSVM, CompactRegressionSVM | loss, predict, resubLoss, resubPredict |
RegressionPartitionedSVM | kfoldLoss, kfoldPredict |
以前のリリースでは、上記の回帰モデル関数 loss および predict は、予測子に欠損値がある観測値について予測した応答値として NaN を使用していました。予測子に欠損値がある観測値は、予測と損失の再代入 ("resub") と交差検証 ("kfold") の計算で省略されていました。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)