Потеря линейной модели для инкрементного обучения по пакету данных
loss возвращает регрессию или потерю классификации сконфигурированной инкрементной модели обучения для линейной регрессии (incrementalRegressionLinear объект) или линейная двоичная классификация (incrementalClassificationLinear объект).
Чтобы измерить производительность модели в потоке данных и сохранить результаты в выходной модели, вызовите updateMetrics или updateMetricsAndFit.
Производительность инкрементной модели для потоковых данных измеряется тремя способами:
Кумулятивные метрики измеряют производительность с начала инкрементного обучения.
Метрики окна измеряют производительность указанного окна наблюдений. Метрики обновляются каждый раз при обработке модели указанного окна.
loss функция измеряет производительность только для указанного пакета данных.
Загрузите набор данных о деятельности персонала. Произвольно перетасовать данные.
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;
Создайте инкрементную линейную модель SVM для двоичной классификации. Сконфигурируйте его для loss путем указания имен классов, предшествующего распределения классов (равномерного) и произвольных значений коэффициентов и смещений. Укажите размер окна метрик, равный 1000 наблюдениям.
p = size(X,2); Beta = randn(p,1); Bias = randn(1); Mdl = incrementalClassificationLinear('Beta',Beta,'Bias',Bias,... 'ClassNames',unique(Y),'Prior','uniform','MetricsWindowSize',1000);
Mdl является incrementalClassificationLinear модель. Все его свойства доступны только для чтения. Вместо указания произвольных значений можно выполнить одно из следующих действий для настройки модели:
Обучение модели SVM с помощью fitcsvm или fitclinear на подмножестве данных (если доступно), а затем преобразовать модель в добавочный ученик с помощью incrementalLearner.
Инкрементная подгонка Mdl в данные с помощью fit.
Смоделировать поток данных и выполнить следующие действия над каждым входящим блоком из 50 наблюдений:
Звонить updateMetrics для измерения совокупной производительности и производительности в пределах окна наблюдений. Перезаписать предыдущую инкрементную модель новой, чтобы отслеживать метрики производительности.
Звонить loss для измерения производительности модели на входящем блоке.
Звонить fit для подгонки модели к входящему фрагменту. Перезаписать предыдущую инкрементную модель новой, установленной для входящего наблюдения.
Храните все показатели производительности, чтобы увидеть, как они развиваются во время инкрементного обучения.
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); ce = array2table(zeros(nchunk,3),'VariableNames',["Cumulative" "Window" "Loss"]); % Incremental learning 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,["Cumulative" "Window"]} = Mdl.Metrics{"ClassificationError",:}; ce{j,"Loss"} = loss(Mdl,X(idx,:),Y(idx)); Mdl = fit(Mdl,X(idx,:),Y(idx)); end
Mdl является incrementalClassificationLinear объект модели обучен всем данным в потоке. Во время инкрементного обучения и после разогрева модели updateMetrics проверяет производительность модели на входящем наблюдении, затем и fit функция соответствует модели для этого наблюдения. loss агностика периода прогрева метрик, поэтому измеряет ошибку классификации для всех итераций.
Чтобы увидеть, как метрики производительности развивались во время обучения, постройте их график.
figure; plot(ce.Variables); xlim([0 nchunk]); ylim([0 0.05]) ylabel('Classification Error') xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); legend(ce.Properties.VariableNames) xlabel('Iteration')

