Обновление показателей производительности в линейной модели для инкрементного обучения с учетом новых данных и модели поезда
Данные потоковой передачи, updateMetricsAndFit сначала оценивает производительность сконфигурированной инкрементной модели обучения для линейной регрессии (incrementalRegressionLinear объект) или линейная двоичная классификация (incrementalClassificationLinear объект) путем вызова updateMetrics по входящим данным. Тогда updateMetricsAndFit подгоняет модель к этим данным путем вызова fit. Другими словами, updateMetricsAndFit выполняет предварительную оценку, поскольку обрабатывает каждый входящий блок данных как тестовый набор и отслеживает метрики производительности, измеренные в совокупности и через указанное окно [1].
updateMetricsAndFit предоставляет простой способ обновления показателей производительности модели и обучения модели по каждому фрагменту данных. Кроме того, можно выполнить операции отдельно, позвонив по телефону updateMetrics а затем fit, что обеспечивает большую гибкость (например, можно решить, нужно ли обучать модель, основываясь на ее производительности на фрагменте данных).
возвращает инкрементную модель обучения Mdl = updateMetricsAndFit(Mdl,X,Y)Mdl, которая является входной инкрементной моделью обучения Mdl со следующими изменениями:
updateMetricsAndFit измеряет производительность модели на входящем предикторе и данных ответа, X и Y соответственно. При теплой входной модели (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преобразуйте его в добавочный ученик, отслеживайте его производительность и подгоняйте под потоковые данные. Переносите варианты обучения с традиционного на инкрементное обучение.
Загрузка и предварительная обработка данных
Загрузите набор данных по жилью в Нью-Йорке за 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и устанавливает конгруэнтное свойство выходной модели. В противном случае, если число переменных предиктора в потоковых данных изменяется с Mdl.NumPredictors, updateMetricsAndFit выдает ошибку.
updateMetricsAndFit поддерживает только входные данные предсказателя с плавающей запятой. Если входная модель Mdl представляет преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные матрицы переменных и любые другие числовые предикторы. Дополнительные сведения см. в разделе Фиктивные переменные.
Типы данных: single | double
Y - Порция этикетокФрагмент меток, с помощью которых можно измерять производительность модели, а затем подгонять модель к, указанному как категориальный, символьный или строковый массив, логический вектор или вектор с плавающей запятой или массив ячеек символьных векторов для проблем классификации; или вектор с плавающей запятой для регрессионных задач.
Длина меток наблюдения Y и число замечаний в X должны быть равными; Y( - метка наблюдения j (строка или столбец) в j)X.
Для проблем классификации:
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 является ones(.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, из новых данных, когда инкрементная модель является теплой (IsWarm свойство - true). Инкрементная модель нагревается после инкрементного фитинга, например updateMetricsAndFit, соответствует инкрементной модели Mdl.MetricsWarmupPeriod наблюдения, которые являются периодом прогрева метрик.
Если Mdl.EstimationPeriod > 0, updateMetricsAndFit оценивает гиперпараметры перед подгонкой модели к данным. Поэтому функции должны обрабатывать дополнительную EstimationPeriod наблюдения перед тем, как модель начнет период прогрева метрик.
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] Бифет, Альберт, Рикард Гавальда, Джеффри Холмс и Бернхард Пфахрингер. Машинное обучение для потоков данных с практическим примером в MOA. Кембридж, Массачусетс: MIT Press, 2007.
Примечания и ограничения по использованию:
Использовать saveLearnerForCoder, loadLearnerForCoder, и codegen (Кодер MATLAB) для создания кода для updateMetricsAndFit функция. Сохранение обучаемой модели с помощью saveLearnerForCoder. Определение функции точки входа, которая загружает сохраненную модель с помощью loadLearnerForCoder и вызывает updateMetricsAndFit функция. Затем использовать codegen для создания кода для функции точки входа.
Чтобы создать код C/C + + с одинарной точностью, укажите аргумент «имя-значение»'DataType','single' при вызове loadLearnerForCoder функция.
Эта таблица содержит примечания о аргументах updateMetricsAndFit. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
| Примечания по использованию и ограничения объекта модели см. в разделе |
|
|
|
|
Действуют следующие ограничения:
При настройке Mdl для перетасовки данных (Mdl.Shuffle является true, или Mdl.Solver является 'sgd' или 'asgd'), updateMetricsAndFit функция случайным образом перетасовывает каждый входящий пакет наблюдений, прежде чем он подходит модели к пакету. Порядок тасованных наблюдений может не соответствовать порядку, сгенерированному MATLAB ®. Следовательно, подобранные коэффициенты, вычисленные в MATLAB и сгенерированным кодом, могут быть не равны.
Используйте однородный тип данных для всех входных аргументов с плавающей запятой и свойств объекта, а именно: single или double.
Дополнительные сведения см. в разделе Введение в создание кода.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.