このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
predict
クラス: RegressionLinear
線形回帰モデルの応答予測
説明
入力引数
Mdl
— 線形回帰モデル
RegressionLinear
モデル オブジェクト
線形回帰モデル。RegressionLinear
モデル オブジェクトとして指定します。RegressionLinear
モデル オブジェクトは、fitrlinear
を使用して作成できます。
X
— 応答の生成に使用する予測子データ。
非スパースの数値行列 | スパースの数値行列 | テーブル
応答の生成に使用する予測子データ。非スパースまたはスパースの数値行列またはテーブルとして指定します。
既定では、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
の列の順序に対応する必要はありません。また、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")
は、予測子データの列が観測値に対応することを示します。
ObservationsIn
— 予測子データにおける観測値の次元
"rows"
(既定値) | "columns"
予測子データにおける観測値の次元。"columns"
または "rows"
として指定します。
メモ
観測値が列に対応するように予測子行列を配置して "ObservationsIn","columns"
を指定すると、最適化実行時間が大幅に短縮される可能性があります。table の予測子データに対して "ObservationsIn","columns"
を指定することはできません。
データ型: char
| string
PredictionForMissingValue
— 予測子に欠損値がある観測値に使用する予測した応答値
"median"
(既定値) | "mean"
| 数値スカラー
R2023b 以降
予測子に欠損値がある観測値に使用する予測した応答値。"median"
、"mean"
、または数値スカラーとして指定します。
値 | 説明 |
---|---|
"median" | predict は、予測子に欠損値がある観測値について予測した応答値として、学習データ内の観測された応答値の中央値を使用します。 |
"mean" | predict は、予測子に欠損値がある観測値について予測した応答値として、学習データ内の観測された応答値の平均値を使用します。 |
数値スカラー | predict は、予測子に欠損値がある観測値について予測した応答値として、この値を使用します。 |
例: "PredictionForMissingValue","mean"
例: "PredictionForMissingValue",NaN
データ型: single
| double
| char
| string
出力引数
YHat
— 予測応答
数値行列
予測応答。n 行 L 列の数値行列として返されます。n は X
内の観測値数、L は Mdl.Lambda
内の正則化強度の数です。YHat(
は、正則化強度が i
,j
)Mdl.Lambda(
である線形回帰モデルを使用した、観測値 j
)i
の応答です。
正則化強度が j であるモデルを使用して予測された応答は以下です。
x は予測子データ行列
X
の観測値であり、行列ベクトルです。は推定された係数の列ベクトルです。このベクトルは
Mdl.Beta(:,
に格納されます。j
)は推定されたスカラー バイアスであり、
Mdl.Bias(
に格納されます。j
)
例
検定標本の応答の予測
次のモデルにより、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: [1000x1 double] Bias: -0.0066 Lambda: 1.4286e-04 Learner: 'svm'
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: [1000x15 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'
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: [1000x1 double] Bias: -0.0050 Lambda: 0.0037 Learner: 'leastsquares'
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 関数を使用することができます。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
コーダー コンフィギュアラーを使用して、
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 のコード生成 (MATLAB Coder)およびコード生成における table の制限事項 (MATLAB Coder)を参照してください。
名前と値の引数 名前と値の引数に含まれる名前はコンパイル時の定数でなければなりません。
ObservationsIn
の値はコンパイル時の定数でなければなりません。たとえば、生成されたコードで"ObservationsIn","columns"
を使用するには、{coder.Constant("ObservationsIn"),coder.Constant("columns")}
をcodegen
(MATLAB Coder) の-args
の値に含めます。PredictionForMissingValue
の値が非数値の場合、コンパイル時の定数でなければなりません。
詳細は、コード生成の紹介を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入R2024a: GPU 配列のサポート
R2024a 以降では、predict
で GPU 配列の入力引数が受け入れられますが、いくつかの制限があります。
R2023b: 予測子に欠損値がある観測値に使用する予測した応答値の指定
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 コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)