Main Content

線形回帰モデルの学習

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 の最大値は 3.7×107 ですが、値の大半は 0.5×107 より小さくなります。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 は、ManhattanBronxBrooklynQueensStaten 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_Brooklynborough_Queensp 値は大きいですが、4 つの指標変数のグループとしての変数 boroughp 値はほぼ 0 です。これは、変数 borough が統計的に有意であることを示しています。

buildingclasscategoryDDp 値は 0.05 より大きい値です。これは、5% の有意水準ではこれらの変数が有意ではないことを示しています。そのため、これらの変数は削除することを検討できます。

また、coeffCIcoeefTestdwTest を使用して、あてはめたモデルをさらに詳しく調べることもできます。

  • coefCIは、係数推定値の信頼区間を返します。

  • coefTestは、モデル係数に線形仮説検定を実行します。

  • dwtestは、ダービン・ワトソン検定を実行します (このテストは時系列データに使用されます。そのため、dwtest は本例の住宅データには適切ではありません)。

モデルと要約統計の可視化

LinearModel オブジェクトには、複数のプロット関数が用意されています。

  • モデルを作成するときに、予測子変数の追加または削除による効果を理解するには、plotAdded を使用します。

  • モデルを検証するときに、問題があるデータを探し、各観測値の効果を理解するには、plotDiagnostics を使用します。また、モデルの残差を分析するには、plotResiduals を使用します。

  • モデルをあてはめた後で、特定の予測子の効果を理解するには、plotAdjustedResponseplotPartialDependence および 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)

このヒストグラムから、いくつかの残差が -1×106 より小さいことが分かります。これらの外れ値を特定します。

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 を外れ値として識別しません。この残差は –1×106 に近い値です。残差の値を表示します。

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 データの場合、fitlmLinearModel オブジェクトと同じプロパティのほとんどが含まれている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_tCompactLinearModelオブジェクトです。tall table から取得された分割された学習データセットはインメモリ データセットから取得されたものと同じではないため、mdl_tnewMdl2 と厳密には同じではありません。

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 配列の使用によるビッグ データの統計および機械学習の「モデルの評価と調整」を参照してください。

参考

| | |

関連するトピック