Обучите линейную регрессионую модель

Statistics and Machine Learning Toolbox™ предоставляет несколько функций для настройки линейной регрессионой модели.

  • Для большей точности на наборах данных с малыми и средними размерностями используйте fitlm. После подбора кривой модели можно использовать функции объекта для улучшения, оценки и визуализации подобранной модели. Чтобы упорядочить регрессию, используйте lasso или ridge.

  • Для сокращения времени вычисления на высоко-размерных наборах данных используйте fitrlinear. Эта функция предлагает полезные опции для перекрестной валидации, регуляризации и оптимизации гипероптимизации параметров управления.

Этот пример показывает типовой рабочий процесс для линейного регрессионного анализа с использованием fitlm. Рабочий процесс включает подготовку набора данных, подбор кривой линейной регрессионой модели, оценку и улучшение подобранной модели и предсказание значений отклика для новых данных предиктора. Пример также описывает аппроксимацию и оценку линейной регрессионой модели для длинных массивов.

Подготовка данных

Загрузите набор выборочных данных NYCHousing2015.

load NYCHousing2015

Набор данных включает 10 переменных с информацией о продажах недвижимости в Нью-Йорке в 2015 году. Этот пример использует некоторые из этих переменных для анализа продажных цен.

Вместо загрузки набора выборочных данных NYCHousing2015, можно скачать данные с веб-сайта NYC Open Data и импортировать данные следующим образом.

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);

Далее преобразуйте saledate переменная, заданная как datetime массив, в два числовых столбца MM (месяц) и DD (день), и удалить 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"]);

The neighborhood переменная имеет 254 категории. Удалите эту переменную для простоты.

NYCHousing2015.neighborhood = [];

Преобразуйте buildingclasscategory переменная к категориальной переменной и исследовать переменную при помощи wordcloud функция.

NYCHousing2015.buildingclasscategory = categorical(NYCHousing2015.buildingclasscategory);
wordcloud(NYCHousing2015.buildingclasscategory);

Предположим, что вас интересуют только одно-, двух- и трехсемейные жилища. Найдите выборочные индексы для этих домов и удалите другие выборки. Затем измените тип данных 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);

The buildingclasscategory переменная теперь указывает количество семейств в одном жилище.

Исследуйте переменную отклика saleprice использование summary функция.

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

Предположим, что saleprice менее чем или равным 1000 $ означает передачу права собственности без денежного фактора. Удалите выборки, которые имеют это 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 - категориальная переменная, имеющая пять категорий: Manhattan, Bronx, Brooklyn, Queens, и Staten Island. Подобранная модель mdl имеет четыре переменные индикатора. The fitlm функция использует первую категорию Manhattan как уровень ссылки, поэтому модель не включает переменную индикатора для уровня ссылки. fitlm фиксирует коэффициент переменной индикатора для уровня ссылки как ноль. Значения коэффициентов четырех переменных индикатора относятся к Manhattan. Для получения дополнительной информации о том, как функция обрабатывает категориальный предиктор, см. Алгоритмы fitlm.

Чтобы узнать, как интерпретировать значения в отображении модели, смотрите Интерпретировать результаты линейной регрессии.

Можно использовать свойства LinearModel объект, чтобы исследовать подобранную линейную регрессионую модель. Свойства объекта включают информацию о оценках коэффициентов, сводной статистике, методе аппроксимации и входных данных. Для примера можно найти значения R-квадрат и скорректированные R-квадрат в Rsquared свойство. Вы можете получить доступ к значениям свойств через браузер Рабочей области или с помощью записи через точку.

mdl.Rsquared
ans = struct with fields:
    Ordinary: 0.2352
    Adjusted: 0.2348

Отображение модели также показывает эти значения. Значение R-квадрат указывает, что модель объясняет приблизительно 24% изменчивости переменной отклика. См. «Свойства LinearModel» Объект для получения дополнительной информации о других свойствах.