Во время периода прогрева метрик (область слева от красной линии) желтая линия представляет ошибку классификации для каждого входящего фрагмента данных. После периода прогрева метрик, Mdl отслеживает кумулятивные и оконные метрики. Совокупные и пакетные потери сходятся, поскольку fit функция соответствует инкрементной модели входящим данным.
Подгонка инкрементной модели обучения для регрессии к потоковым данным и вычисление среднего абсолютного отклонения (MAD) для входящих пакетов данных.
Загрузите набор данных руки робота. Получение размера выборки n и количество переменных предиктора p.
load robotarm
n = numel(ytrain);
p = size(Xtrain,2);Для получения подробной информации о наборе данных введите Description в командной строке.
Создайте линейную модель приращения для регрессии. Сконфигурируйте модель следующим образом:
Укажите период прогрева метрик, равный 1000 наблюдениям.
Укажите размер окна метрик, равный 500 наблюдениям.
Отслеживание среднего абсолютного отклонения (MAD) для измерения производительности модели. Создайте анонимную функцию, измеряющую абсолютную ошибку каждого нового наблюдения. Создание массива структуры, содержащего имя MeanAbsoluteError и его соответствующей функции.
Настройте модель для прогнозирования ответов, указав, что все коэффициенты регрессии и смещение равны 0.
maefcn = @(z,zfit,w)(abs(z - zfit)); maemetric = struct("MeanAbsoluteError",maefcn); Mdl = incrementalRegressionLinear('MetricsWarmupPeriod',1000,'MetricsWindowSize',500,... 'Metrics',maemetric,'Beta',zeros(p,1),'Bias',0,'EstimationPeriod',0)
Mdl =
incrementalRegressionLinear
IsWarm: 0
Metrics: [2x2 table]
ResponseTransform: 'none'
Beta: [32x1 double]
Bias: 0
Learner: 'svm'
Properties, Methods
Mdl является incrementalRegressionLinear объект модели, настроенный для инкрементного обучения.
Выполнение инкрементного обучения. При каждой итерации:
Моделирование потока данных путем обработки части из 50 наблюдений.
Звонить updateMetrics для вычисления кумулятивных и оконных метрик для входящего блока данных. Перезаписать предыдущую инкрементную модель новой, чтобы перезаписать предыдущие метрики.
Звонить loss для вычисления MAD на входящем фрагменте данных. В то время как кумулятивные и оконные метрики требуют, чтобы пользовательские потери возвращали потери для каждого наблюдения, loss требует потери всего блока. Вычислите среднее значение абсолютного отклонения.
Звонить fit для подгонки инкрементной модели к входящему фрагменту данных.
Храните кумулятивные метрики, метрики окон и блоков, чтобы увидеть, как они развиваются во время инкрементного обучения.
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); mae = array2table(zeros(nchunk,3),'VariableNames',["Cumulative" "Window" "Chunk"]); % Incremental fitting for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = updateMetrics(Mdl,Xtrain(idx,:),ytrain(idx)); mae{j,1:2} = Mdl.Metrics{"MeanAbsoluteError",:}; mae{j,3} = loss(Mdl,Xtrain(idx,:),ytrain(idx),'LossFun',@(x,y,w)mean(maefcn(x,y,w))); Mdl = fit(Mdl,Xtrain(idx,:),ytrain(idx)); end
IncrementalMdl является incrementalRegressionLinear объект модели обучен всем данным в потоке. Во время инкрементного обучения и после разогрева модели updateMetrics проверяет производительность модели на входящем наблюдении, и fit функция соответствует модели для этого наблюдения.
Постройте график показателей производительности, чтобы увидеть, как они развивались во время инкрементного обучения.
figure; h = plot(mae.Variables); ylabel('Mean Absolute Deviation') xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.'); xlabel('Iteration') legend(h,mae.Properties.VariableNames)

