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
является , но большинство значений меньше, чем . Можно идентифицировать выбросы 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
для дальнейшей оценки подобранной модели.
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)
Гистограмма показывает, что несколько невязки меньше, чем . Идентифицируйте эти выбросы.
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
как выбросы. Эта невязка близка к -110. Отобразите остаточное значение.
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
функции объекта. Для получения примера смотрите Оценку и Настройку Модели Статистики и Машинного Обучения с Большими Данными Используя Длинные массивы.
CompactLinearModel
| fitlm
| isoutlier
| LinearModel