Обновите показатели производительности в линейной модели для пошагового обучения, данного новые данные
Учитывая потоковую передачу данных, updateMetrics измеряет уровень сконфигурированной модели пошагового обучения для линейной регрессии (incrementalRegressionLinear объект) или линейная бинарная классификация (incrementalClassificationLinear объект. updateMetrics хранит показатели производительности в выходной модели.
updateMetrics допускает гибкое пошаговое обучение. После того, как вы вызываете функцию, чтобы обновить метрики производительности модели на входящем фрагменте данных, можно выполнить другие действия, прежде чем вы обучите модель к данным. Например, можно решить, необходимо ли обучить основанное на модели на его эффективности на фрагменте данных. В качестве альтернативы можно и обновить метрики производительности модели и обучить модель на данных, когда это прибывает, в одном вызове, при помощи updateMetricsAndFit функция.
Чтобы измерить производительность модели на заданном пакете данных, вызвать loss вместо этого.
возвращает модель Mdl = updateMetrics(Mdl,X,Y)Mdl пошагового обучения, который является входной моделью Mdl пошагового обучения измененный, чтобы содержать метрики производительности модели на входящем предикторе и данных об ответе, X и Y соответственно.
Когда входной моделью является warm (Mdl.IsWarm true), updateMetrics перезаписи ранее вычислили метрики, сохраненные в Metrics свойство, с новыми значениями. В противном случае, updateMetrics хранилища NaN значения в Metrics вместо этого.
Модели ввода и вывода имеют совпадающий тип данных.
Обучите линейную модель бинарной классификации при помощи fitclinear, преобразуйте его в инкрементного ученика, и затем отследите его эффективность к потоковой передаче данных.
Загрузите и предварительно обработайте данные
Загрузите набор данных деятельности человека. Случайным образом переставьте данные.
load humanactivity rng(1); % For reproducibility n = numel(actid); idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации на наборе данных, введите Description в командной строке.
Ответы могут быть одним из пяти классов: Нахождение, Положение, Обход, Выполнение или Танец. Разделите пополам ответ путем идентификации, перемещается ли предмет (actid > 2).
Y = Y > 2;
Обучите линейную модель бинарной классификации
Подбирайте линейную модель для бинарной классификации к случайной выборке половины данных.
idxtt = randsample([true false],n,true); TTMdl = fitclinear(X(idxtt,:),Y(idxtt))
TTMdl =
ClassificationLinear
ResponseName: 'Y'
ClassNames: [0 1]
ScoreTransform: 'none'
Beta: [60x1 double]
Bias: -0.4621
Lambda: 8.2967e-05
Learner: 'svm'
Properties, Methods
TTMdl ClassificationLinear объект модели, представляющий традиционно обученную линейную модель для бинарной классификации.
Преобразуйте обученную модель
Преобразуйте традиционно обученную модель классификации в бинарную классификацию линейная модель для пошагового обучения.
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl =
incrementalClassificationLinear
IsWarm: 1
Metrics: [1x2 table]
ClassNames: [0 1]
ScoreTransform: 'none'
Beta: [60x1 double]
Bias: -0.4621
Learner: 'svm'
Properties, Methods
IncrementalMdl.IsWarm
ans = logical
1
Инкрементная модель является теплой. Поэтому updateMetrics может отследить метрические определенные данные производительности модели.
Отследите показатели производительности
Отследите производительность модели на остальной части данных при помощи updateMetrics функция. Симулируйте поток данных путем обработки 50 наблюдений за один раз. В каждой итерации:
Вызовите updateMetrics обновить совокупное и ошибку классификации окон модели, учитывая входящий фрагмент наблюдений. Перезапишите предыдущую инкрементную модель, чтобы обновить потери в Metrics свойство. Обратите внимание на то, что функция не подбирает модель к фрагменту данных — фрагмент является "новыми" данными для модели.
Сохраните ошибку классификации и первый коэффициент .
% Preallocation idxil = ~idxtt; nil = sum(idxil); numObsPerChunk = 50; nchunk = floor(nil/numObsPerChunk); ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); beta1 = [IncrementalMdl.Beta(1); zeros(nchunk,1)]; Xil = X(idxil,:); Yil = Y(idxil); % Incremental fitting for j = 1:nchunk ibegin = min(nil,numObsPerChunk*(j-1) + 1); iend = min(nil,numObsPerChunk*j); idx = ibegin:iend; IncrementalMdl = updateMetrics(IncrementalMdl,Xil(idx,:),Yil(idx)); ce{j,:} = IncrementalMdl.Metrics{"ClassificationError",:}; beta1(j + 1) = IncrementalMdl.Beta(1); end
IncrementalMdl incrementalClassificationLinear объект модели, который отследил производительность модели к наблюдениям в потоке данных.
Постройте график трассировки показателей производительности и оцененного коэффициента .
figure; subplot(2,1,1) h = plot(ce.Variables); xlim([0 nchunk]); ylabel('Classification Error') legend(h,ce.Properties.VariableNames) subplot(2,1,2) plot(beta1) ylabel('\beta_1') xlim([0 nchunk]); xlabel('Iteration')

