В этом примере показано, как настроить и обучить линейную модель регрессии SVM использование приложения Regression Learner. Затем в командной строке инициализируйте и обучите инкрементную модель линейной регрессии SVM с помощью информации, полученной от обучения в приложении.
Загрузите 2 015 наборов данных корпуса Нью-Йорк Сити и переставьте данные. Для получения дополнительной информации о данных смотрите, что Нью-Йорк Сити Открывает Данные.
load NYCHousing2015 rng(1); % For reproducibility n = size(NYCHousing2015,1); idxshuff = randsample(n,n); NYCHousing2015 = NYCHousing2015(idxshuff,:);
Для числовой устойчивости масштабируйте SALEPRICE
1e6
.
NYCHousing2015.SALEPRICE = NYCHousing2015.SALEPRICE/1e6;
Считайте обучение линейной моделью регрессии SVM приблизительно к 1% данных и резервированием остающихся данных для пошагового обучения.
Regression Learner поддерживает категориальные переменные. Однако, потому что модели SVM требуют закодированных макетом категориальных переменных и BUILDINGCLASSCATEGORY
и NEIGHBORHOOD
переменные содержат много уровней (некоторые с низким представлением), вероятность, что раздел не имеет всех категорий, высока. Поэтому фиктивный код все категориальные переменные. Конкатенируйте матрицу фиктивных переменных к остальной части числовых переменных.
catvars = ["BOROUGH" "BUILDINGCLASSCATEGORY" "NEIGHBORHOOD"]; dumvars = splitvars(varfun(@(x)dummyvar(categorical(x)),NYCHousing2015,... 'InputVariables',catvars)); NYCHousing2015(:,catvars) = []; idxnum = varfun(@isnumeric,NYCHousing2015,'OutputFormat','uniform'); NYCHousing2015 = [dumvars NYCHousing2015(:,idxnum)];
Случайным образом разделите данные в 1% и 99% подмножеств путем вызова cvpartition
и определение затяжки (тест) демонстрационная пропорция 0.99
. Составьте таблицы для 1% и 99% разделов.
cvp = cvpartition(n,'HoldOut',0.99);
idxtt = cvp.training;
idxil = cvp.test;
NYCHousing2015tt = NYCHousing2015(idxtt,:);
NYCHousing2015il = NYCHousing2015(idxil,:);
Откройте Regression Learner путем ввода regressionLearner
в командной строке.
regressionLearner
В качестве альтернативы на вкладке Apps, кликните по стреле Show more, чтобы открыть галерею Apps. Под Machine Learning and Deep Learning кликните по значку приложения.
Выберите обучающий набор данных и переменные.
На вкладке Regression Learner, в разделе File, выбирают New Session, и затем выбирают From Workspace.
В диалоговом окне New Session from Workspace, под Переменной Набора данных, выбирают набор данных NYCHousing2015tt.
Под Response обеспечьте переменную отклика, SALEPRICE выбран.
Нажмите Start Session.
Приложение реализует 5-кратную перекрестную проверку по умолчанию.
Обучите линейную модель регрессии SVM. Настройте только гиперпараметр Epsilon при помощи Байесовой оптимизации.
На вкладке Regression Learner, в разделе Model Type, кликают по стреле Show more, чтобы открыть галерею Apps. В разделе Support Vector Machines нажмите Optimizable SVM.
На вкладке Regression Learner, в разделе Model Type, выбирают Advanced, и затем выбирают Advanced.
В диалоговом окне Select SVM Hyperparameters to Optimize:
Отмените выбор полей Optimize для всех опций кроме Epsilon.
Установите значение Kernel scale к Manual
и 1
.
Отмените выбор поля Value Standardize data.
Закройте диалоговое окно.
На вкладке Regression Learner, в разделе Training, нажимают Train.
Приложение показывает график минимума обобщения MSE модели, в то время как оптимизация прогрессирует. Приложение может занять время, чтобы оптимизировать алгоритм.
Экспортируйте обученную, оптимизированную линейную модель регрессии SVM.
На вкладке Regression Learner, в разделе Export, выбирают Export Model и выбирают Export Model.
В диалоговом окне Export Model нажмите OK.
Приложение передает обученную модель, среди других переменных, в массиве структур trainedModel
к рабочей области. Закройте Regression Learner .
В командной строке извлеките обученную модель регрессии SVM из trainedModel
.
Mdl = trainedModel.RegressionSVM;
Преобразуйте модель в инкрементную модель.
IncrementalMdl = incrementalLearner(Mdl) IncrementalMdl.Epsilon
IncrementalMdl = incrementalRegressionLinear IsWarm: 1 Metrics: [1×2 table] ResponseTransform: 'none' Beta: [312×1 double] Bias: 10.1437 Learner: 'svm' Properties, Methods ans = 1.4453
IncrementalMdl
incrementalRegressionLinear
объект модели для пошагового обучения с помощью линейной модели регрессии SVM. incrementalLearner
инициализирует IncrementalMdl
использование коэффициентов и оптимизированного значения Epsilon
гиперпараметр усвоен из Mdl
. Поэтому можно предсказать ответы путем передачи IncrementalMdl
и данные к predict
. Кроме того, IsWarm
свойством является true
, что означает, что функции пошагового обучения измеряют производительность модели от запуска пошагового обучения.
Поскольку функции пошагового обучения принимают матрицы с плавающей точкой только, создают матрицы для данных об ответе и предиктора.
Xil = NYCHousing2015il{:,1:(end-1)}; Yil = NYCHousing2015il{:,end};
Выполните пошаговое обучение на 99%-м разделе данных при помощи updateMetricsAndFit
функция. Симулируйте поток данных путем обработки 500 наблюдений за один раз. В каждой итерации:
Вызовите updateMetricsAndFit
обновить совокупный эпсилон и эпсилон окна нечувствительная потеря модели, учитывая входящий фрагмент наблюдений. Перезапишите предыдущую инкрементную модель, чтобы обновить потери в Metrics
свойство. Обратите внимание на то, что функция не подбирает модель к фрагменту данных — фрагмент является "новыми" данными для модели.
Сохраните потери и в последний раз оцененный коэффициент β 313.
% Preallocation nil = sum(idxil); numObsPerChunk = 500; nchunk = floor(nil/numObsPerChunk); ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); beta313 = [IncrementalMdl.Beta(end); zeros(nchunk,1)]; % Incremental learning for j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1); iend = min(nil,numObsPerChunk*j); idx = ibegin:iend; IncrementalMdl = updateMetricsAndFit(IncrementalMdl,Xil(idx,:),Yil(idx)); ei{j,:} = IncrementalMdl.Metrics{"EpsilonInsensitiveLoss",:}; beta313(j + 1) = IncrementalMdl.Beta(end); end
IncrementalMdl
incrementalRegressionLinear
объект модели, обученный на всех данных в потоке.
Постройте график трассировки показателей производительности и оцененного коэффициента β 313.
figure; subplot(2,1,1) h = plot(ei.Variables); xlim([0 nchunk]); ylabel('Epsilon Insensitive Loss') legend(h,ei.Properties.VariableNames) subplot(2,1,2) plot(beta313) ylabel('\beta_{313}') xlim([0 nchunk]); xlabel('Iteration')
Совокупная потеря постепенно изменяется с каждой итерацией (фрагмент 500 наблюдений), тогда как потеря окна переходит. Поскольку метрическое окно 200 по умолчанию, updateMetricsAndFit
измеряет уровень на основе последних 200 наблюдений в каждых 500 фрагментах наблюдения.
β 313 изменений резко и затем выравнивается как updateMetricsAndFit
фрагменты процессов наблюдений.