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
, но большинство значений меньше, чем . Можно идентифицировать выбросы 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-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
далее оценивать подобранную модель.
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
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-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 ~ 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-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: 6).
Разделите набор данных в набор обучающих данных и набор тестов. Когда вы используете cvpartition
с длинными массивами, функциональные разделы набор данных на основе переменной, предоставленной как первый входной параметр. Для проблем классификации вы обычно используете переменную отклика (сгруппированная переменная) и создаете случайный стратифицированный раздел, чтобы получить даже распределение между наборами обучающих данных и наборами тестов для всех групп. Для проблем регрессии не соответствует эта стратификация, и можно использовать '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
итеративно разработать модель в памяти, и затем масштабировать, чтобы использовать длинные массивы. Для получения дополнительной информации смотрите Разработку моделей Статистики и Машинного обучения с Большими данными Используя Длинные массивы.
В этом примере подбирайте модель линейной регрессии использование формулы модели 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