Оценка модели

Отображение модели показывает p-значение каждого коэффициента. P-значения указывают, какие переменные значимы для модели. Для категориального предиктора borough, модель использует четыре переменные индикатора и отображает четыре p-значения. Чтобы изучить категориальную переменную как группу переменных индикатора, используйте функцию объекта 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                          

Значения p для переменных индикатора borough_Brooklyn и borough_Queens большие, но p-значение borough переменная как группа четырех переменных индикатора почти равна нулю, что указывает на то, что borough переменная статистически значима.

Значения p buildingclasscategory и DD больше 0,05, что указывает на то, что эти переменные не значительны на уровне значимости 5%. Поэтому можно рассмотреть возможность удаления этих переменных.

Можно также использовать coeffCI, coeefTest, и dwTest для дальнейшей оценки подобранной модели.

  • coefCI возвращает доверительные интервалы оценок коэффициентов.

  • coefTest выполняет линейный тест гипотезы на коэффициентах модели.

  • dwtest выполняет тест Дурбина-Ватсона. (Этот тест используется для данных временных рядов, так dwtest не подходит для данных о корпусе в этом примере.)

Визуализация модели и сводная статистика

A LinearModel объект обеспечивает несколько функции построения графика.

  • При создании модели используйте plotAdded чтобы понять эффект добавления или удаления переменной предиктора.

  • При проверке модели используйте plotDiagnostics найти сомнительные данные и понять эффект каждого наблюдения. Кроме того, используйте plotResiduals для анализа невязок модели.

  • После подбора кривой модели используйте plotAdjustedResponse, plotPartialDependence, и plotEffects чтобы понять эффект конкретного предиктора. Использование plotInteraction чтобы изучить эффект взаимодействия между двумя предикторами. Кроме того, используйте plotSlice чтобы построить срезы по поверхности предсказания.

В сложение, plot создает добавленный график переменной для всей модели, кроме термина точки пересечения, если mdl включает несколько переменных предиктора.

plot(mdl)

