線形回帰モデルの学習
Statistics and Machine Learning Toolbox™ には、線形回帰モデルに学習させるための機能がいくつか用意されています。
低~中次元のデータ セットで精度を向上させるには、
fitlm
を使用します。モデルを当てはめた後、オブジェクト関数を使用して当てはめたモデルを改善、評価、および可視化できます。回帰を正則化するには、lasso
またはridge
を使用します。高次元データ セットで計算時間を短縮するには、
fitrlinear
を使用します。この関数には、交差検証、正則化、ハイパーパラメーターの最適化に役立つオプションがあります。
この例では、fitlm
を使用した線形回帰解析の典型的なワークフローを示します。このワークフローには、データ セットの準備、線形回帰モデルの当てはめ、当てはめたモデルの評価と改善、新しい予測子データの応答値の予測が含まれます。この例では、tall 配列で線形回帰モデルの当てはめと評価を行う方法も説明します。
データの準備
標本データ セット NYCHousing2015
を読み込みます。
load NYCHousing2015
データ セットには、2015 年のニューヨーク市における不動産の売上に関する情報を持つ 10 の変数が含まれます。この例では、これらの変数の一部を使用して売価を解析します。
標本データ セット NYCHousing2015
を読み込む代わりに、NYC Open Data Web サイトからデータをダウンロードして、次の方法でインポートすることができます。
folder = 'Annualized_Rolling_Sales_Update'; ds = spreadsheetDatastore(folder,"TextType","string","NumHeaderLines",4); ds.Files = ds.Files(contains(ds.Files,"2015")); ds.SelectedVariableNames = ["BOROUGH","NEIGHBORHOOD","BUILDINGCLASSCATEGORY","RESIDENTIALUNITS", ... "COMMERCIALUNITS","LANDSQUAREFEET","GROSSSQUAREFEET","YEARBUILT","SALEPRICE","SALEDATE"]; NYCHousing2015 = readall(ds);
データ セットを前処理して、対象の予測子変数を選択します。まず、可読性を高めるため、変数名を小文字に変更します。
NYCHousing2015.Properties.VariableNames = lower(NYCHousing2015.Properties.VariableNames);
次に、datetime
配列として指定された変数 saledate
を、MM
(月) と DD
(日) の 2 つの数値列に変換し、変数 saledate
を削除します。すべて 2015 年の標本のため、年は無視します。
[~,NYCHousing2015.MM,NYCHousing2015.DD] = ymd(NYCHousing2015.saledate); NYCHousing2015.saledate = [];
変数 borough
の数値は区の名前を示します。この変数を名前を使用したカテゴリカル変数に変更します。
NYCHousing2015.borough = categorical(NYCHousing2015.borough,1:5, ... ["Manhattan","Bronx","Brooklyn","Queens","Staten Island"]);
変数 neighborhood
には 254 のカテゴリがあります。簡単にするため、この変数は削除します。
NYCHousing2015.neighborhood = [];
変数 buildingclasscategory
をカテゴリカル変数に変換し、関数wordcloud
を使用して変数を確認します。
NYCHousing2015.buildingclasscategory = categorical(NYCHousing2015.buildingclasscategory); wordcloud(NYCHousing2015.buildingclasscategory);
1 戸建て住宅、2 戸建て住宅、3 戸建て住宅のみに興味があると仮定します。これらの住宅の標本インデックスを見つけ、それ以外の標本を削除します。次に、変数 buildingclasscategory
のデータ型を double
に変更します。
idx = ismember(string(NYCHousing2015.buildingclasscategory), ... ["01 ONE FAMILY DWELLINGS","02 TWO FAMILY DWELLINGS","03 THREE FAMILY DWELLINGS"]); NYCHousing2015 = NYCHousing2015(idx,:); NYCHousing2015.buildingclasscategory = renamecats(NYCHousing2015.buildingclasscategory, ... ["01 ONE FAMILY DWELLINGS","02 TWO FAMILY DWELLINGS","03 THREE FAMILY DWELLINGS"], ... ["1","2","3"]); NYCHousing2015.buildingclasscategory = double(NYCHousing2015.buildingclasscategory);
すると、変数 buildingclasscategory
は、1 つの住宅に住む家族の数を示します。
関数 summary
を使用して、応答変数 saleprice
を確認します。
s = summary(NYCHousing2015); s.saleprice
ans = struct with fields:
Size: [37881 1]
Type: 'double'
Description: ''
Units: ''
Continuity: []
Min: 0
Median: 352000
Max: 37000000
NumMissing: 0
1000 ドル以下の saleprice
は、現金対価なしの所有権移転を示すものと仮定します。このような saleprice
をもつ標本を削除します。
idx0 = NYCHousing2015.saleprice <= 1000; NYCHousing2015(idx0,:) = [];
変数 saleprice
のヒストグラムを作成します。
histogram(NYCHousing2015.saleprice)
saleprice
の最大値は ですが、値の大半は より小さくなります。saleprice
の外れ値を特定するには、関数isoutlier
を使用します。
idx = isoutlier(NYCHousing2015.saleprice);
特定された外れ値を削除し、もう一度ヒストグラムを作成します。
NYCHousing2015(idx,:) = []; histogram(NYCHousing2015.saleprice)
cvpartition
を使用してデータ セットを学習セットとテスト セットに分割します。
rng('default') % For reproducibility c = cvpartition(height(NYCHousing2015),"holdout",0.3); trainData = NYCHousing2015(training(c),:); testData = NYCHousing2015(test(c),:);
モデルの学習
関数fitlm
を使用して線形回帰モデルを当てはめます。
mdl = fitlm(trainData,"PredictorVars",["borough","grosssquarefeet", ... "landsquarefeet","buildingclasscategory","yearbuilt","MM","DD"], ... "ResponseVar","saleprice")
mdl = Linear regression model: saleprice ~ 1 + borough + buildingclasscategory + landsquarefeet + grosssquarefeet + yearbuilt + MM + DD Estimated Coefficients: Estimate SE tStat pValue ___________ __________ ________ ___________ (Intercept) 2.0345e+05 1.0308e+05 1.9736 0.048441 borough_Bronx -3.0165e+05 56676 -5.3224 1.0378e-07 borough_Brooklyn -41160 56490 -0.72862 0.46624 borough_Queens -91136 56537 -1.612 0.10699 borough_Staten Island -2.2199e+05 56726 -3.9134 9.1385e-05 buildingclasscategory 3165.7 3510.3 0.90185 0.36715 landsquarefeet 13.149 0.84534 15.555 3.714e-54 grosssquarefeet 112.34 2.9494 38.09 8.0393e-304 yearbuilt 100.07 45.464 2.201 0.02775 MM 3850.5 543.79 7.0808 1.4936e-12 DD -367.19 207.56 -1.7691 0.076896 Number of observations: 15848, Error degrees of freedom: 15837 Root Mean Squared Error: 2.32e+05 R-squared: 0.235, Adjusted R-Squared: 0.235 F-statistic vs. constant model: 487, p-value = 0
mdl
は、LinearModel
オブジェクトです。モデルの表示には、モデル式、推定された係数、および要約統計量が含まれています。
borough
は、Manhattan
、Bronx
、Brooklyn
、Queens
、Staten Island
の 5 つのカテゴリをもつカテゴリカル変数です。当てはめたモデル mdl
は 4 つの指標変数をもちます。関数 fitlm
は 1 番目のカテゴリ Manhattan
を基準水準として使用するため、モデルには基準水準に対する指標変数は含まれません。fitlm
は、基準水準の指標変数の係数を 0 に固定します。4 つの指標変数の係数値は Manhattan
を基準にします。関数がカテゴリカル予測子を扱う方法の詳細については、fitlm
のアルゴリズムを参照してください。
モデル表示の値を解釈する方法については、線形回帰の結果の解釈を参照してください。
当てはめた線形回帰モデルを調べるには、LinearModel
オブジェクトのプロパティを使用できます。オブジェクト プロパティには、係数推定値、要約統計量、近似法および入力データに関する情報が含まれています。たとえば、Rsquared
プロパティの決定係数と自由度調整済み決定係数の値を確認できます。プロパティの値には、ワークスペース ブラウザー経由またはドット表記を使用してアクセスできます。
mdl.Rsquared
ans = struct with fields:
Ordinary: 0.2352
Adjusted: 0.2348
モデル表示にはこれらの値も表示されます。決定係数の値は、応答変数のばらつきの約 24% をこのモデルで説明できることを示しています。その他のプロパティの詳細については、LinearModel
オブジェクトのプロパティを参照してください。
モデルの評価
モデル表示には、各係数の p 値が表示されます。p 値は、モデルに有意な変数がどれであるかを示します。カテゴリカル予測子 borough
について、モデルでは 4 つの指標変数が使用され、4 つの p 値が表示されます。カテゴリカル変数を指標変数のグループとして調べるには、オブジェクト関数anova
を使用します。この関数は、モデルの分散分析 (ANOVA) 統計量を返します。
anova(mdl)
ans=8×5 table
SumSq DF MeanSq F pValue
__________ _____ __________ _______ ___________
borough 1.123e+14 4 2.8076e+13 520.96 0
buildingclasscategory 4.3833e+10 1 4.3833e+10 0.81334 0.36715
landsquarefeet 1.3039e+13 1 1.3039e+13 241.95 3.714e-54
grosssquarefeet 7.8189e+13 1 7.8189e+13 1450.8 8.0393e-304
yearbuilt 2.6108e+11 1 2.6108e+11 4.8444 0.02775
MM 2.7021e+12 1 2.7021e+12 50.138 1.4936e-12
DD 1.6867e+11 1 1.6867e+11 3.1297 0.076896
Error 8.535e+14 15837 5.3893e+10
指標変数 borough_Brooklyn
と borough_Queens
の p 値は大きいですが、4 つの指標変数のグループとしての変数 borough
の p 値はほぼ 0 です。これは、変数 borough
が統計的に有意であることを示しています。
buildingclasscategory
と DD
の p 値は 0.05 より大きい値です。これは、5% の有意水準ではこれらの変数が有意ではないことを示しています。そのため、これらの変数は削除することを検討できます。
また、coeffCI
、coeefTest
、dwTest
を使用して、当てはめたモデルをさらに詳しく調べることもできます。
モデルと要約統計量の可視化
LinearModel
オブジェクトには、複数のプロット関数が用意されています。
モデルを作成するときに、予測子変数の追加または削除による効果を理解するには、
plotAdded
を使用します。モデルを検証するときに、問題があるデータを探し、各観測値の効果を理解するには、
plotDiagnostics
を使用します。また、モデルの残差を分析するには、plotResiduals
を使用します。モデルを当てはめた後で、特定の予測子の効果を理解するには、
plotAdjustedResponse
、plotPartialDependence
およびplotEffects
を使用します。2 つの予測子の間の交互作用効果を調べるには、plotInteraction
を使用します。また、予測曲面を通るスライスをプロットするには、plotSlice
を使用します。
また、mdl
に複数の予測子変数が含まれている場合、plot
は全体から切片項を除外したモデルに対する追加変数プロットを作成します。
plot(mdl)
このプロットは plotAdded(mdl)
と等価です。近似直線は、変数のグループとしてのモデルが応答変数をどのように説明できるかを表します。近似直線の勾配は 0 に近くなく、信頼限界に水平線が含まれていません。これは、このモデルの当てはまりが定数項のみから構成される縮退したモデルよりも良いことを示しています。モデル表示が示す検定統計値 (F-statistic vs. constant model
) も、このモデルの当てはまりが縮退したモデルよりも良いことを示しています。
有意でない変数 buildingclasscategory
および DD
について、追加変数プロットを作成します。これらの変数の p 値は、0.05 より大きい値です。まず、mdl.CoefficientNames
でこれらの係数のインデックスを見つけます。
mdl.CoefficientNames
ans = 1×11 cell
{'(Intercept)'} {'borough_Bronx'} {'borough_Brooklyn'} {'borough_Queens'} {'borough_Staten Island'} {'buildingclasscategory'} {'landsquarefeet'} {'grosssquarefeet'} {'yearbuilt'} {'MM'} {'DD'}
buildingclasscategory
は 6 番目の係数、DD
は 11 番目の係数です。この 2 つの変数について追加プロットを作成します。
plotAdded(mdl,[6,11])
近似直線の勾配は 0 に近くなっています。これは、2 つの変数からの情報では、他の予測子によって説明されない応答値の部分を説明できないことを示しています。追加変数プロットの詳細については、追加変数プロットを参照してください。
モデルの残差のヒストグラムを作成します。plotResiduals
は、確率密度関数のスケールを使用して、生の残差のヒストグラムをプロットします。
plotResiduals(mdl)
このヒストグラムから、いくつかの残差が より小さいことが分かります。これらの外れ値を特定します。
find(mdl.Residuals.Raw < -1*10^6)
ans = 4×1
1327
4136
4997
13894
または、isoutlier
を使用して外れ値を求めることができます。'grubbs'
オプションを指定して、グラブス検定を適用します。このオプションは正規分布のデータ セットに適しています。
find(isoutlier(mdl.Residuals.Raw,'grubbs'))
ans = 3×1
1327
4136
4997
関数 isoutlier
は残差 13894
を外れ値として識別しません。この残差は –110 に近い値です。残差の値を表示します。
mdl.Residuals.Raw(13894)
ans = -1.0720e+06
線形回帰モデルを当てはめるとき、名前と値のペアの引数Excludeを使用して外れ値を除外できます。この例では、当てはめたモデルが調整され、改善されたモデルでも外れ値が説明できるかチェックされます。
モデルの調整
removeTerms
を使用して、変数 DD
および buildingclasscategory
を削除します。
newMdl1 = removeTerms(mdl,"DD + buildingclasscategory")
newMdl1 = Linear regression model: saleprice ~ 1 + borough + landsquarefeet + grosssquarefeet + yearbuilt + MM Estimated Coefficients: Estimate SE tStat pValue ___________ __________ ________ __________ (Intercept) 2.0529e+05 1.0274e+05 1.9981 0.045726 borough_Bronx -3.0038e+05 56675 -5.3 1.1739e-07 borough_Brooklyn -39704 56488 -0.70286 0.48215 borough_Queens -90231 56537 -1.596 0.11052 borough_Staten Island -2.2149e+05 56720 -3.9049 9.4652e-05 landsquarefeet 13.04 0.83912 15.54 4.6278e-54 grosssquarefeet 113.85 2.5078 45.396 0 yearbuilt 96.649 45.395 2.1291 0.033265 MM 3875.6 543.49 7.131 1.0396e-12 Number of observations: 15848, Error degrees of freedom: 15839 Root Mean Squared Error: 2.32e+05 R-squared: 0.235, Adjusted R-Squared: 0.235 F-statistic vs. constant model: 608, p-value = 0
この 2 つの変数は応答変数を説明するのに有意でないため、newMdl1
の決定係数と自由度調整済み決定係数の値は mdl
の値に近くなります。
step
を使用して変数を追加または削除してモデルを改善します。モデルの既定の上限は、切片項、各予測子の線形項、異なる予測子のペアのすべての積 (二乗項なし) を含むモデルで、既定の下限は切片項を含むモデルです。実行する最大ステップ数を 30 と指定します。どのステップでもモデルが改良されなくなると、この関数は停止します。
newMdl2 = step(newMdl1,'NSteps',30)
1. Adding borough:grosssquarefeet, FStat = 58.7413, pValue = 2.63078e-49 2. Adding borough:yearbuilt, FStat = 31.5067, pValue = 3.50645e-26 3. Adding borough:landsquarefeet, FStat = 29.5473, pValue = 1.60885e-24 4. Adding grosssquarefeet:yearbuilt, FStat = 69.312, pValue = 9.08599e-17 5. Adding landsquarefeet:grosssquarefeet, FStat = 33.2929, pValue = 8.07535e-09 6. Adding landsquarefeet:yearbuilt, FStat = 45.2756, pValue = 1.7704e-11 7. Adding yearbuilt:MM, FStat = 18.0785, pValue = 2.13196e-05 8. Adding residentialunits, FStat = 16.0491, pValue = 6.20026e-05 9. Adding residentialunits:landsquarefeet, FStat = 160.2601, pValue = 1.49309e-36 10. Adding residentialunits:grosssquarefeet, FStat = 27.351, pValue = 1.71835e-07 11. Adding commercialunits, FStat = 14.1503, pValue = 0.000169381 12. Adding commercialunits:grosssquarefeet, FStat = 25.6942, pValue = 4.04549e-07 13. Adding borough:commercialunits, FStat = 6.1327, pValue = 6.3015e-05 14. Adding buildingclasscategory, FStat = 11.1412, pValue = 0.00084624 15. Adding buildingclasscategory:landsquarefeet, FStat = 66.9205, pValue = 3.04003e-16 16. Adding buildingclasscategory:yearbuilt, FStat = 15.0776, pValue = 0.0001036 17. Adding buildingclasscategory:grosssquarefeet, FStat = 18.3304, pValue = 1.86812e-05 18. Adding residentialunits:yearbuilt, FStat = 15.0732, pValue = 0.00010384 19. Adding buildingclasscategory:residentialunits, FStat = 13.5644, pValue = 0.00023129 20. Adding borough:buildingclasscategory, FStat = 2.8214, pValue = 0.023567 21. Adding landsquarefeet:MM, FStat = 4.9185, pValue = 0.026585 22. Removing grosssquarefeet:yearbuilt, FStat = 1.6052, pValue = 0.20519
newMdl2 = Linear regression model: saleprice ~ 1 + borough*buildingclasscategory + borough*commercialunits + borough*landsquarefeet + borough*grosssquarefeet + borough*yearbuilt + buildingclasscategory*residentialunits + buildingclasscategory*landsquarefeet + buildingclasscategory*grosssquarefeet + buildingclasscategory*yearbuilt + residentialunits*landsquarefeet + residentialunits*grosssquarefeet + residentialunits*yearbuilt + commercialunits*grosssquarefeet + landsquarefeet*grosssquarefeet + landsquarefeet*yearbuilt + landsquarefeet*MM + yearbuilt*MM Estimated Coefficients: Estimate SE tStat pValue ___________ __________ ________ __________ (Intercept) 2.2152e+07 1.318e+07 1.6808 0.092825 borough_Bronx -2.3263e+07 1.3176e+07 -1.7656 0.077486 borough_Brooklyn -1.8935e+07 1.3174e+07 -1.4373 0.15064 borough_Queens -2.1757e+07 1.3173e+07 -1.6516 0.098636 borough_Staten Island -2.3471e+07 1.3177e+07 -1.7813 0.074891 buildingclasscategory -7.2403e+05 1.9374e+05 -3.737 0.00018685 residentialunits 6.1912e+05 1.2399e+05 4.9932 6.003e-07 commercialunits 4.2016e+05 1.2815e+05 3.2786 0.0010456 landsquarefeet -390.54 96.349 -4.0535 5.0709e-05 grosssquarefeet 189.33 83.723 2.2614 0.023748 yearbuilt -11556 6958.7 -1.6606 0.096805 MM 95189 31787 2.9946 0.0027521 borough_Bronx:buildingclasscategory -1.1972e+05 1.0481e+05 -1.1422 0.25338 borough_Brooklyn:buildingclasscategory -1.4154e+05 1.0448e+05 -1.3548 0.17551 borough_Queens:buildingclasscategory -1.1597e+05 1.0454e+05 -1.1093 0.2673 borough_Staten Island:buildingclasscategory -1.1851e+05 1.0513e+05 -1.1273 0.25964 borough_Bronx:commercialunits -2.7488e+05 1.3267e+05 -2.0719 0.038293 borough_Brooklyn:commercialunits -3.8228e+05 1.2835e+05 -2.9784 0.0029015 borough_Queens:commercialunits -3.9818e+05 1.2884e+05 -3.0906 0.0020008 borough_Staten Island:commercialunits -4.9381e+05 1.353e+05 -3.6496 0.00026348 borough_Bronx:landsquarefeet 121.81 77.442 1.573 0.11574 borough_Brooklyn:landsquarefeet 113.09 77.413 1.4609 0.14405 borough_Queens:landsquarefeet 99.894 77.374 1.2911 0.1967 borough_Staten Island:landsquarefeet 84.508 77.376 1.0922 0.27477 borough_Bronx:grosssquarefeet -55.417 83.412 -0.66437 0.50646 borough_Brooklyn:grosssquarefeet 6.4033 83.031 0.077119 0.93853 borough_Queens:grosssquarefeet 38.28 83.144 0.46041 0.64523 borough_Staten Island:grosssquarefeet 12.539 83.459 0.15024 0.88058 borough_Bronx:yearbuilt 12121 6956.8 1.7422 0.081485 borough_Brooklyn:yearbuilt 9986.5 6955.8 1.4357 0.1511 borough_Queens:yearbuilt 11382 6955.3 1.6364 0.10177 borough_Staten Island:yearbuilt 12237 6957.1 1.7589 0.078613 buildingclasscategory:residentialunits 21392 5465 3.9143 9.1041e-05 buildingclasscategory:landsquarefeet -13.099 2.0014 -6.545 6.1342e-11 buildingclasscategory:grosssquarefeet -30.087 5.2786 -5.6998 1.2209e-08 buildingclasscategory:yearbuilt 462.31 85.912 5.3813 7.5021e-08 residentialunits:landsquarefeet -1.0826 0.13896 -7.7911 7.0554e-15 residentialunits:grosssquarefeet -5.1192 1.7923 -2.8563 0.0042917 residentialunits:yearbuilt -326.69 63.556 -5.1403 2.7762e-07 commercialunits:grosssquarefeet -29.839 5.0231 -5.9403 2.9045e-09 landsquarefeet:grosssquarefeet -0.0055199 0.0010364 -5.3262 1.0165e-07 landsquarefeet:yearbuilt 0.1766 0.030902 5.7151 1.1164e-08 landsquarefeet:MM 0.6595 0.30229 2.1817 0.029145 yearbuilt:MM -47.944 16.392 -2.9248 0.0034512 Number of observations: 15848, Error degrees of freedom: 15804 Root Mean Squared Error: 2.25e+05 R-squared: 0.285, Adjusted R-Squared: 0.283 F-statistic vs. constant model: 146, p-value = 0
newMdl2
の決定係数と自由度調整済み決定係数の値は newMdl1
の値より大きくなります。
plotResiduals
を使用して、モデルの残差のヒストグラムを作成します。
plotResiduals(newMdl2)
newMdl2
の残差のヒストグラムは対称で、外れ値はありません。
addTerms
を使用して特定の項を追加することもできます。あるいは、stepwiselm
を使用して、開始モデルの項を指定し、ステップワイズ回帰を使用してモデルの改善を続けることもできます。
新しいデータへの応答の予測
当てはめたモデル newMdl2
とオブジェクト関数predict
を使用して、テスト データ セット testData
への応答を予測します。
ypred = predict(newMdl2,testData);
テスト データ セットの残差のヒストグラムをプロットします。
errs = ypred - testData.saleprice;
histogram(errs)
title("Histogram of residuals - test data")
残差の値にはいくつかの外れ値があります。
errs(isoutlier(errs,'grubbs'))
ans = 6×1
107 ×
0.1788
-0.4688
-1.2981
0.1019
0.1122
0.1331
tall 配列を使用した解析
関数 fitlm
は、メモリ超過のデータに対し tall 配列をサポートしますが、いくつかの制限があります。tall データの場合、fitlm
は LinearModel
オブジェクトと同じプロパティのほとんどが含まれているCompactLinearModel
オブジェクトを返します。主な違いは、コンパクトなオブジェクトがメモリ要件の影響を受けやすいということです。コンパクトなオブジェクトは、データ、またはデータと同じサイズの配列を含むプロパティを含みません。そのため、LinearModel
オブジェクトの一部の関数はコンパクトなモデルに対して機能しません。サポートされるオブジェクト関数のリストについては、オブジェクト関数を参照してください。また、tall 配列に関する fitlm
の使用上の注意および制限については、tall 配列を参照してください。
tall 配列に対する計算を実行する場合、MATLAB® は並列プール (Parallel Computing Toolbox™ がある場合は既定) またはローカルの MATLAB セッションを使用します。Parallel Computing Toolbox がある場合でもローカルの MATLAB セッションを使用して例を実行するには、関数mapreducer
を使用してグローバルな実行環境を変更できます。
データストア ds
のすべてのデータがメモリにおさまらないと仮定します。readall
の代わりにtall
を使用して ds
を読み取ることができます。
NYCHousing2015 = tall(ds);
この例では、関数 tall
を使用して、インメモリの table NYCHousing2015
を tall table に変換します。
NYCHousing2015_t = tall(NYCHousing2015);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
データ セットを学習セットとテスト セットに分割します。cvpartition
で tall 配列を使用する場合、関数は 1 番目の入力引数として指定された変数に基づいてデータ セットを分割します。分類問題では、通常、応答変数 (グループ化変数) を使用してランダムな層化区分を作成し、すべてのグループにわたり学習セットとテスト セットで均等に分布させます。回帰問題では、この階層化は適切ではないため、名前と値のペアの引数 'Stratify'
を使用してオプションをオフにできます。
この例では、予測子変数 NYCHousing2015_t.borough
を 1 番目の入力引数として指定し、区の分布を学習セットとテスト セットで大体同じにします。再現性を得るため、tallrng
を使用して乱数発生器のシードを設定します。tall 配列の場合、ワーカーの個数と実行環境によって結果が異なる可能性があります。詳細については、コードの実行場所の制御を参照してください。
tallrng('default') % For reproducibility c = cvpartition(NYCHousing2015_t.borough,"holdout",0.3); trainData_t = NYCHousing2015_t(training(c),:); testData_t = NYCHousing2015_t(test(c),:);
fitlm
は tall 配列にコンパクトなモデル オブジェクトを返すため、関数 step
を使用してモデルを改善することはできません。その代わりに、オブジェクト関数を使用してモデル パラメーターを調べ、その後で必要に応じてモデルを調整できます。また、データのサブセットをワークスペースに収集し、stepwiselm
を使用してメモリ内で反復的にモデルを開発し、その後で tall 配列を使用するように拡張することもできます。詳細については、tall 配列の使用によるビッグ データの統計および機械学習の「モデルの開発」を参照してください。
この例では、newMdl2
のモデル式を使用して線形回帰モデルを当てはめます。
mdl_t = fitlm(trainData_t,newMdl2.Formula)
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 1: Completed in 7.4 sec Evaluation completed in 9.2 sec
mdl_t = Compact linear regression model: saleprice ~ 1 + borough*buildingclasscategory + borough*commercialunits + borough*landsquarefeet + borough*grosssquarefeet + borough*yearbuilt + buildingclasscategory*residentialunits + buildingclasscategory*landsquarefeet + buildingclasscategory*grosssquarefeet + buildingclasscategory*yearbuilt + residentialunits*landsquarefeet + residentialunits*grosssquarefeet + residentialunits*yearbuilt + commercialunits*grosssquarefeet + landsquarefeet*grosssquarefeet + landsquarefeet*yearbuilt + landsquarefeet*MM + yearbuilt*MM Estimated Coefficients: Estimate SE tStat pValue ___________ __________ ________ __________ (Intercept) -1.3301e+06 5.1815e+05 -2.567 0.010268 borough_Brooklyn 4.2583e+06 4.1808e+05 10.185 2.7392e-24 borough_Manhattan 2.2758e+07 1.3448e+07 1.6923 0.090614 borough_Queens 1.1395e+06 4.1868e+05 2.7216 0.0065035 borough_Staten Island -1.1196e+05 4.6677e+05 -0.23986 0.81044 buildingclasscategory -8.08e+05 1.6219e+05 -4.9817 6.3705e-07 residentialunits 6.0588e+05 1.2669e+05 4.7822 1.7497e-06 commercialunits 80197 53311 1.5043 0.13252 landsquarefeet -279.94 53.913 -5.1925 2.1009e-07 grosssquarefeet 170.02 13.996 12.147 8.3837e-34 yearbuilt 683.49 268.34 2.5471 0.010872 MM 86488 32725 2.6428 0.0082293 borough_Brooklyn:buildingclasscategory -9852.4 12048 -0.81773 0.41352 borough_Manhattan:buildingclasscategory 1.3318e+05 1.3592e+05 0.97988 0.32716 borough_Queens:buildingclasscategory 15621 11671 1.3385 0.18076 borough_Staten Island:buildingclasscategory 15132 14893 1.016 0.30964 borough_Brooklyn:commercialunits -22060 43012 -0.51289 0.60804 borough_Manhattan:commercialunits 4.8349e+05 2.1757e+05 2.2222 0.026282 borough_Queens:commercialunits -42023 44736 -0.93936 0.34756 borough_Staten Island:commercialunits -1.3382e+05 56976 -2.3487 0.018853 borough_Brooklyn:landsquarefeet 9.8263 5.2513 1.8712 0.061335 borough_Manhattan:landsquarefeet -78.962 78.445 -1.0066 0.31415 borough_Queens:landsquarefeet -3.0855 3.9087 -0.78939 0.4299 borough_Staten Island:landsquarefeet -17.325 3.5831 -4.8351 1.3433e-06 borough_Brooklyn:grosssquarefeet 37.689 10.573 3.5646 0.00036548 borough_Manhattan:grosssquarefeet 16.107 82.074 0.19625 0.84442 borough_Queens:grosssquarefeet 70.381 10.69 6.5837 4.7343e-11 borough_Staten Island:grosssquarefeet 36.396 12.08 3.0129 0.0025914 borough_Brooklyn:yearbuilt -2110.1 216.32 -9.7546 2.0388e-22 borough_Manhattan:yearbuilt -11884 7023.9 -1.692 0.090667 borough_Queens:yearbuilt -566.44 216.89 -2.6116 0.0090204 borough_Staten Island:yearbuilt 53.714 239.89 0.22391 0.82283 buildingclasscategory:residentialunits 24088 5574 4.3215 1.5595e-05 buildingclasscategory:landsquarefeet 5.7964 5.8438 0.9919 0.32126 buildingclasscategory:grosssquarefeet -47.079 5.2884 -8.9023 6.0556e-19 buildingclasscategory:yearbuilt 430.97 83.593 5.1555 2.56e-07 residentialunits:landsquarefeet -21.756 5.6485 -3.8517 0.00011778 residentialunits:grosssquarefeet 4.584 1.4586 3.1427 0.0016769 residentialunits:yearbuilt -310.09 65.429 -4.7393 2.1632e-06 commercialunits:grosssquarefeet -27.839 11.463 -2.4286 0.015166 landsquarefeet:grosssquarefeet -0.0068613 0.00094607 -7.2524 4.2832e-13 landsquarefeet:yearbuilt 0.17489 0.028195 6.2028 5.6861e-10 landsquarefeet:MM 0.70295 0.2848 2.4682 0.013589 yearbuilt:MM -43.405 16.871 -2.5728 0.010098 Number of observations: 15849, Error degrees of freedom: 15805 Root Mean Squared Error: 2.26e+05 R-squared: 0.277, Adjusted R-Squared: 0.275 F-statistic vs. constant model: 141, p-value = 0
mdl_t
はCompactLinearModel
オブジェクトです。tall table から取得された分割された学習データ セットはインメモリ データ セットから取得されたものと同じではないため、mdl_t
は newMdl2
と厳密には同じではありません。
mdl_t
はコンパクトなオブジェクトであるため、関数 plotResiduals
を使用してモデルの残差のヒストグラムを作成することはできません。その代わりに、histogram
を使用して、コンパクトなオブジェクトから残差を直接計算して、ヒストグラムを作成できます。
mdl_t_Residual = trainData_t.saleprice - predict(mdl_t,trainData_t); histogram(mdl_t_Residual)
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 2: Completed in 2.5 sec - Pass 2 of 2: Completed in 0.63 sec Evaluation completed in 3.8 sec
title("Histogram of residuals - train data")
predict
を使用して、テスト データ セット testData_t
への応答を予測します。
ypred_t = predict(mdl_t,testData_t);
テスト データ セットの残差のヒストグラムをプロットします。
errs_t = ypred_t - testData_t.saleprice; histogram(errs_t)
Evaluating tall expression using the Parallel Pool 'local': - Pass 1 of 2: 0% complete Evaluation 0% complete
- Pass 1 of 2: 6% complete Evaluation 3% complete
- Pass 1 of 2: Completed in 0.79 sec - Pass 2 of 2: Completed in 0.55 sec Evaluation completed in 2 sec
title("Histogram of residuals - test data")
オブジェクト関数 CompactLinearModel
を使用すると、当てはめたモデルをさらに詳しく評価できます。例については、tall 配列の使用によるビッグ データの統計および機械学習の「モデルの評価と調整」を参照してください。
参考
isoutlier
| fitlm
| LinearModel
| CompactLinearModel