Совокупная потеря устойчива, тогда как потеря окна переходит.
не изменяется потому что updateMetrics не подбирает модель к данным.
Создайте инкрементную линейную модель SVM для бинарной классификации. Задайте период оценки 5 000 наблюдений и решателя SGD.
Mdl = incrementalClassificationLinear('EstimationPeriod',5000,'Solver','sgd')
Mdl =
incrementalClassificationLinear
IsWarm: 0
Metrics: [1x2 table]
ClassNames: [1x0 double]
ScoreTransform: 'none'
Beta: [0x1 double]
Bias: 0
Learner: 'svm'
Properties, Methods
Mdl incrementalClassificationLinear модель. Все его свойства только для чтения.
Определите, является ли модель теплой и размер метрического периода прогрева путем запроса свойств модели.
isWarm = Mdl.IsWarm
isWarm = logical
0
mwp = Mdl.MetricsWarmupPeriod
mwp = 1000
Mdl.IsWarm 0; поэтому, Mdl не является теплым.
Определите количество наблюдений инкрементные подходящие функции, такие как fit, должен обработать прежде, чем измерить уровень модели.
numObsBeforeMetrics = Mdl.MetricsWarmupPeriod + Mdl.EstimationPeriod
numObsBeforeMetrics = 6000
Загрузите набор данных деятельности человека. Случайным образом переставьте данные.
load humanactivity n = numel(actid); rng(1) % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации на наборе данных, введите Description в командной строке.
Ответы могут быть одним из пяти классов: Нахождение, Положение, Обход, Выполнение или Танец. Разделите пополам ответ путем идентификации, перемещается ли предмет (actid > 2).
Y = Y > 2;
Выполните пошаговое обучение. В каждой итерации выполните следующие действия:
Симулируйте поток данных путем обработки фрагмента 50 наблюдений.
Измерьте метрики производительности модели на входящем фрагменте с помощью updateMetrics. Перезапишите входную модель.
Подбирайте модель к входящему фрагменту. Перезапишите входную модель.
Хранилище и misclassification коэффициент ошибок, чтобы видеть, как они развиваются во время пошагового обучения.
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); beta1 = zeros(nchunk,1); % Incremental fitting for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = updateMetrics(Mdl,X(idx,:),Y(idx)); ce{j,:} = Mdl.Metrics{"ClassificationError",:}; Mdl = fit(Mdl,X(idx,:),Y(idx)); beta1(j) = Mdl.Beta(1); end
IncrementalMdl incrementalClassificationLinear объект модели, обученный на всех данных в потоке.
Чтобы видеть, как параметры, развитые во время пошагового обучения, постройте их на отдельных подграфиках.
figure; subplot(2,1,1) plot(beta1) ylabel('\beta_1') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); xlabel('Iteration') axis tight subplot(2,1,2) plot(ce.Variables); ylabel('ClassificationError') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); xline(numObsBeforeMetrics/numObsPerChunk,'g-.'); xlabel('Iteration') xlim([0 nchunk]); legend(ce.Properties.VariableNames)

