RegressionPartitionedLinear
パッケージ:classreg.learning.partition
スーパークラス:RegressionPartitionedModel
高次元データ用の交差検証済み線形回帰モデル
説明
RegressionPartitionedLinear
は、交差検証分割で学習を行った一連の線形回帰モデルです。交差検証済みの線形回帰モデルを取得するには、fitrlinear
を使用して交差検証オプションのいずれかを指定します。モデルの予測品質や、線形回帰モデルがどの程度一般化を行うかは、kfold メソッドkfoldPredict
およびkfoldLoss
を 1 つ以上使用して評価できます。
すべての "kfold" メソッドでは、学習用データの観測値で学習したモデルを使用して、学習用データにはない観測値に対する応答を予測します。たとえば、データを 5 つに分割して交差検証を行うとします。この場合、各観測値は 5 つのほぼ等しいサイズのグループに無作為に割り当てられます。"学習用分割"にはグループのうち 4 つ (すなわち、データの約 4/5) が含まれ、"検定用分割"には残りのグループ (すなわち、データの約 1/5) が含まれます。この場合、交差検証は次のように処理されます。
CVMdl.Trained{1}
に保存されている最初のモデルは、後の 4 グループの観測値によって学習され、最初のグループの観測値を検証用に保存します。1 番目のグループと最後の 3 つのグループの観測値を使用して 2 番目のモデル (
CVMdl.Trained{2}
に格納)に学習させます。2番目のグループの観測値は,検証用に予約されます。3 ~ 5 番目のモデルについて同様の処理が行われます。
kfoldPredict
を呼び出して検証する場合、最初のモデルを使用してグループ 1 の観測に対する予測が計算され、2 番目のモデルにはグループ 2 が計算され、以降同様です。つまり、それぞれの観測値に対する応答は、その観測値ではなく学習したモデルによって推定されます。
メモ
他の交差検証済み回帰モデルと異なり、RegressionPartitionedLinear
モデル オブジェクトに予測子データセットは格納されません。
構築
CVMdl = fitrlinear(X,Y,Name,Value)
は、Name
が'CrossVal'
、'CVPartition'
、'Holdout'
、'KFold'
のいずれかである場合に、交差検証済みの線形回帰モデルを作成します。詳細は、fitrlinear
を参照してください。
プロパティ
CrossValidatedModel
—交差検証されたモデル名
文字ベクトル
交差検証済みモデルの名前。文字ベクトルを指定します。
たとえば、'Linear'
はバイナリ分類または回帰について交差検証済みの線形モデルを指定します。
データ型:char
KFold
—交差検証された分割の数
正の整数
交差検証された分割の数。正の整数で指定します。
データ型:double
ModelParameters
—交差検証パラメーター値
オブジェクト
交差検証のパラメーター値 (線形モデルの交差検証に使用する名前と値のペアの引数など)。オブジェクトを指定します。推定したパラメーターはModelParameters
に格納されません。
ModelParameters
のプロパティにはドット表記でアクセスします。
NumObservations
—観測値の数
正の数値スカラー
学習データに含まれている観測値の数。正の数値スカラーを指定します。
データ型:double
Partition
—データ分割
cvpartition
モデル
データを交差検証分割に分割する方法を含むデータ分割。cvpartition
モデルとして指定します。
Trained
—交差検証分割で学習を行った線形回帰モデル
RegressionLinear
モデル オブジェクトの cell 配列
交差検証分割で学習を行った線形回帰モデル。RegressionLinear
モデルの cell 配列として指定します。Trained
には k 個のセルがあります。k は分割数です。
データ型:cell
W
—観測値の重み
数値ベクトル
モデルの交差検証に使用した観測値の重み。数値ベクトルを指定します。W
にはNumObservations
個の要素があります。
学習に使用する重みは正規化されsum(W,'omitnan')
は1
になります。
データ型:single
|double
Y
—観測応答
数値ベクトル
モデルの交差検証に使用する観測応答。NumObservations
個の要素が格納されている数値ベクトルを指定します。
Y
の各行は、予測子データ内の対応する観測値の観測応答を表します。
データ型:single
|double
CategoricalPredictors
—カテゴリカル予測子のインデックス
正の整数のベクトル|[]
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
データ型:single
|double
PredictorNames
—予測子名
文字ベクトルの cell 配列
予測子データに現れる順序で並んでいる予測子名。文字ベクトルの cell 配列として指定します。PredictorNames
の長さは、予測子変数として使用される学習データX
またはTbl
に含まれている変数の数と等しくなります。
データ型:cell
ResponseName
—応答変数名
文字ベクトル
応答変数名。文字ベクトルを指定します。
データ型:char
ResponseTransform
—応答変換関数
'none'
|関数ハンドル
応答変換関数。'none'
または関数ハンドルを指定します。ResponseTransform
は、生の応答値を変換する方法を表します。
MATLAB®関数やユーザー定義関数の場合は、関数ハンドルを入力します。たとえば、Mdl.ResponseTransform = @function
を入力できます。ここでfunction
は、元の応答の数値ベクトルを受け入れ、変換した応答が格納されている同じサイズの数値ベクトルを返します。
データ型:char
|function_handle
メソッド
kfoldLoss | 学習で使用しない観測値の回帰損失 |
kfoldPredict | 学習で使用しない観測の予測応答 |
コピーのセマンティクス
値。値のクラスがコピー操作に与える影響については、オブジェクトのコピーを参照してください。
例
交差検証済みの線形回帰モデルの作成
次のモデルにより、10000 個の観測値をシミュレートします。
は、10% の要素が非ゼロ標準正規である 10000 行 1000 列のスパース行列です。
eは、平均が 0、標準偏差が 0.3 のランダムな正規誤差です。
rng(1)% For reproducibilityn = 1e4; d = 1e3; nz = 0.1; X = sprandn(n,d,nz); Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);
線形回帰モデルを交差検証します。実行速度を向上させるため、予測子データを転置し、観測値が列単位であることを指定します。
X = X'; CVMdl = fitrlinear(X,Y,'CrossVal','on','ObservationsIn','columns');
CVMdl
は、RegressionPartitionedLinear
交差検証済みモデルです。既定の設定ではfitrlinear
は 10 分割の交差検証を実装するので、CVMdl.Trained
には 10 個のRegressionLinear
モデルの cell ベクトルが格納されます。各セルには、9 つの分割で学習を行い残りの分割で検定を行った線形回帰モデルが格納されます。
CVMdl
をkfoldPredict
に渡して分割外観測値の応答を予測し、kfoldLoss
に渡して汎化誤差を推定します。
oofYHat = kfoldPredict(CVMdl); ge = kfoldLoss(CVMdl)
ge = 0.1748
推定された汎化平均二乗誤差は 0.1748 です。
交差検証の使用による適切な拉斯维加斯SO ペナルティの特定
最小二乗を使用する線形回帰モデルに適した LASSO ペナルティの強度を決定するため、5 分割の交差検証を実装します。
次のモデルにより、10000 個の観測値をシミュレートします。
は、10% の要素が非ゼロ標準正規である 10000 行 1000 列のスパース行列です。
eは、平均が 0、標準偏差が 0.3 のランダムな正規誤差です。
rng(1)% For reproducibilityn = 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 ... ] Lambda: [1.0000e-05 1.9307e-05 3.7276e-05 7.1969e-05 ... ] Learner: 'leastsquares' Properties, Methods
Mdl1
はRegressionLinear
モデル オブジェクトです。fitrlinear
は最初の 4 つの分割に対して学習を行うことによりMdl1
を構築しました。Lambda
は正則化強度のシーケンスなので、Mdl1
はそれぞれがLambda
の各正則化強度に対応する 15 個のモデルであると考えることができます。
交差検証された 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') holdoff
予測子変数のスパース性と 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×1100 200
EstCoeff = Mdl.Beta(idxNZCoeff)
EstCoeff =2×11.0051 1.9965
MdlFinal
は1つの正則化強度があるRegressionLinear
モデルです。非ゼロ係数EstCoeff
は、データをシミュレートした係数に近くなっています。
バージョン履歴
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)