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

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

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

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

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

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

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

load NYCHousing2015

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

Вместо того, чтобы загрузить выборочные данные устанавливает NYCHousing2015, можно загрузить данные из Нью-Йорк Сити Открытый веб-сайт Данных и импортировать данные можно следующим образом.

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

Примите, что вы интересуетесь только одним - 2D, и жилье с тремя семействами. Найдите демонстрационные индексы для этого жилья и удалите другие выборки. Затем измените тип данных 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 меньше чем или равный 1 000$ указывает на передачу владения без суммы. Удалите выборки, которые имеют этот 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 ~ [Linear formula with 8 terms in 7 predictors]

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-squared и настроенные значения R-squared в Rsquared свойство. Можно получить доступ к значениям свойств через браузер Рабочей области или использующий запись через точку.

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

Отображение модели также показывает эти значения. Значение R-squared указывает, что модель объясняет приблизительно 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 не подходит для данных о корпусе в этом примере.)

Визуализируйте и итоговую статистику модели

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 = 1x11 cell array
  Columns 1 through 3

    {'(Intercept)'}    {'borough_Bronx'}    {'borough_Brooklyn'}

  Columns 4 through 6

    {'borough_Queens'}    {'borough_Staten...'}    {'buildingclassc...'}

  Columns 7 through 10

    {'landsquarefeet'}    {'grosssquarefeet'}    {'yearbuilt'}    {'MM'}

  Column 11

    {'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

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-squared и настроенных значений R-squared 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 ~ [Linear formula with 26 terms in 8 predictors]

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-squared и настроенные значения R-squared 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

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

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: 12).

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

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

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

В этом примере подбирайте модель линейной регрессии использование формулы модели newMdl2.

mdl_t = fitlm(trainData_t,newMdl2.Formula)
Evaluating tall expression using the Parallel Pool 'local':
- Pass 1 of 1: 0% complete
Evaluation 0% complete
- Pass 1 of 1: Completed in 9.1 sec
Evaluation completed in 12 sec
mdl_t = 
Compact linear regression model:
    saleprice ~ [Linear formula with 26 terms in 8 predictors]

Estimated Coefficients:
                                                    Estimate          SE          tStat        pValue  
                                                   ___________    __________    _________    __________

    (Intercept)                                     1.0895e+06    6.1407e+05       1.7741      0.076059
    borough_Brooklyn                                 4.075e+06    4.1225e+05       9.8848    5.6489e-23
    borough_Manhattan                                3.213e+07    1.3492e+07       2.3814      0.017258
    borough_Queens                                  7.8533e+05    4.1507e+05       1.8921      0.058502
    borough_Staten Island                          -3.4046e+05    4.6474e+05     -0.73258       0.46383
    buildingclasscategory                          -2.0149e+06    2.8266e+05      -7.1281    1.0616e-12
    residentialunits                                1.1818e+06    1.8751e+05       6.3027    3.0019e-10
    commercialunits                                      79902         40099       1.9926      0.046323
    landsquarefeet                                      -542.7        66.845      -8.1188    5.0523e-16
    grosssquarefeet                                     174.04         13.81       12.603    3.0459e-36
    yearbuilt                                          -547.67        317.94      -1.7226      0.084984
    MM                                                   46489         33211       1.3998       0.16159
    borough_Brooklyn:buildingclasscategory              5433.3         11992      0.45308       0.65049
    borough_Manhattan:buildingclasscategory         1.8465e+05    1.0041e+05       1.8389      0.065946
    borough_Queens:buildingclasscategory                 19756         11674       1.6923      0.090611
    borough_Staten Island:buildingclasscategory        -1428.6         14972    -0.095417       0.92398
    borough_Brooklyn:commercialunits                    -65209         40608      -1.6058       0.10833
    borough_Manhattan:commercialunits               2.2004e+05    1.3161e+05       1.6719      0.094557
    borough_Queens:commercialunits                      -64561         42053      -1.5352       0.12475
    borough_Staten Island:commercialunits          -1.5046e+05         58525      -2.5709      0.010152
    borough_Brooklyn:landsquarefeet                   0.028354        5.1115    0.0055471       0.99557
    borough_Manhattan:landsquarefeet                   -108.39        79.386      -1.3653       0.17218
    borough_Queens:landsquarefeet                      -9.1634        3.9482      -2.3209      0.020304
    borough_Staten Island:landsquarefeet               -20.871        3.6468      -5.7232    1.0646e-08
    borough_Brooklyn:grosssquarefeet                     40.01        10.469       3.8216    0.00013311
    borough_Manhattan:grosssquarefeet                  -57.441        89.807     -0.63961       0.52244
    borough_Queens:grosssquarefeet                      70.971        10.664       6.6549    2.9277e-11
    borough_Staten Island:grosssquarefeet               35.305        12.002       2.9416     0.0032704
    borough_Brooklyn:yearbuilt                         -2021.5        213.29      -9.4779    2.9548e-21
    borough_Manhattan:yearbuilt                         -16693        7045.3      -2.3694      0.017828
    borough_Queens:yearbuilt                            -379.5        214.93      -1.7657      0.077468
    borough_Staten Island:yearbuilt                     190.07        238.97      0.79537       0.42641
    buildingclasscategory:residentialunits               25916        5486.2       4.7238    2.3349e-06
    buildingclasscategory:landsquarefeet               -3.7408        2.0796      -1.7988      0.072065
    buildingclasscategory:grosssquarefeet               -45.55        5.0342       -9.048    1.6222e-19
    buildingclasscategory:yearbuilt                     1066.2        144.27       7.3902    1.5394e-13
    residentialunits:landsquarefeet                    -0.5859       0.10591      -5.5319    3.2189e-08
    residentialunits:grosssquarefeet                     1.712       0.41925       4.0836    4.4565e-05
    residentialunits:yearbuilt                         -640.18        94.263      -6.7914    1.1499e-11
    commercialunits:grosssquarefeet                    -19.763        4.6031      -4.2933    1.7706e-05
    landsquarefeet:grosssquarefeet                  -0.0080089    0.00086203      -9.2908    1.7275e-20
    landsquarefeet:yearbuilt                           0.30618      0.034782       8.8027    1.4713e-18
    landsquarefeet:MM                                  0.53584       0.28203       1.8999      0.057462
    yearbuilt:MM                                        -22.47        17.123      -1.3122       0.18946


Number of observations: 15852, Error degrees of freedom: 15808
Root Mean Squared Error: 2.25e+05
R-squared: 0.275,  Adjusted R-Squared: 0.274
F-statistic vs. constant model: 140, 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 3.9 sec
- Pass 2 of 2: Completed in 1.2 sec
Evaluation completed in 7.1 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: Completed in 1.5 sec
- Pass 2 of 2: Completed in 1.1 sec
Evaluation completed in 4.6 sec
title("Histogram of residuals - test data")

Можно далее оценить подобранную модель с помощью CompactLinearModel функции объекта. Для примера смотрите, Оценивают и Настраивают Модель Статистики и Машинного обучения с Большими данными Используя Длинные массивы.

Смотрите также

| | |

Похожие темы