mdlIsWarm = numObsBeforeMetrics/numObsPerChunk
mdlIsWarm = 120
График предлагает тот fit не подбирает модель к данным или обновляет параметры до окончания периода оценки. Кроме того, updateMetrics не отслеживает ошибку классификации до окончания оценки и метрических периодов прогрева (120 фрагментов).
Инкрементно обучите модель линейной регрессии только, когда ее эффективность ухудшится.
Загрузите и переставьте 2 015 наборов данных корпуса Нью-Йорк Сити. Для получения дополнительной информации о данных смотрите, что Нью-Йорк Сити Открывает Данные.
load NYCHousing2015 rng(1) % For reproducibility n = size(NYCHousing2015,1); shuffidx = randsample(n,n); NYCHousing2015 = NYCHousing2015(shuffidx,:);
Извлеките переменную отклика SALEPRICE из таблицы. Для числовой устойчивости масштабируйте SALEPRICE 1e6.
Y = NYCHousing2015.SALEPRICE/1e6; NYCHousing2015.SALEPRICE = [];
Создайте фиктивные переменные матрицы из категориальных предикторов.
catvars = ["BOROUGH" "BUILDINGCLASSCATEGORY" "NEIGHBORHOOD"]; dumvarstbl = varfun(@(x)dummyvar(categorical(x)),NYCHousing2015,... 'InputVariables',catvars); dumvarmat = table2array(dumvarstbl); NYCHousing2015(:,catvars) = [];
Обработайте все другие числовые переменные в таблице как линейные предикторы продажной цены. Конкатенируйте матрицу фиктивных переменных к остальной части данных о предикторе и транспонируйте данные, чтобы ускорить расчеты.
idxnum = varfun(@isnumeric,NYCHousing2015,'OutputFormat','uniform'); X = [dumvarmat NYCHousing2015{:,idxnum}]';
Сконфигурируйте модель линейной регрессии для пошагового обучения так, чтобы оно не имело оценки или метрического периода прогрева. Задайте метрический размер окна 1 000 наблюдений. Подбирайте сконфигурированную модель к первым 100 наблюдениям и укажите, что наблюдения ориентированы вдоль столбцов данных.
Mdl = incrementalRegressionLinear('EstimationPeriod',0,'MetricsWarmupPeriod',0,... 'MetricsWindowSize',1000); numObsPerChunk = 100; Mdl = fit(Mdl,X(:,1:numObsPerChunk),Y(1:numObsPerChunk),'ObservationsIn','columns');
Mdl incrementalRegressionLinear объект модели.
Выполните пошаговое обучение, с условным подбором кривой, путем выполнения этой процедуры для каждой итерации:
Симулируйте поток данных путем обработки фрагмента 100 наблюдений.
Обновите производительность модели путем вычисления эпсилона нечувствительная потеря в 200 окнах наблюдения. Укажите, что наблюдения ориентированы вдоль столбцов данных.
Подбирайте модель к фрагменту данных только, когда потеря более чем удвоится от опытных минимальных потерь. Укажите, что наблюдения ориентированы вдоль столбцов данных.
При отслеживании эффективности и подбора кривой, перезапишите предыдущую инкрементную модель.
Сохраните эпсилон нечувствительная потеря и видеть, как потеря и коэффициент развиваются во время обучения.
Отследите когда fit обучает модель.
% Preallocation n = numel(Y) - numObsPerChunk; nchunk = floor(n/numObsPerChunk); beta313 = zeros(nchunk,1); ei = array2table(nan(nchunk,2),'VariableNames',["Cumulative" "Window"]); trained = false(nchunk,1); % Incremental fitting for j = 2:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = updateMetrics(Mdl,X(:,idx),Y(idx),'ObservationsIn','columns'); ei{j,:} = Mdl.Metrics{"EpsilonInsensitiveLoss",:}; minei = min(ei{:,2}); pdiffloss = (ei{j,2} - minei)/minei*100; if pdiffloss > 100 Mdl = fit(Mdl,X(:,idx),Y(idx),'ObservationsIn','columns'); trained(j) = true; end beta313(j) = Mdl.Beta(end); end
Mdl incrementalRegressionLinear объект модели, обученный на всех данных в потоке.
Чтобы видеть, как производительность модели и развитый во время обучения, постройте их на отдельных подграфиках.
subplot(2,1,1) plot(beta313) hold on plot(find(trained),beta313(trained),'r.') ylabel('\beta_{313}') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); legend('\beta_{313}','Training occurs','Location','southeast') hold off subplot(2,1,2) plot(ei.Variables) ylabel('Epsilon Insensitive Loss') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); xlabel('Iteration') legend(ei.Properties.VariableNames)