Сюжет предполагает следующее:
updateMetrics вычисляет показатели производительности только после периода прогрева показателей.
updateMetrics вычисляет кумулятивные метрики в течение каждой итерации.
updateMetrics вычисляет метрику окна после обработки 500 наблюдений
Поскольку Mdl был сконфигурирован для прогнозирования наблюдений с начала инкрементного обучения, loss может вычислять MAD для каждого входящего блока данных.
Mdl - Модель инкрементного обученияincrementalClassificationLinear объект модели | incrementalRegressionLinear объект моделиИнкрементная модель обучения, заданная как incrementalClassificationLinear или incrementalRegressionLinear объект модели. Можно создавать Mdl непосредственно или путем преобразования поддерживаемой, традиционно обученной модели машинного обучения с использованием incrementalLearner функция. Для получения дополнительной информации см. соответствующую справочную страницу.
Необходимо настроить Mdl вычислить его потерю на партии наблюдений.
Если Mdl является преобразованной, традиционно обученной моделью, можно вычислить ее потерю без каких-либо изменений.
В противном случае Mdl должны удовлетворять следующим критериям, которые можно указать непосредственно или с помощью фитинга Mdl к данным с использованием fit или updateMetricsAndFit.
Если Mdl является incrementalRegressionLinear модель, ее коэффициенты модели Mdl.Beta и предвзятость Mdl.Bias должны быть непустыми массивами.
Если Mdl является incrementalClassificationLinear модель, ее коэффициенты модели Mdl.Beta и предвзятость Mdl.Bias должны быть непустыми массивами, именами классов Mdl.ClassNames должен содержать два класса и предшествующее распределение классов Mdl.Prior должны содержать известные значения.
Независимо от типа объекта, если настроить модель так, чтобы функции стандартизировали данные предиктора, предиктор означает Mdl.Mu и стандартные отклонения Mdl.Sigma должны быть непустыми массивами.
X - Пакет данных предиктораПакет данных предиктора, с помощью которого можно вычислить потери, указанный как матрица с плавающей запятой из n наблюдений и Mdl.NumPredictors переменные предиктора. Значение 'ObservationsIn' аргумент пары «имя-значение» определяет ориентацию переменных и наблюдений.
Длина меток наблюдения Y и число замечаний в X должны быть равными; Y( - метка наблюдения j (строка или столбец) в j)X.
Примечание
loss поддерживает только входные данные предсказателя с плавающей запятой. Если входная модель Mdl представляет преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные матрицы переменных и любые другие числовые предикторы. Дополнительные сведения см. в разделе Фиктивные переменные.
Типы данных: single | double
Y - Партия этикетокПакет меток, с помощью которых вычисляется потеря, указанный как категориальный, символьный или строковый массив, логический вектор или вектор с плавающей запятой или массив ячеек символьных векторов для проблем классификации; или вектор с плавающей запятой для регрессионных задач.
Длина меток наблюдения Y и число замечаний в X должны быть равными; Y( - метка наблюдения j (строка или столбец) в j)X.
Для проблем классификации:
loss поддерживает только двоичную классификацию.
Когда ClassNames свойство входной модели Mdl является непустым, применяются следующие условия:
Если Y содержит метку, которая не является членом Mdl.ClassNames, loss выдает ошибку.
Тип данных Y и Mdl.ClassNames должно быть то же самое.
Типы данных: char | string | cell | categorical | logical | single | double
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'ObservationsIn','columns','Weights',W указывает, что столбцы матрицы предиктора соответствуют наблюдениям, и вектор W содержит веса наблюдения для применения.'LossFun' - Функция потерьФункция потерь, заданная как разделенная запятыми пара, состоящая из 'LossFun' и встроенное имя или дескриптор функции потери.
Проблемы классификации: в следующей таблице перечислены доступные функции потерь, когда Mdl является incrementalClassificationLinear модель. Укажите его с помощью соответствующего вектора символа или скаляра строки.
| Имя | Описание |
|---|---|
"binodeviance" | Биномиальное отклонение |
"classiferror" (по умолчанию) | Коэффициент неправильной классификации в десятичных разрядах |
"exponential" | Экспоненциальные потери |
"hinge" | Потеря шарнира |
"logit" | Логистические потери |
"quadratic" | Квадратичные потери |
Дополнительные сведения см. в разделе Потеря классификации.
Учащиеся логистической регрессии возвращают апостериорные вероятности в качестве классификационных баллов, а учащиеся SVM - нет (см. predict).
Чтобы указать пользовательскую функцию потери, используйте функцию дескриптора нотации. Функция должна иметь следующую форму:
lossval = lossfcn(C,S,W)
Выходной аргумент lossval - вектор с плавающей запятой n-by-1, где lossval( - классификационная потеря наблюдения j).j
Указывается имя функции ().lossfcn
C - логическая матрица n-by-2 со строками, указывающими класс, которому принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в ClassNames собственность. Создать C путем установки C( = p,q)1, если наблюдение находится в классе p, для каждого наблюдения в указанных данных. Установка другого элемента в строке q кому p0.
S представляет собой n-на-2 числовую матрицу прогнозируемых показателей классификации. S аналогичен score вывод predict, где строки соответствуют наблюдениям в данных, а порядок столбцов соответствует порядку классов в ClassNames собственность. S( - классификационный балл наблюдения p,q) классифицируется по классу p.q
W является n-на-1 числовым вектором весов наблюдения.
Проблемы регрессии: в следующей таблице перечислены доступные функции потерь, когда Mdl является incrementalRegressionLinear модель. Укажите его с помощью соответствующего вектора символа или скаляра строки.
| Имя | Описание | Ученики, поддерживающие метрику |
|---|---|---|
"epsiloninsensitive" | Эпсилоновая нечувствительная потеря | 'svm' |
"mse" (по умолчанию) | Средневзвешенная квадратичная ошибка | 'svm' и 'leastsquares' |
Дополнительные сведения см. в разделе Регрессионные потери.
Чтобы указать пользовательскую функцию потери, используйте функцию дескриптора нотации. Функция должна иметь следующую форму:
lossval = lossfcn(Y,YFit,W)
Выходной аргумент lossval является скаляром с плавающей точкой.
Указывается имя функции ().lossfcn
Y является n-числовым вектором наблюдаемых ответов.
YFit является n-числовым вектором соответствующих предсказанных откликов.
W является n-на-1 числовым вектором весов наблюдения.
Пример: 'LossFun',"mse"
Пример: 'LossFun',@lossfcn
Типы данных: char | string | function_handle
'ObservationsIn' - Измерение наблюдения данных предиктора'rows' (по умолчанию) | 'columns'Измерение наблюдения данных предиктора, указанное как пара, разделенная запятыми, состоящая из 'ObservationsIn' и 'columns' или 'rows'.
Типы данных: char | string
'Weights' - Партия наблюдательных грузовПартия наблюдательных весов, указанная как разделенная запятыми пара, состоящая из 'Weights' и вектор с плавающей запятой положительных значений. loss взвешивает результаты наблюдений во входных данных с соответствующими значениями в Weights. Размер Weights должно быть равно n, что является количеством наблюдений во входных данных.
По умолчанию Weights является ones(.n,1)
Дополнительные сведения см. в разделе Веса наблюдений.
Типы данных: double | single
Функции потери классификации измеряют прогностическую неточность классификационных моделей. При сравнении одного и того же типа потерь между многими моделями меньшие потери указывают на лучшую прогностическую модель.
Рассмотрим следующий сценарий.
L - средневзвешенная потеря классификации.
n - размер выборки.
Для двоичной классификации:
yj - наблюдаемая метка класса. Программное обеспечение кодирует его как -1 или 1, указывая отрицательный или положительный класс (или первый или второй класс в ClassNames свойство), соответственно.
f (Xj) - показатель классификации положительного класса для наблюдения (строки) j данных прогнозирования X.
mj = yjf (Xj) - показатель классификации для классификации наблюдения j в класс, соответствующий yj. Положительные значения mj указывают на правильную классификацию и не вносят большого вклада в средние потери. Отрицательные значения mj указывают на неправильную классификацию и вносят значительный вклад в средний убыток.
Вес для наблюдения j равен wj.
С учетом этого сценария в следующей таблице описаны поддерживаемые функции потерь, которые можно указать с помощью 'LossFun' аргумент пары имя-значение.
| Функция потерь | Значение LossFun | Уравнение |
|---|---|---|
| Биномиальное отклонение | "binodeviance" | |
| Экспоненциальные потери | "exponential" | ). |
| Коэффициент неправильной классификации в десятичных разрядах | "classiferror" | j - метка класса, соответствующая классу с максимальным баллом. I {·} - функция индикатора. |
| Потеря шарнира | "hinge" | |
| Потеря журнала | "logit" | mj)). |
| Квадратичные потери | "quadratic" | ) 2. |
На этом рисунке сравниваются функции потерь над баллом m для одного наблюдения. Некоторые функции нормализуются для прохождения через точку (0,1).

