Обновите показатели производительности в линейной модели для пошагового обучения, данного новые данные, и обучите модель
Учитывая потоковую передачу данных, 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
, преобразуйте его в инкрементного ученика, отследите его эффективность и соответствуйте ему к потоковой передаче данных. Перенесите опции обучения от традиционного до пошагового обучения.
Загрузите и предварительно обработайте данные
Загрузите 2 015 наборов данных корпуса Нью-Йорк Сити и переставьте данные. Для получения дополнительной информации о данных смотрите, что Нью-Йорк Сити Открывает Данные.
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
единицы (
.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
наблюдения перед моделью запускают метрический период прогрева.
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] Bifet, Альберт, Ricard Gavaldá, Джеффри Холмс и Бернхард Пфарингер. Machine Learning for Data Streams with Practical Example in MOA. Кембридж, MA: нажатие MIT, 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.