График трассировки показывает периоды постоянных значений, во время которых потеря не удвоилась от опытного минимума.
Mdl — Модель пошагового обучения, уровень которой измеренincrementalClassificationLinear объект модели | incrementalRegressionLinear объект моделиМодель пошагового обучения, уровень которой измерен в виде incrementalClassificationLinear или incrementalRegressionLinear объект модели. Можно создать Mdl непосредственно или путем преобразования поддерживаемой, традиционно обученной модели машинного обучения использование incrementalLearner функция. Для получения дополнительной информации смотрите соответствующую страницу с описанием.
Если Mdl.IsWarm false, updateMetrics не отслеживает эффективность модели. Необходимо соответствовать Mdl к Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod наблюдения путем передачи Mdl и данные к fit прежде updateMetrics может отследить показатели производительности. Для получения дополнительной информации см. Алгоритмы.
X — Фрагмент данных о предиктореФрагмент данных о предикторе, с которыми можно измерить производительность модели в виде матрицы с плавающей точкой наблюдений n и Mdl.NumPredictors переменные предикторы. Значение 'ObservationsIn' аргумент пары "имя-значение" определяет ориентацию переменных и наблюдения.
Продолжительность наблюдения маркирует Y и количество наблюдений в X должно быть равным; Y ( метка наблюдения j (строка или столбец) в j)X.
Примечание
Если Mdl.NumPredictors = 0, updateMetrics выводит количество предикторов от X, и устанавливает конгруэнтное свойство выходной модели. В противном случае, если количество переменных предикторов в данных о потоковой передаче изменяется от Mdl.NumPredictors, updateMetrics выдает ошибку.
updateMetrics поддержки только входные данные о предикторе с плавающей точкой. Если входная модель Mdl представляет конвертированное, традиционно обучил подгонку модели к категориальным данным, использовать dummyvar преобразовывать каждую категориальную переменную в числовую матрицу фиктивных переменных и конкатенировать все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации смотрите Фиктивные Переменные.
Типы данных: single | double
Y — Фрагмент метокФрагмент меток, с которыми можно измерить производительность модели в виде категориального, символа, или массива строк, логического или вектора с плавающей точкой или массива ячеек из символьных векторов для проблем классификации; или вектор с плавающей точкой для проблем регрессии.
Продолжительность наблюдения маркирует Y и количество наблюдений в X должно быть равным; Y ( метка наблюдения j (строка или столбец) в j)X.
Для проблем классификации:
updateMetrics классификация двоичных файлов поддержек только.
Когда ClassNames свойство входной модели Mdl непусто, следующие условия применяются:
Если Y содержит метку, которая не является членом Mdl.ClassNames, updateMetrics выдает ошибку.
Тип данных Y и Mdl.ClassNames должно быть то же самое.
Типы данных: char | string | cell | categorical | logical | single | double
Примечание
Если наблюдение (предиктор или метка) или вес Weight содержит по крайней мере одно отсутствие (NaNЗначение, updateMetrics игнорирует наблюдение. Следовательно, updateMetrics использование меньше, чем наблюдения n, чтобы вычислить производительность модели.
Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'ObservationsIn','columns','Weights',W указывает, что столбцы матрицы предиктора соответствуют наблюдениям и векторному W содержит веса наблюдения, чтобы применяться во время пошагового обучения.'ObservationsIn' — Размерность наблюдения данных о предикторе'rows' (значение по умолчанию) | 'columns'Размерность наблюдения данных о предикторе в виде разделенной запятой пары, состоящей из 'ObservationsIn' и 'columns' или 'rows'.
Типы данных: char | string
'Weights' — Фрагмент весов наблюденияФрагмент весов наблюдения в виде разделенной запятой пары, состоящей из 'Weights' и вектор с плавающей точкой из положительных значений. updateMetrics взвешивает наблюдения в X с соответствующими значениями в Weights. Размер Weights должен равняться n, который является количеством наблюдений в X.
По умолчанию, Weights единицы (.n,1)
Для получения дополнительной информации, включая схемы нормализации, смотрите Веса Наблюдения.
Типы данных: double | single
Mdl — Обновленная модель пошагового обученияincrementalClassificationLinear объект модели | incrementalRegressionLinear объект моделиОбновленная модель пошагового обучения, возвращенная как объект модели пошагового обучения совпадающего типа данных как входная модель Mdl, любой incrementalClassificationLinear или incrementalRegressionLinear.
Если модель не является теплой, updateMetrics не вычисляет показатели производительности. В результате Metrics свойство Mdl остается абсолютно составленным из NaN значения. Если модель является теплой, updateMetrics вычисляет совокупные показатели производительности и показатели производительности окна на новых данных X и Y, и перезаписывает соответствующие элементы Mdl.Metrics. Все другие свойства входной модели Mdl перенесите на выходную модель Mdl. Для получения дополнительной информации см. Алгоритмы.
В отличие от традиционного обучения, пошаговое обучение не может иметь отдельного теста (затяжка) набор. Поэтому, чтобы обработать каждый входящий фрагмент данных как набор тестов, передайте инкрементную модель и каждый входящий фрагмент к updateMetrics перед обучением модель на том же использовании данных fit.
updateMetrics дорожки только метрики производительности модели, заданные метками строки таблицы в Mdl.Metrics, из новых данных, когда инкрементной моделью является warm (IsWarm свойством является true). Инкрементная модель является теплой после fit функция подбирает инкрементную модель к Mdl.MetricsWarmupPeriod наблюдения, который является metrics warm-up period.
Если Mdl.EstimationPeriod > 0, функции оценивают гиперпараметры прежде, чем подбирать модель к данным. Поэтому функции должны обработать дополнительный EstimationPeriod наблюдения перед моделью запускают метрический период прогрева.
Metrics свойство инкрементной модели хранит две формы каждого показателя производительности как переменные (столбцы) таблицы, Cumulative и Window, с отдельными метриками в строках. Когда инкрементная модель является теплой, updateMetrics обновляет метрики на следующих частотах:
Cumulative — Функция вычисляет совокупные метрики начиная с запуска отслеживания производительности модели. Функция обновляет метрики каждый раз, когда вы вызываете ее, и основывает вычисление на целом предоставленном наборе данных.
Window — Функция вычисляет метрики на основе всех наблюдений в окне, определенном Mdl.MetricsWindowSize свойство. Mdl.MetricsWindowSize также определяет частоту в который обновления программного обеспечения Window метрики. Например, если Mdl.MetricsWindowSize 20, функция вычисляет метрики на основе последних 20 наблюдений в данных, которыми снабжают (X((end – 20 + 1):end,:) и Y((end – 20 + 1):end)).
Инкрементные функции, которые отслеживают показатели производительности в окне, используют следующий процесс:
Для каждой заданной метрики сохраните буфер длины Mdl.MetricsWindowSize и буфер весов наблюдения.
Заполните элементы метрического буфера с производительностью модели на основе пакетов входящих наблюдений и сохраните соответствующие веса наблюдений в буфере весов.
Когда буфер заполнен, перезапись Mdl.Metrics.Window со средневзвешенной эффективностью в метрическом окне. Если буфер переполнен когда функциональные процессы пакет наблюдений, последнего входящего Mdl.MetricsWindowSize наблюдения вводят буфер, и самые ранние наблюдения удалены из буфера. Например, предположите Mdl.MetricsWindowSize 20, метрический буфер имеет 10 значений от ранее обработанного пакета, и поступают 15 значений. Чтобы составить длину 20 окон, функция использует измерения от 15 входящих наблюдений и последние 5 измерений от предыдущего пакета.
Для проблем классификации, если предшествующее вероятностное распределение класса известно (другими словами, предшествующее распределение не является эмпирическим), updateMetrics нормирует веса наблюдения, чтобы суммировать к предшествующим вероятностям класса в соответствующих классах. Это действие подразумевает, что веса наблюдения являются соответствующими предшествующими вероятностями класса по умолчанию.
Для проблем регрессии или если предшествующее вероятностное распределение класса является эмпирическим, программное обеспечение нормирует заданные веса наблюдения, чтобы суммировать к 1 каждому разу, когда вы вызываете updateMetrics.
Указания и ограничения по применению:
Использование saveLearnerForCoder, loadLearnerForCoder, и codegen (MATLAB Coder), чтобы сгенерировать код для updateMetrics функция. Сохраните обученную модель при помощи saveLearnerForCoder. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder и вызывает updateMetrics функция. Затем используйте codegen сгенерировать код для функции точки входа.
Чтобы сгенерировать код C/C++ с одинарной точностью для updateMetrics, задайте аргумент 'DataType','single' значения имени когда вы вызываете loadLearnerForCoder функция.
Эта таблица содержит примечания об аргументах updateMetrics. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
| Для указаний и ограничений по применению объекта модели смотрите |
|
|
|
|
Следующие ограничения применяются:
Если вы конфигурируете Mdl переставить данные (Mdl.Shuffle true, или Mdl.Solver 'sgd' или 'asgd'), updateMetrics функционируйте случайным образом переставляет каждый входящий пакет наблюдений, прежде чем он будет подбирать модель к пакету. Порядок переставленных наблюдений не может совпадать с порядком, сгенерированным MATLAB®. Поэтому, если вы соответствуете Mdl прежде, чем обновить показатели производительности, метрики, вычисленные в MATLAB и вычисленные сгенерированным кодом не могут быть равными.
Используйте тип гомогенных данных для всех входных параметров с плавающей точкой и свойств объектов, а именно, любого single или double.
Для получения дополнительной информации смотрите Введение в Генерацию кода.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.