Обновите метрики производительности модели пошагового обучения на новых данных
Учитывая потоковую передачу данных, 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: [60×1 double] Bias: -0.2998 Lambda: 8.2967e-05 Learner: 'svm' Properties, Methods
TTMdl
ClassificationLinear
объект модели, представляющий традиционно обученную линейную модель для бинарной модели классификации.
Преобразуйте обученную модель
Преобразуйте традиционно обученную модель классификации в бинарную классификацию линейная модель для пошагового обучения.
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalClassificationLinear IsWarm: 1 Metrics: [1×2 table] ClassNames: [0 1] ScoreTransform: 'none' Beta: [60×1 double] Bias: -0.2998 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: [1×2 table] ClassNames: [1×0 double] ScoreTransform: 'none' Beta: [0×1 double] Bias: 0 Learner: 'svm' Properties, Methods
isWarm = Mdl.IsWarm
isWarm = logical
0
mwp = Mdl.MetricsWarmupPeriod
mwp = 1000
numObsBeforeMetrics = Mdl.MetricsWarmupPeriod + Mdl.EstimationPeriod
numObsBeforeMetrics = 6000
Mdl
incrementalClassificationLinear
модель. Все его свойства только для чтения.
Mdl.IsWarm
0
, поэтому, Mdl
не является теплым. Эта характеристика означает, что необходимо передать модель fit
и обучите модель на 6000
наблюдения, в этом случае, перед updateMetrics
может отследить метрики.
Загрузите набор данных деятельности человека. Случайным образом переставьте данные.
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;
Используйте fit
подбирать инкрементную модель к обучающим данным, во фрагментах 50 наблюдений за один раз, симулировать поток данных. В каждой итерации:
Процесс 50 наблюдений.
Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.
Хранилище , количество учебных наблюдений и априорная вероятность ли перемещенный предмет (Y
= true
) контролировать их эволюцию во время инкрементного обучения.
% 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}]';
Сконфигурируйте модель линейной регрессии для пошагового обучения так, чтобы оно не имело оценки или метрического периода прогрева, и метрический размер окна 1000. Подбирайте сконфигурированную модель к первым 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
объект модели, созданный непосредственно или путем преобразования поддерживаемого традиционно обученного использования модели машинного обучения 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'
.
'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
. Для получения дополнительной информации см. Алгоритмы.
Для проблем классификации, если ClassNames
свойство входной модели Mdl
пустой массив, updateMetrics
устанавливает ClassNames
свойство выходной модели Mdl
к unique(Y)
.
В отличие от традиционного обучения, (протягивает) отдельный тест, набор не может существовать для пошагового обучения. Поэтому, чтобы обработать каждый входящий фрагмент данных как набор тестов, передайте инкрементную модель и каждый входящий фрагмент к 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 измерений от предыдущего пакета.
Для проблем классификации, если предшествующее вероятностное распределение класса известно (Mdl.Prior
не состоит из NaN
значения, updateMetrics
нормирует веса наблюдения, чтобы суммировать к предшествующим вероятностям класса в соответствующих классах. Это действие подразумевает, что веса наблюдения являются соответствующими предшествующими вероятностями класса по умолчанию.
Для проблем регрессии или если предшествующее вероятностное распределение класса неизвестно, программное обеспечение нормирует заданные веса наблюдения, чтобы суммировать к 1 каждому разу, когда вы вызываете updateMetrics
.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.