В этом примере показано, как использовать fitrauto
функция, чтобы автоматически попробовать выбор типов регрессионной модели с различными значениями гиперзначений параметров, учитывая обучающие данные предиктора и отклика. Функция использует байесовскую оптимизацию, чтобы выбрать модели и их значения гиперзначений параметров, и вычисляет следующее для каждой модели: , где valLoss является средней квадратичной невязкой перекрестной валидации (MSE). После завершения оптимизации fitrauto
возвращает модель, обученную на целом наборе данных, которая, как ожидается, лучше всего спрогнозирует отклики для новых данных. Проверьте производительность модели по тестовым данным.
Загрузите набор выборочных данных NYCHousing2015
, которая включает 10 переменных с информацией о продажах недвижимости в Нью-Йорке в 2015 году. Этот пример использует некоторые из этих переменных для анализа продажных цен.
load NYCHousing2015
Вместо загрузки набора выборочных данных 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);
Предварительно обработайте набор данных, чтобы выбрать интересующие переменные предиктора. Некоторые из шагов предварительной обработки соответствуют шагам в примере Train Linear Regression Model.
Во-первых, измените имена переменных на строчные для читаемости.
NYCHousing2015.Properties.VariableNames = lower(NYCHousing2015.Properties.VariableNames);
Затем удалите выборки с определенными проблемными значениями. Для примера сохраните только те выборки, где, по крайней мере, одно из измерений площади grosssquarefeet
или landsquarefeet
является ненулевым. Предположим, что saleprice
$0 указывает на передачу права собственности без денежного фактора и удаление выборок с этим saleprice
значение. Предположим, что yearbuilt
Значение 1500 или менее является опечаткой и удаляет соответствующие выборки.
NYCHousing2015(NYCHousing2015.grosssquarefeet == 0 & NYCHousing2015.landsquarefeet == 0,:) = []; NYCHousing2015(NYCHousing2015.saleprice == 0,:) = []; NYCHousing2015(NYCHousing2015.yearbuilt <= 1500,:) = [];
Преобразуйте 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
переменная к порядковой категориальной переменной с целочисленными именами категорий.
idx = ismember(string(NYCHousing2015.buildingclasscategory), ... ["01 ONE FAMILY DWELLINGS","02 TWO FAMILY DWELLINGS","03 THREE FAMILY DWELLINGS"]); NYCHousing2015 = NYCHousing2015(idx,:); NYCHousing2015.buildingclasscategory = categorical(NYCHousing2015.buildingclasscategory, ... ["01 ONE FAMILY DWELLINGS","02 TWO FAMILY DWELLINGS","03 THREE FAMILY DWELLINGS"], ... ["1","2","3"],'Ordinal',true);
The buildingclasscategory
переменная теперь указывает количество семейств в одном жилище.
Исследуйте переменную отклика saleprice
при помощи summary
функция.
s = summary(NYCHousing2015); s.saleprice
ans = struct with fields:
Size: [24972 1]
Type: 'double'
Description: ''
Units: ''
Continuity: []
Min: 1
Median: 515000
Max: 37000000
NumMissing: 0
Создайте гистограмму saleprice
переменная.
histogram(NYCHousing2015.saleprice)
Потому что распределение saleprice
значения имеют перекос вправо, все значения больше 0, логарифмическое преобразование saleprice
переменная.
NYCHousing2015.saleprice = log(NYCHousing2015.saleprice);
Точно так же преобразуйте grosssquarefeet
и landsquarefeet
переменные. Добавьте значение 1, прежде чем принимать логарифм каждой переменной, в случае, если переменная равна 0.
NYCHousing2015.grosssquarefeet = log(1 + NYCHousing2015.grosssquarefeet); NYCHousing2015.landsquarefeet = log(1 + NYCHousing2015.landsquarefeet);
Разделите набор данных на набор обучающих данных и тестовый набор при помощи cvpartition
. Используйте приблизительно 80% наблюдений для процесса выбора модели и настройки гиперпараметра, а другие 20% для проверки эффективности конечной модели, возвращенной fitrauto
.
rng('default') % For reproducibility of the partition c = cvpartition(length(NYCHousing2015.saleprice),'Holdout',0.2); trainData = NYCHousing2015(training(c),:); testData = NYCHousing2015(test(c),:);
Идентифицируйте и удалите выбросы saleprice
, grosssquarefeet
, и landsquarefeet
из обучающих данных при помощи isoutlier
функция.
[priceIdx,priceL,priceU] = isoutlier(trainData.saleprice); trainData(priceIdx,:) = []; [grossIdx,grossL,grossU] = isoutlier(trainData.grosssquarefeet); trainData(grossIdx,:) = []; [landIdx,landL,landU] = isoutlier(trainData.landsquarefeet); trainData(landIdx,:) = [];
Удалите выбросы saleprice
, grosssquarefeet
, и landsquarefeet
из тестовых данных с использованием тех же нижнего и верхнего порогов, вычисленных на обучающих данных.
testData(testData.saleprice < priceL | testData.saleprice > priceU,:) = []; testData(testData.grosssquarefeet < grossL | testData.grosssquarefeet > grossU,:) = []; testData(testData.landsquarefeet < landL | testData.landsquarefeet > landU,:) = [];
Найдите соответствующую регрессионую модель для данных в trainData
при помощи fitrauto
. Попробуйте учеников дерева и ансамбля и запустите байесовскую оптимизацию параллельно, что требует Parallel Computing Toolbox™. Из-за непродуктивности параллельной синхронизации параллельная байесовская оптимизация не обязательно приводит к воспроизводимым результатам. Чтобы уменьшить вычислительное время, используйте 3-кратную перекрестную валидацию, а не 5-кратную перекрестную валидацию в качестве части процесса оптимизации.
Из-за сложности оптимизации этот процесс может занять некоторое время, особенно для больших наборов данных. По умолчанию fitrauto
предоставляет график оптимизации и итерационное отображение результатов оптимизации. Для получения дополнительной информации о том, как интерпретировать эти результаты, смотрите Подробное отображение.
options = struct('UseParallel',true,'Kfold',3); [mdl,results] = fitrauto(trainData,'saleprice', ... 'Learners',{'tree','ensemble'},'HyperparameterOptimizationOptions',options);
Copying objective function to workers... Done copying objective function to workers.
Learner types to explore: ensemble, tree Total iterations (MaxObjectiveEvaluations): 60 Total time (MaxTime): Inf
|===================================================================================================================================================| | Iter | Active | Eval | log(1 + valLoss) | Time for training | Observed min | Estimated min | Learner | Hyperparameter: Value | | | workers | result | | & validation (sec)| log(1 + valLoss) | log(1 + valLoss) | | | |===================================================================================================================================================| | 1 | 5 | Accept | 0.25922 | 0.067333 | 0.18985 | 0.19575 | tree | MinLeafSize: 8676 | | 2 | 5 | Best | 0.18985 | 0.14568 | 0.18985 | 0.19575 | tree | MinLeafSize: 245 |
| 3 | 2 | Accept | 0.25126 | 0.86908 | 0.1849 | 0.18985 | tree | MinLeafSize: 4 | | 4 | 2 | Best | 0.1849 | 1.0049 | 0.1849 | 0.18985 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 18 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 110 | | 5 | 2 | Accept | 0.25922 | 0.5705 | 0.1849 | 0.18985 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 24 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 8426 | | 6 | 2 | Accept | 0.25126 | 0.87986 | 0.1849 | 0.18985 | tree | MinLeafSize: 4 |
| 7 | 6 | Accept | 0.21227 | 0.069611 | 0.1849 | 0.18985 | tree | MinLeafSize: 1722 |
| 8 | 4 | Accept | 0.18763 | 0.15728 | 0.1849 | 0.18538 | tree | MinLeafSize: 60 | | 9 | 4 | Accept | 2.9803 | 0.47009 | 0.1849 | 0.18538 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 20 | | | | | | | | | | LearnRate: 0.054589 | | | | | | | | | | MinLeafSize: 8499 | | 10 | 4 | Accept | 0.1914 | 0.23832 | 0.1849 | 0.18538 | tree | MinLeafSize: 30 |
|===================================================================================================================================================| | Iter | Active | Eval | log(1 + valLoss) | Time for training | Observed min | Estimated min | Learner | Hyperparameter: Value | | | workers | result | | & validation (sec)| log(1 + valLoss) | log(1 + valLoss) | | | |===================================================================================================================================================| | 11 | 4 | Accept | 0.23248 | 0.057309 | 0.1849 | 0.18494 | tree | MinLeafSize: 3991 |
| 12 | 4 | Accept | 0.22354 | 2.9816 | 0.1849 | 0.18493 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 121 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 3071 |
| 13 | 4 | Accept | 4.7611 | 3.9969 | 0.1849 | 0.18494 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 79 | | | | | | | | | | LearnRate: 0.0025753 | | | | | | | | | | MinLeafSize: 67 |
| 14 | 3 | Best | 0.17937 | 1.6426 | 0.17937 | 0.17945 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 24 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 16 | | 15 | 3 | Accept | 0.25923 | 0.31222 | 0.17937 | 0.17945 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 14 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 7287 |
| 16 | 5 | Best | 0.17799 | 4.7324 | 0.17799 | 0.17945 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 69 | | | | | | | | | | LearnRate: 0.19523 | | | | | | | | | | MinLeafSize: 209 | | 17 | 5 | Accept | 0.19076 | 0.10145 | 0.17799 | 0.17945 | tree | MinLeafSize: 274 |
| 18 | 4 | Accept | 0.22517 | 0.079648 | 0.17799 | 0.17945 | tree | MinLeafSize: 2306 | | 19 | 4 | Accept | 0.21507 | 0.32105 | 0.17799 | 0.17945 | tree | MinLeafSize: 10 |
| 20 | 4 | Accept | 0.18797 | 0.11404 | 0.17799 | 0.17945 | tree | MinLeafSize: 155 |
|===================================================================================================================================================| | Iter | Active | Eval | log(1 + valLoss) | Time for training | Observed min | Estimated min | Learner | Hyperparameter: Value | | | workers | result | | & validation (sec)| log(1 + valLoss) | log(1 + valLoss) | | | |===================================================================================================================================================| | 21 | 3 | Accept | 0.17862 | 5.6403 | 0.17799 | 0.17945 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 54 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 3 | | 22 | 3 | Accept | 0.19413 | 0.16212 | 0.17799 | 0.17945 | tree | MinLeafSize: 25 |
| 23 | 6 | Accept | 0.24396 | 0.74378 | 0.17799 | 0.17945 | tree | MinLeafSize: 5 |
| 24 | 5 | Accept | 0.18986 | 0.16919 | 0.17799 | 0.17945 | tree | MinLeafSize: 39 | | 25 | 5 | Accept | 0.19608 | 0.19077 | 0.17799 | 0.17945 | tree | MinLeafSize: 23 |
| 26 | 4 | Accept | 0.17828 | 11.436 | 0.17799 | 0.17803 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 108 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 3 | | 27 | 4 | Accept | 0.1809 | 3.7272 | 0.17799 | 0.17803 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 69 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 55 |
| 28 | 4 | Accept | 0.18171 | 1.9361 | 0.17799 | 0.17803 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 19 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 4 |
| 29 | 4 | Accept | 0.17959 | 8.6553 | 0.17799 | 0.17803 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 75 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 1 |
| 30 | 3 | Accept | 0.20204 | 15.893 | 0.17762 | 0.17676 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 496 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 910 | |===================================================================================================================================================| | Iter | Active | Eval | log(1 + valLoss) | Time for training | Observed min | Estimated min | Learner | Hyperparameter: Value | | | workers | result | | & validation (sec)| log(1 + valLoss) | log(1 + valLoss) | | | |===================================================================================================================================================| | 31 | 3 | Best | 0.17762 | 6.6202 | 0.17762 | 0.17676 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 95 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 13 |
| 32 | 5 | Accept | 0.19444 | 5.563 | 0.17762 | 0.17765 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 103 | | | | | | | | | | LearnRate: 0.9936 | | | | | | | | | | MinLeafSize: 98 | | 33 | 5 | Accept | 0.18056 | 0.75592 | 0.17762 | 0.17765 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 11 | | | | | | | | | | LearnRate: 0.49541 | | | | | | | | | | MinLeafSize: 222 |
| 34 | 4 | Accept | 0.18768 | 0.78702 | 0.17762 | 0.17765 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 13 | | | | | | | | | | LearnRate: 0.98545 | | | | | | | | | | MinLeafSize: 1 | | 35 | 4 | Accept | 0.26635 | 1.1019 | 0.17762 | 0.17765 | tree | MinLeafSize: 2 |
| 36 | 4 | Accept | 0.206 | 4.2801 | 0.17762 | 0.17783 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 142 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 1241 |
| 37 | 3 | Accept | 0.21503 | 11.309 | 0.17762 | 0.17764 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 230 | | | | | | | | | | LearnRate: 0.017904 | | | | | | | | | | MinLeafSize: 1 | | 38 | 3 | Accept | 0.3789 | 0.55978 | 0.17762 | 0.17764 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 10 | | | | | | | | | | LearnRate: 0.27761 | | | | | | | | | | MinLeafSize: 5 |
| 39 | 6 | Accept | 0.23053 | 0.51383 | 0.17762 | 0.17764 | tree | MinLeafSize: 7 |
| 40 | 6 | Accept | 0.17996 | 2.7932 | 0.17762 | 0.17764 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 49 | | | | | | | | | | LearnRate: 0.11514 | | | | | | | | | | MinLeafSize: 1 |
|===================================================================================================================================================| | Iter | Active | Eval | log(1 + valLoss) | Time for training | Observed min | Estimated min | Learner | Hyperparameter: Value | | | workers | result | | & validation (sec)| log(1 + valLoss) | log(1 + valLoss) | | | |===================================================================================================================================================| | 41 | 6 | Accept | 0.23707 | 12.289 | 0.17762 | 0.17767 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 480 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 3779 |
| 42 | 5 | Accept | 0.18527 | 26.878 | 0.17762 | 0.17766 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 491 | | | | | | | | | | LearnRate: 0.65315 | | | | | | | | | | MinLeafSize: 1044 | | 43 | 5 | Accept | 0.18276 | 4.678 | 0.17762 | 0.17766 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 66 | | | | | | | | | | LearnRate: 0.81673 | | | | | | | | | | MinLeafSize: 635 |
| 44 | 5 | Accept | 0.25057 | 22.826 | 0.17762 | 0.17765 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 412 | | | | | | | | | | LearnRate: 0.92469 | | | | | | | | | | MinLeafSize: 1 |
| 45 | 5 | Accept | 4.61 | 0.60326 | 0.17762 | 0.17779 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 10 | | | | | | | | | | LearnRate: 0.027624 | | | | | | | | | | MinLeafSize: 1 |
| 46 | 4 | Accept | 0.2001 | 25.14 | 0.17762 | 0.17762 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 465 | | | | | | | | | | LearnRate: 0.0094768 | | | | | | | | | | MinLeafSize: 23 | | 47 | 4 | Accept | 0.20319 | 3.6011 | 0.17762 | 0.17762 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 70 | | | | | | | | | | LearnRate: 0.98445 | | | | | | | | | | MinLeafSize: 4 |
| 48 | 4 | Accept | 0.18106 | 26.642 | 0.17762 | 0.17762 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 495 | | | | | | | | | | LearnRate: 0.091101 | | | | | | | | | | MinLeafSize: 1 |
| 49 | 4 | Accept | 0.25922 | 7.6886 | 0.17762 | 0.17762 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 493 | | | | | | | | | | LearnRate: 0.024602 | | | | | | | | | | MinLeafSize: 8658 |
| 50 | 4 | Accept | 0.18162 | 4.8133 | 0.17762 | 0.17762 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 94 | | | | | | | | | | LearnRate: 0.30945 | | | | | | | | | | MinLeafSize: 1 |
|===================================================================================================================================================| | Iter | Active | Eval | log(1 + valLoss) | Time for training | Observed min | Estimated min | Learner | Hyperparameter: Value | | | workers | result | | & validation (sec)| log(1 + valLoss) | log(1 + valLoss) | | | |===================================================================================================================================================| | 51 | 5 | Accept | 0.17788 | 5.18 | 0.17762 | 0.17762 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 102 | | | | | | | | | | LearnRate: 0.11411 | | | | | | | | | | MinLeafSize: 4 |
| 52 | 5 | Accept | 0.1858 | 36.145 | 0.17762 | 0.17762 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 499 | | | | | | | | | | LearnRate: 0.34801 | | | | | | | | | | MinLeafSize: 181 | | 53 | 5 | Accept | 0.17946 | 1.3924 | 0.17762 | 0.17762 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 24 | | | | | | | | | | LearnRate: 0.47121 | | | | | | | | | | MinLeafSize: 29 |
| 54 | 6 | Accept | 0.17837 | 8.0619 | 0.17762 | 0.17761 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 142 | | | | | | | | | | LearnRate: 0.076159 | | | | | | | | | | MinLeafSize: 1 |
| 55 | 6 | Accept | 0.17766 | 25.949 | 0.17762 | 0.17761 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 495 | | | | | | | | | | LearnRate: 0.024193 | | | | | | | | | | MinLeafSize: 7 |
| 56 | 6 | Accept | 1.2951 | 25.877 | 0.17762 | 0.17762 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 475 | | | | | | | | | | LearnRate: 0.0044769 | | | | | | | | | | MinLeafSize: 5 |
| 57 | 6 | Best | 0.17753 | 28.063 | 0.17753 | 0.17751 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 486 | | | | | | | | | | LearnRate: 0.038349 | | | | | | | | | | MinLeafSize: 39 |
| 58 | 6 | Accept | 0.17978 | 2.0228 | 0.17753 | 0.17751 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 34 | | | | | | | | | | LearnRate: 0.3482 | | | | | | | | | | MinLeafSize: 3 |
| 59 | 6 | Accept | 2.6442 | 0.64641 | 0.17753 | 0.17751 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 10 | | | | | | | | | | LearnRate: 0.12206 | | | | | | | | | | MinLeafSize: 65 |
| 60 | 5 | Accept | 0.97054 | 16.16 | 0.17753 | 0.17751 | ensemble | Method: LSBoost | | | | | | | | | | NumLearningCycles: 498 | | | | | | | | | | LearnRate: 0.0048163 | | | | | | | | | | MinLeafSize: 3269 | |===================================================================================================================================================| | Iter | Active | Eval | log(1 + valLoss) | Time for training | Observed min | Estimated min | Learner | Hyperparameter: Value | | | workers | result | | & validation (sec)| log(1 + valLoss) | log(1 + valLoss) | | | |===================================================================================================================================================| | 61 | 5 | Accept | 0.2084 | 0.6174 | 0.17753 | 0.17751 | ensemble | Method: Bag | | | | | | | | | | NumLearningCycles: 15 | | | | | | | | | | LearnRate: NaN | | | | | | | | | | MinLeafSize: 997 |
__________________________________________________________ Optimization completed. Total iterations: 61 Total elapsed time: 150.2458 seconds Total time for training and validation: 386.9239 seconds Best observed learner is an ensemble model with: Method: LSBoost NumLearningCycles: 486 LearnRate: 0.038349 MinLeafSize: 39 Observed log(1 + valLoss): 0.17753 Time for training and validation: 28.0634 seconds Best estimated learner (returned model) is an ensemble model with: Method: LSBoost NumLearningCycles: 486 LearnRate: 0.038349 MinLeafSize: 39 Estimated log(1 + valLoss): 0.17751 Estimated time for training and validation: 28.7325 seconds Documentation for fitrauto display
Конечная модель, возвращенная fitrauto
соответствует лучшему оцененному ученику. Перед возвращением модели функция переобучает ее, используя все обучающие данные (trainData
), перечисленные Learner
(или модель) тип и отображенные значения гиперзначений параметров.
Оцените эффективность возвращенной модели mdl
на тестовом аппарате testData
. Вычислите среднюю квадратичную невязку тестового набора (MSE) и примите журнал преобразование MSE, чтобы соответствовать значениям в подробном отображении fitrauto
. Меньшие значения MSE (и логарифмического преобразования MSE) указывают на лучшую эффективность.
testMSE = loss(mdl,testData,'saleprice');
testError = log(1 + testMSE)
testError = 0.1791
Сравните предсказанные значения отклика набора тестов с истинными значениями отклика. Постройте график прогнозируемой цены продажи вдоль вертикальной оси и истинной цены продажи вдоль горизонтальной оси. Точки на опорной линии указывают на правильные предсказания. Хорошая модель производит предсказания, которые разбросаны рядом с линией.
testPredictions = predict(mdl,testData); plot(testData.saleprice,testPredictions,'.') hold on plot(testData.saleprice,testData.saleprice) % Reference line hold off xlabel(["True Sale Price","(log transformed)"]) ylabel(["Predicted Sale Price","(log transformed)"])
Используйте коробчатые графики, чтобы сравнить распределение прогнозируемых и истинных цен продажи по боро. Создайте прямоугольные графики при помощи boxchart
функция. На каждом прямоугольном графике отображаются медиана, нижний и верхний квартили, любые выбросы (вычисленные с помощью межквартильной области значений) и минимальное и максимальное значения, которые не являются выбросами. В частности, линия внутри каждой коробки является медианой выборки, а круговые маркеры указывают на выбросы.
Для каждого района сравните график красного ящика (показывающий распределение прогнозируемых цен) с графиком синего ящика (показывающим распределение истинных цен). Аналогичные распределения прогнозируемых и истинных цен на продажу указывают на хорошие предсказания.
boxchart(testData.borough,testData.saleprice) hold on boxchart(testData.borough,testPredictions) hold off legend(["True Sale Prices","Predicted Sale Prices"]) xlabel("Borough") ylabel(["Sale Price","(log transformed)"])
Для всех районов прогнозируемая медианная цена продажи тесно соответствует медианной истинной цене продажи. Прогнозируемые цены продажи, по-видимому, варьируются меньше, чем истинные цены продажи.
Отобразите коробчатые графики, которые сравнивают распределение прогнозируемых и истинных цен продажи по количеству семейств в жилище.
boxchart(testData.buildingclasscategory,testData.saleprice) hold on boxchart(testData.buildingclasscategory,testPredictions) hold off legend(["True Sale Prices","Predicted Sale Prices"]) xlabel("Number of Families in Dwelling") ylabel(["Sale Price","(log transformed)"])
Для всех домов прогнозируемая медианная цена продажи тесно совпадает с медианной истинной ценой продажи. Прогнозируемые цены продажи, по-видимому, варьируются меньше, чем истинные цены продажи.
Постройте гистограмму невязок тестового набора и проверьте, что они обычно распределены. (Напомним, что продажные цены преобразованы в логарифмические.)
testResiduals = testData.saleprice - testPredictions;
histogram(testResiduals)
title('Test Set Residuals')
Хотя гистограмма слегка искривлена слева, она приблизительно симметрична около 0.
BayesianOptimization
| boxchart
| fitrauto
| histogram