Обновляйте метрики эффективности в линейной модели для инкрементного обучения с учетом новых данных и обучайте модель
Данные потоковой передачи, updateMetricsAndFit
сначала оценивает эффективность сконфигурированной модели инкрементного обучения для линейной регрессии (incrementalRegressionLinear
объект) или линейная двоичная классификация (incrementalClassificationLinear
объект) вызовом updateMetrics
о поступающих данных. Тогда updateMetricsAndFit
подходит для модели с этими данными путем вызова fit
. Другими словами, updateMetricsAndFit
выполняет prequential evaluation, потому что он обрабатывает каждый входящий фрагмент данных как тестовый набор и отслеживает метрики эффективности, измеренные кумулятивно и в заданном окне [1].
updateMetricsAndFit
предоставляет простой способ обновить метрики производительности модели и обучить модель на каждом фрагменту данных. Также можно выполнить операции отдельно путем вызова updateMetrics
а затем fit
, что позволяет получить большую гибкость (для примера можно решить, нужно ли обучать модель на основе ее эффективности на фрагменте данных).
возвращает модель инкрементного обучения Mdl
= updateMetricsAndFit(Mdl
,X
,Y
)Mdl
, которая является входом моделью инкрементного обучения Mdl
со следующими изменениями:
updateMetricsAndFit
измеряет производительность модели на входящих данных предиктора и отклика, X
и Y
соответственно. Когда модель входа warm (Mdl.IsWarm
является true
), updateMetricsAndFit
перезаписывает ранее вычисленные метрики, хранящиеся в Metrics
свойство с новыми значениями. В противном случае, updateMetricsAndFit
хранит NaN
значения в Metrics
вместо этого.
updateMetricsAndFit
подходит для модифицированной модели к входящим данным при помощи следующей процедуры:
Входная и выходная модели имеют совпадающий тип данных.
Создайте пошаговую линейную модель SVM по умолчанию для двоичной классификации.
Mdl = incrementalClassificationLinear()
Mdl = incrementalClassificationLinear IsWarm: 0 Metrics: [1x2 table] ClassNames: [1x0 double] ScoreTransform: 'none' Beta: [0x1 double] Bias: 0 Learner: 'svm' Properties, Methods
Mdl
является incrementalClassificationLinear
объект модели. Все его свойства доступны только для чтения.
Mdl
необходимо соответствовать данным, прежде чем использовать их для выполнения любых других операций.
Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные.
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;
Подгонка инкрементальной модели к обучающим данным с помощью updateMetricsAndfit
функция. При каждой итерации:
Симулируйте поток данных путем обработки фрагмента 50 наблюдений.
Перезаписать предыдущую инкрементальную модель на новую, подобранную входящему наблюдению.
Магазин , совокупные метрики и метрики окна, чтобы увидеть, как они развиваются во время инкрементного обучения.
% 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 = updateMetricsAndFit(Mdl,X(idx,:),Y(idx)); ce{j,:} = Mdl.Metrics{"ClassificationError",:}; beta1(j + 1) = Mdl.Beta(1); end
Mdl
является incrementalClassificationLinear
объект модели обучен на всех данных в потоке. Во время инкрементного обучения и после прогрева модели updateMetricsAndFit
проверяет эффективность модели при входящем наблюдении, а затем подбирает модель к этому наблюдению.
Чтобы увидеть, как метрики эффективности и развивался во время обучения, строил их на отдельных подграфиках.
figure; subplot(2,1,1) plot(beta1) ylabel('\beta_1') xlim([0 nchunk]); xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); subplot(2,1,2) h = plot(ce.Variables); xlim([0 nchunk]); ylabel('Classification Error') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,'g-.'); legend(h,ce.Properties.VariableNames) xlabel('Iteration')
График предполагает, что updateMetricsAndFit
делает следующее:
Подгонка во время всех итераций инкрементного обучения.
Вычислите показатели эффективности только после периода прогрева метрики.
Вычислите совокупные метрики во время каждой итерации.
Вычислите метрики окна после обработки 500 наблюдений.
Обучите линейную регрессионую модель при помощи fitrlinear
преобразуйте его в пошагового ученика, отслеживайте его эффективность и подгоняйте к потоковым данным. Перенос опций обучения от традиционного к инкрементному обучению.
Загрузка и предварительная обработка данных
Загрузите набор данных о корпусе NYC 2015 года и перетащите данные. Для получения дополнительной информации о данных смотрите Открытые данные NYC.
load NYCHousing2015 rng(1); % For reproducibility n = size(NYCHousing2015,1); idxshuff = randsample(n,n); NYCHousing2015 = NYCHousing2015(idxshuff,:);
Предположим, что данные, собранные с Манхэттена (BOROUGH
= 1
) был собран с помощью нового метода, который удваивает его качество. Создайте весовую переменную, которая приписывает 2 наблюдениям, собранным с Манхэттена, и 1 всем остальным наблюдениям.
n = size(NYCHousing2015,1); NYCHousing2015.W = ones(n,1) + (NYCHousing2015.BOROUGH == 1);
Извлеките переменную отклика 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}]';
Обучите линейную регрессионую модель
Подбор линейной регрессионной модели к случайной выборке из половины данных.
idxtt = randsample([true false],n,true); TTMdl = fitrlinear(X(:,idxtt),Y(idxtt),'ObservationsIn','columns',... 'Weights',NYCHousing2015.W(idxtt))
TTMdl = RegressionLinear ResponseName: 'Y' ResponseTransform: 'none' Beta: [313x1 double] Bias: 0.1116 Lambda: 2.1977e-05 Learner: 'svm' Properties, Methods
TTMdl
является RegressionLinear
объект модели, представляющий традиционно обученную линейную регрессионую модель.
Преобразуйте обученную модель
Преобразуйте традиционно обученную линейную регрессионую модель в линейную регрессионую модель для инкрементного обучения.
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalRegressionLinear IsWarm: 1 Metrics: [1x2 table] ResponseTransform: 'none' Beta: [313x1 double] Bias: 0.1116 Learner: 'svm' Properties, Methods
Отслеживайте метрики эффективности и подгоняйте модель
Выполните инкрементальное обучение для остальных данных с помощью updateMetrics
и fit
функций. При каждой итерации:
Симулируйте поток данных путем обработки фрагмента 500 наблюдений.
Функции updateMetricsAndFit
чтобы обновить кумулятивную и оконную эпсилоновую нечувствительную потерю модели с учетом входящего фрагмента наблюдений, а затем подгонять модель к данным. Перезаписайте предыдущую инкрементальную модель, чтобы обновить потери в Metrics
свойство. Задайте, что наблюдения ориентированы в столбцах, и задайте веса наблюдений.
Сохраните потери и последний оцененный коэффициент .
% Preallocation idxil = ~idxtt; nil = sum(idxil); numObsPerChunk = 500; nchunk = floor(nil/numObsPerChunk); ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]); beta313 = [IncrementalMdl.Beta(end); zeros(nchunk,1)]; Xil = X(:,idxil); Yil = Y(idxil); Wil = NYCHousing2015.W(idxil); % Incremental fitting 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),... 'ObservationsIn','columns','Weights',Wil(idx)); ei{j,:} = IncrementalMdl.Metrics{"EpsilonInsensitiveLoss",:}; beta313(j + 1) = IncrementalMdl.Beta(end); end
IncrementalMdl
является incrementalRegressionLinear
объект модели обучен на всех данных в потоке.
Постройте график трассировки метрик эффективности и оценочного коэффициента .
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 фрагменте наблюдения.
изменяется, но быстро выключается, как fit
обрабатывает фрагменты наблюдений.
Mdl
- Модель инкрементного обучения, эффективность которой измеряется и соответствует даннымincrementalClassificationLinear
объект модели | incrementalRegressionLinear
объект моделиМодель инкрементного обучения, эффективность которой измеряется, и затем модель соответствует данным, заданным как incrementalClassificationLinear
или incrementalRegressionLinear
объект модели. Можно создавать Mdl
непосредственно или путем преобразования поддерживаемой, традиционно обученной модели машинного обучения с помощью incrementalLearner
функция. Для получения дополнительной информации см. соответствующую страницу с описанием.
Если Mdl.IsWarm
является false
, updateMetricsAndFit
не отслеживает эффективность модели. Для получения дополнительной информации см. «Алгоритмы».
X
- Фрагмент данных предиктораФрагмент данных предиктора, с помощью которого можно измерить производительность модели, а затем подогнать модель к, заданной как матрица n наблюдений и Mdl.NumPredictors
с плавающей точкой переменные предиктора. Значение
'ObservationsIn'
аргумент пары "имя-значение" определяет ориентацию переменных и наблюдений.
Длина меток наблюдений Y
и количество наблюдений в X
должна быть равной; Y
- метка j наблюдения (строка или столбец) в (j
)X
.
Примечание
Если Mdl.NumPredictors
= 0, updateMetricsAndFit
выводит количество предикторов из X
, и устанавливает свойство congruent модели выхода. В противном случае, если количество переменных предиктора в потоковых данных изменяется с Mdl.NumPredictors
, updateMetricsAndFit
выдает ошибку.
updateMetricsAndFit
поддерживает только входные данные предиктора с плавающей точкой. Если модель входа Mdl
представляет собой преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar
чтобы преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации см. Dummy Переменных.
Типы данных: single
| double
Y
- Фрагмент метокФрагмент меток, с помощью которого можно измерить производительность модели и затем подогнать модель к, заданному в виде категориальных символьных или строковых массивов, логическому вектору или вектору с плавающей точкой или массиву ячеек векторов символов для задач классификации; или вектор с плавающей точкой для регрессионных задач.
Длина меток наблюдений Y
и количество наблюдений в X
должна быть равной; Y
- метка j наблюдения (строка или столбец) в X(j
).
Для задач классификации:
updateMetricsAndFit
поддерживает только двоичную классификацию.
Когда ClassNames
свойство модели входа Mdl
не пуст, применяются следующие условия:
Если Y
содержит метку, которая не является представителем Mdl.ClassNames
, updateMetricsAndFit
выдает ошибку.
Тип данных Y
и Mdl.ClassNames
должно быть то же самое.
Типы данных: char
| string
| cell
| categorical
| logical
| single
| double
Примечание
Если наблюдение (предиктор или метка) или вес Weight
содержит по крайней мере один отсутствующий (NaN
) значение, updateMetricsAndFit
игнорирует наблюдение. Следовательно, updateMetricsAndFit
использует меньше n наблюдений для вычисления производительности модели.
Размер фрагмента n и стохастический градиентный спуск (SGD) гиперпараметра размер пакета (Mdl.BatchSize
) могут быть различными значениями. Если n < Mdl.BatchSize
, updateMetricsAndFit
использует n доступные наблюдения при применении SGD.
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'ObservationsIn','columns','Weights',W
задает, что столбцы матрицы предиктора соответствуют наблюдениям, и вектор W
содержит веса наблюдений для применения во время инкрементного обучения.'ObservationsIn'
- размерность наблюдения данных предиктора'rows'
(по умолчанию) | 'columns'
Размерность наблюдения данных предиктора, заданная как разделенная разделенными запятой парами, состоящая из 'ObservationsIn'
и 'columns'
или 'rows'
.
Типы данных: char
| string
'Weights'
- Фрагмент весов наблюденийФрагмент весов наблюдений, заданный как разделенная разделенными запятой парами, состоящая из 'Weights'
и вектор с плавающей точкой положительных значений. updateMetricsAndFit
взвешивает наблюдения в X
с соответствующими значениями в Weights
. Размер Weights
должен равняться n, это количество наблюдений в X
.
По умолчанию Weights
это таковые
.(n
,1)
Для получения дополнительной информации, включая схемы нормализации, см. «Веса наблюдений».
Типы данных: double
| single
Mdl
- Обновленная модель инкрементного обученияincrementalClassificationLinear
объект модели | incrementalRegressionLinear
объект моделиОбновленная модель инкрементного обучения, возвращенная как объект инкрементной модели обучения совпадающего типа данных, что и входная модель Mdl
, либо incrementalClassificationLinear
или incrementalRegressionLinear
.
Когда вы звоните updateMetricsAndFit
, применяются следующие условия:
Если модель не теплая, updateMetricsAndFit
не вычисляет показатели эффективности. В результате этого Metrics
свойство Mdl
остатки полностью состоят из NaN
значения. Для получения дополнительной информации см. «Алгоритмы».
Если Mdl.EstimationPeriod
> 0, updateMetricsAndFit
оценивает гиперпараметры, используя первую Mdl.EstimationPeriod
к нему перешли наблюдения; функция не обучает модель входа, используя эти данные. Однако, если входящий фрагмент n наблюдений больше или равен количеству наблюдений, остающихся в m периода оценки, updateMetricsAndFit
оценивает гиперпараметры, используя первые n - m наблюдения, и подгоняет входную модель к остальным m наблюдениям. Следовательно, программное обеспечение обновляет Beta
и Bias
свойства, свойства гиперпараметра и свойства записи, такие как NumTrainingObservations
.
Для задач классификации, если ClassNames
свойство модели входа Mdl
- пустой массив, updateMetricsAndFit
устанавливает ClassNames
свойство модели выхода Mdl
на unique(Y)
.
updateMetricsAndFit
отслеживает метрики производительности модели, заданные метками строк таблицы в Mdl.Metrics
, из новых данных, когда инкрементальная модель warm (IsWarm
свойство true
). Инкрементальная модель тепла после инкрементального подбора кривой, как updateMetricsAndFit
, подходит для инкрементальной модели, чтобы Mdl.MetricsWarmupPeriod
наблюдения, что является metrics warm-up period.
Если Mdl.EstimationPeriod
> 0, updateMetricsAndFit
оценивает гиперпараметры перед подгонкой модели к данным. Поэтому функции должны обрабатывать дополнительное EstimationPeriod
наблюдения перед началом модели периода прогрева метрики.
The Metrics
свойство инкрементальной модели хранит две формы каждой метрики эффективности как переменные (столбцы) таблицы, Cumulative
и Window
, с отдельными метриками в строках. Когда инкрементальная модель теплая, updateMetricsAndFit
обновляет метрики на следующих частотах:
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 измерений из предыдущей партии.
Для задач классификации, если известно распределение вероятностей предыдущего класса (другими словами, предшествующее распределение не является эмпирическим), updateMetricsAndFit
нормализует веса наблюдений в сумме с предшествующими вероятностями классов в соответствующих классах. Это действие подразумевает, что веса наблюдений являются соответствующими вероятностями предыдущего класса по умолчанию.
Для регрессионных задач или если распределение вероятностей предыдущего класса эмпирическое, программное обеспечение нормализует указанные веса наблюдений до суммы 1 каждый раз, когда вы вызываете updateMetricsAndFit
.
[1] Бифет, Альберт, Рикард Гавальда, Джеффри Холмс и Бернгард Пфахрингер. Machine Learning for Data Streams with Practical Example in MOA. Cambridge, MA: The MIT Press, 2007.
Указания и ограничения по применению:
Использовать saveLearnerForCoder
, loadLearnerForCoder
, и codegen
(MATLAB Coder), чтобы сгенерировать код для updateMetricsAndFit
функция. Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает updateMetricsAndFit
функция. Затем используйте codegen
чтобы сгенерировать код для функции точки входа.
Чтобы сгенерировать одноточный код C/C + + для updateMetricsAndFit, задайте аргумент
имя-значение 'DataType','single'
когда вы вызываете loadLearnerForCoder
функция.
Эта таблица содержит примечания к аргументам updateMetricsAndFit
. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
Аргумент | Примечания и ограничения |
---|---|
| Для указаний по применению и ограничений объекта модели смотрите |
|
|
|
|
Действуют следующие ограничения:
Если вы конфигурируете Mdl
для тасования данных (Mdl.Shuffle
является true
, или Mdl.Solver
является 'sgd'
или 'asgd'
), updateMetricsAndFit
функция случайным образом перетасовывает каждый входящий пакет наблюдений, прежде чем он подгоняет модель к пакету. Порядок перетасованных наблюдений может не совпадать с порядком, сгенерированным MATLAB®. Поэтому установленные коэффициенты, вычисленные в MATLAB и сгенерированным кодом, могут быть не равны.
Используйте однородный тип данных для всех входных параметров с плавающей точкой и свойств объекта, в частности, либо single
или double
.
Для получения дополнительной информации смотрите Введение в генерацию кода.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.