Функции регрессионных потерь измеряют прогностическую неточность регрессионных моделей. При сравнении одного и того же типа потерь между многими моделями меньшие потери указывают на лучшую прогностическую модель.
Рассмотрим следующий сценарий.
L - средневзвешенная потеря классификации.
n - размер выборки.
yj - наблюдаемый отклик наблюдения j.
f (Xj) = β0 + xjβ - предсказанное значение наблюдения j данных предсказателя X, где β0 - смещение, а β - вектор коэффициентов.
Вес для наблюдения j равен wj.
С учетом этого сценария в следующей таблице описаны поддерживаемые функции потерь, которые можно указать с помощью 'LossFun' аргумент пары имя-значение.
| Функция потерь | Значение LossFun | Уравнение |
|---|---|---|
| Эпсилоновая нечувствительная потеря | "epsiloninsensitive" |
(x) | − start]. |
| Среднеквадратичная ошибка | "mse" |
x)] 2. |
Для проблем классификации, если известно распределение вероятности предыдущего класса (другими словами, предварительное распределение не является эмпирическим), loss нормализует веса наблюдения для суммирования вероятностей предыдущего класса в соответствующих классах. Это действие подразумевает, что веса наблюдения по умолчанию являются соответствующими предшествующими вероятностями классов.
Для регрессионных задач или если предыдущее распределение вероятностей класса эмпирическое, программное обеспечение нормализует указанные веса наблюдения, чтобы суммировать 1 при каждом вызове loss.
Примечания и ограничения по использованию:
Использовать saveLearnerForCoder, loadLearnerForCoder, и codegen (Кодер MATLAB) для создания кода для loss функция. Сохранение обучаемой модели с помощью saveLearnerForCoder. Определение функции точки входа, которая загружает сохраненную модель с помощью loadLearnerForCoder и вызывает loss функция. Затем использовать codegen для создания кода для функции точки входа.
Чтобы создать код C/C + + с одинарной точностью для потери, укажите аргумент имя-значение'DataType','single' при вызове loadLearnerForCoder функция.
Эта таблица содержит примечания о аргументах loss. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
| Примечания по использованию и ограничения объекта модели см. в разделе |
|
|
|
|
| Указанная функция не может быть анонимной. |
При настройке Mdl для перетасовки данных (Mdl.Shuffle является true, или Mdl.Solver является 'sgd' или 'asgd'), loss функция случайным образом перетасовывает каждый входящий пакет наблюдений, прежде чем он подходит модели к пакету. Порядок тасованных наблюдений может не соответствовать порядку, сгенерированному MATLAB ®. Поэтому, если вы подходитеMdl перед вычислением потерь потери, вычисленные в MATLAB, и потери, вычисленные сгенерированным кодом, могут быть не равны.
Используйте однородный тип данных для всех входных аргументов с плавающей запятой и свойств объекта, а именно: single или double.
Дополнительные сведения см. в разделе Введение в создание кода.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.