Этот график эквивалентен plotAdded(mdl). Подобранная линия представляет, как модель, как группа переменных, может объяснить переменную отклика. Наклон установленной линии не близок к нулю, и доверительная граница не включает горизонтальную линию, что указывает на то, что модель подходит лучше, чем вырожденная модель, состоящая только из постоянного члена. Тестовое статистическое значение, показанное на отображении модели (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 и DD являются 6-м и 11-м коэффициентами, соответственно. Создайте дополнительный график для этих двух переменных.

plotAdded(mdl,[6,11])

Наклон установленной линии близок к нулю, что указывает на то, что информация от двух переменных не объясняет часть значений отклика, не объясненных другими предикторами. Для получения дополнительной информации о добавленном графике переменной см. Раздел «Добавленный график переменной».

Создайте гистограмму невязок модели. 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

The isoutlier функция не идентифицирует остаточные 13894 как выбросы. Эта невязка близка к -1×106. Отобразите остаточное значение.

mdl.Residuals.Raw(13894)
ans = -1.0720e+06

Можно исключить выбросы при подборе линейной регрессионой модели с помощью аргумента пары "имя-значение" 'Exclude'. В этом случае пример корректирует подобранную модель и проверяет, может ли улучшенная модель также объяснить выбросы.

Настройте модель

Удалите DD и buildingclasscategory переменные, использующие removeTerms.

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

Поскольку две переменные не значительны в объяснении переменной отклика, R-квадратные и скорректированные R-квадратные значения 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

R-квадратные и скорректированные R-квадратные значения newMdl2 больше, чем значения newMdl1.

Создайте гистограмму невязок модели при помощи plotResiduals.

plotResiduals(newMdl2)

Остаточная гистограмма newMdl2 симметрично, без выбросов.

Можно также использовать addTerms для добавления конкретных терминов. Также можно использовать stepwiselm задать условия в стартовой модели и продолжить улучшение модели с помощью ступенчатой регрессии.

Предсказание ответов на новые данные

Спрогнозируйте ответы на набор тестовых данных testData при помощи подобранной модели newMdl2 и функции объекта predict кому

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

Анализируйте с использованием длинных массивов

The fitlm функция поддерживает длинные массивы для данной , которой не помещаютси в память, с некоторыми ограничениями. Для высоких данных, fitlm возвращает CompactLinearModel объект, который содержит большую часть тех же свойств, что и LinearModel объект. Основное различие заключается в том, что компактный объект чувствителен к требованиям памяти. Компактный объект не имеет свойств, которые включают данные или включают массив того же размера, что и данные. Поэтому некоторые LinearModel функции объекта, которые требуют данных, не работают с компактной моделью. Список поддерживаемых функций объекта см. в разделе Функции объекта. Кроме того, см. «Длинные массивы» для указаний по применению и ограничений fitlm для длинные массивы.

При выполнении вычислений на длинные массивы MATLAB ® использует либо параллельный пул (по умолчанию, если у вас есть Parallel Computing Toolbox™), либо локальный сеанс работы с MATLAB. Если вы хотите запустить пример с помощью локального сеанса работы с MATLAB, когда у вас есть Parallel Computing Toolbox, можно изменить глобальное окружение выполнения, используя mapreducer функция.

Предположим, что все данные в datastore ds не помещается в памяти. Можно использовать tall вместо readall чтение ds.

NYCHousing2015 = tall(ds);

В данном примере преобразуйте таблицу в оперативной памяти NYCHousing2015 к длинная таблица при помощи tall функция.

NYCHousing2015_t = tall(NYCHousing2015);
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

Разделите набор данных на набор обучающих данных и тестовый набор. Когда вы используете cvpartition с длинные массивы функция разбивает набор данных на основе переменной, предоставленной в качестве первого входного параметра. Для задач классификации вы обычно используете переменную отклика (a сгруппированной переменной) и создаете случайный стратифицированный раздел, чтобы получить равномерное распределение между наборами обучения и тестов для всех групп. Для регрессионных задач это расслоение недостаточно, и можно использовать 'Stratify' аргумент пары "имя-значение" для выключения опции.

В этом примере задайте переменную предиктора NYCHousing2015_t.borough как первый входной параметр, чтобы сделать распределение районов примерно одинаковым между наборами обучения и тестов. Для воспроизводимости установите seed генератора случайных чисел используя tallrng. Результаты могут варьироваться в зависимости от количества рабочих процессов и окружения выполнения для длинных массивов. Для получения дополнительной информации смотрите Управление, Где Ваш Код Запуски.

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 возвращает компактный объект модели для длинные массивы, вы не можете улучшить модель используя step функция. Вместо этого можно исследовать параметры модели с помощью функций объекта и затем настроить модель по мере необходимости. Можно также собрать подмножество данных в рабочую область, используя stepwiselm итерационно разрабатывать модель в памяти, а затем масштабироваться, чтобы использовать длинные массивы. Для получения дополнительной информации смотрите Model Development of Statistics and Машинное Обучение with Big Data Using Tall Arrays.

В этом примере подбирайте линейную регрессионую модель, используя формулу модели 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 объект. mdl_t не совсем так же, как newMdl2 поскольку секционированный набор обучающих данных, полученный из длинная таблица, не совпадает с набором данных в памяти.

Вы не можете использовать plotResiduals функция для создания гистограммы невязок модели из-за mdl_t является компактным объектом. Вместо этого вычислите невязки непосредственно от компактного объекта и создайте гистограмму с помощью 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")

Спрогнозируйте ответы на набор тестовых данных testData_t при помощи predict.

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 функции объекта. Для получения примера смотрите Оценку и Настройку Модели Статистики и Машинного Обучения с Большими Данными Используя Длинные массивы.

См. также

| | |

Похожие темы