exponenta event banner

Модель линейной регрессии поезда

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

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

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 имеет четыре индикаторные переменные. 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) модели.

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' возможность применения теста Grubb. Эта опция подходит для нормально распределенного набора данных.

find(isoutlier(mdl.Residuals.Raw,'grubbs'))
ans = 3×1

        1327
        4136
        4997

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

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

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

Настройка модели

Удалить 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

Анализ с использованием массивов Tall

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

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

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

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

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

См. также

| | |

Связанные темы