loss

Потеря линейной модели для пошагового обучения на пакете данных

Описание

loss возвращает регрессию или потерю классификации сконфигурированной модели пошагового обучения для линейной регрессии (incrementalRegressionLinear объект) или линейная бинарная классификация (incrementalClassificationLinear объект.

Чтобы измерить производительность модели на потоке данных и сохранить результаты в выходной модели, вызвать updateMetrics или updateMetricsAndFit.

пример

L = loss(Mdl,X,Y) возвращает потерю для модели Mdl пошагового обучения использование пакета данных о предикторе X и соответствующие ответы Y.

пример

L = loss(Mdl,X,Y,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары "имя-значение". Например, можно указать, что столбцы матрицы данных предиктора соответствуют наблюдениям или задают функцию потерь классификации.

Примеры

свернуть все

Уровень инкрементной модели при потоковой передаче данных измерен тремя способами:

  1. Совокупные метрики измеряют уровень начиная с запуска пошагового обучения.

  2. Метрики окна измеряют уровень на заданном окне наблюдений. Метрики обновляются каждый раз процессы модели заданное окно.

  3. 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 путем определения имен классов, предшествующее распределение класса (универсальная форма), и произвольный коэффициент и значения смещения. Задайте метрический размер окна 1 000 наблюдений.

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 наблюдений:

  1. Вызовите updateMetrics измерять совокупный уровень и эффективность в окне наблюдений. Перезапишите предыдущую инкрементную модель с новой, чтобы отследить показатели производительности.

  2. Вызовите loss измерять производительность модели на входящем фрагменте.

  3. Вызовите fit подбирать модель к входящему фрагменту. Перезапишите предыдущую инкрементную модель с новой, адаптированной к входящему наблюдению.

  4. Сохраните все показатели производительности, чтобы видеть, как они развиваются во время пошагового обучения.

% 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')

Figure contains an axes. The axes contains 4 objects of type line, constantline. These objects represent Cumulative, Window, Loss.

В метрический период прогрева (область слева от красной линии), желтая линия представляет ошибку классификации на каждом входящем фрагменте данных. После метрического периода прогрева, Mdl отслеживает совокупные метрики и метрики окна. Совокупные и пакетные потери сходятся как fit функция подбирает инкрементную модель к входящим данным.

Подбирайте модель пошагового обучения для регрессии к потоковой передаче данных и вычислите среднее абсолютное отклонение (MAD) на входящих пакетах данных.

Загрузите набор данных манипулятора. Получите объем выборки n и количество переменных предикторов p.

load robotarm
n = numel(ytrain);
p = size(Xtrain,2);

Для получения дополнительной информации на наборе данных, введите Description в командной строке.

Создайте инкрементную линейную модель для регрессии. Сконфигурируйте модель можно следующим образом:

  • Задайте метрический период прогрева 1 000 наблюдений.

  • Задайте метрический размер окна 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)

Figure contains an axes. The axes contains 4 objects of type line, constantline. These objects represent Cumulative, Window, Chunk.

График предлагает следующее:

  • updateMetrics вычисляет показатели производительности после метрического периода прогрева только.

  • updateMetrics вычисляет совокупные метрики во время каждой итерации.

  • updateMetrics вычисляет метрики окна после обработки 500 наблюдений

  • Поскольку Mdl был сконфигурирован, чтобы предсказать наблюдения с начала пошагового обучения, loss может вычислить MAD на каждом входящем фрагменте данных.

Входные параметры

свернуть все

Модель пошагового обучения в виде 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 должны быть непустые массивы.

Пакет данных о предикторе, с которыми можно вычислить потерю в виде матрицы с плавающей точкой наблюдений n и Mdl.NumPredictors переменные предикторы. Значение 'ObservationsIn' аргумент пары "имя-значение" определяет ориентацию переменных и наблюдения.

Продолжительность наблюдения маркирует Y и количество наблюдений в X должно быть равным; Y (j) метка наблюдения j (строка или столбец) в X.

Примечание

loss поддержки только входные данные о предикторе с плавающей точкой. Если входная модель Mdl представляет конвертированное, традиционно обучил подгонку модели к категориальным данным, использовать dummyvar преобразовывать каждую категориальную переменную в числовую матрицу фиктивных переменных и конкатенировать все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации смотрите Фиктивные Переменные.

Типы данных: single | double

Пакет меток, с которыми можно вычислить потерю в виде категориального, символа, или массива строк, логического или вектора с плавающей точкой или массива ячеек из символьных векторов для проблем классификации; или вектор с плавающей точкой для проблем регрессии.

Продолжительность наблюдения маркирует 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' и встроенное имя функции потерь или указатель на функцию.

  • Проблемы классификации: следующая таблица приводит доступные функции потерь когда Mdl incrementalClassificationLinear модель. Задайте тот с помощью его соответствующего вектора символов или строкового скаляра.

    ИмяОписание
    "binodeviance"Биномиальное отклонение
    "classiferror" (значение по умолчанию)Уровень Misclassification в десятичном числе
    "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 (pQ)= 1 , если наблюдение p находится в классе q, для каждого наблюдения в заданных данных. Установите другой элемент в строке p к 0.

    • S n-by-2 числовая матрица предсказанных классификационных оценок. S похоже на score выход predict, где строки соответствуют наблюдениям в данных, и порядок следования столбцов соответствует порядку класса в ClassNames свойство. S (pQ) классификационная оценка наблюдения p будучи классифицированным на класс q.

    • W n-by-1 числовой вектор из весов наблюдения.

  • Проблемы регрессии: следующая таблица приводит доступные функции потерь когда Mdl incrementalRegressionLinear модель. Задайте тот с помощью его соответствующего вектора символов или строкового скаляра.

    ИмяОписаниеУченики, поддерживающие метрику
    "epsiloninsensitive"Эпсилон нечувствительная потеря'svm'
    "mse" (значение по умолчанию)Квадратичная невязка взвешенного среднего'svm' и 'leastsquares'

    Для получения дополнительной информации смотрите Потерю Регрессии.

    Чтобы задать пользовательскую функцию потерь, используйте обозначение указателя на функцию. Функция должна иметь эту форму:

    lossval = lossfcn(Y,YFit,W)

    • Выходной аргумент lossval скаляр с плавающей точкой.

    • Вы задаете имя функции (lossfcn).

    • Y длина n числовой вектор из наблюдаемых ответов.

    • YFit длина n числовой вектор из соответствующих предсказанных ответов.

    • W n-by-1 числовой вектор из весов наблюдения.

Пример: 'LossFun',"mse"

Пример: 'LossFun', @lossfcn

Типы данных: char | string | function_handle

Размерность наблюдения данных о предикторе в виде разделенной запятой пары, состоящей из 'ObservationsIn' и 'columns' или 'rows'.

Типы данных: char | string

Пакет весов наблюдения в виде разделенной запятой пары, состоящей из 'Weights' и вектор с плавающей точкой из положительных значений. loss взвешивает наблюдения во входных данных с соответствующими значениями в Weights. Размер Weights должен равняться n, который является количеством наблюдений во входных данных.

По умолчанию, Weights единицы (n,1).

Для получения дополнительной информации смотрите Веса Наблюдения.

Типы данных: double | single

Выходные аргументы

свернуть все

Классификация или потеря регрессии, возвращенная в виде числа. Интерпретация L зависит от Weights и LossFun.

Больше о

свернуть все

Потеря классификации

Функции Classification loss измеряют прогнозирующую погрешность моделей классификации. Когда вы сравниваете тот же тип потери среди многих моделей, более низкая потеря указывает на лучшую прогнозную модель.

Рассмотрите следующий сценарий.

  • L является средневзвешенной потерей классификации.

  • n является объемом выборки.

  • Для бинарной классификации:

    • yj является наблюдаемой меткой класса. Программные коды это как –1 или 1, указывая на отрицательный или положительный класс (или первый или второй класс в ClassNames свойство), соответственно.

    • f (Xj) является классификационной оценкой положительного класса для наблюдения (строка) j данных о предикторе X.

    • mj = yj f (Xj) является классификационной оценкой для классификации наблюдения j в класс, соответствующий yj. Положительные значения mj указывают на правильную классификацию и не способствуют очень средней потере. Отрицательные величины mj указывают на неправильную классификацию и значительно способствуют средней потере.

  • Весом для наблюдения j является wj.

Учитывая этот сценарий, следующая таблица описывает поддерживаемые функции потерь, которые можно задать при помощи 'LossFun' аргумент пары "имя-значение".

Функция потерьЗначение LossFunУравнение
Биномиальное отклонение"binodeviance"L=j=1nwjlog{1+exp[2mj]}.
Экспоненциальная потеря"exponential"L=j=1nwjexp(mj).
Уровень Misclassification в десятичном числе"classiferror"

L=j=1nwjI{y^jyj}.

y^j метка класса, соответствующая классу с максимальным счетом. I {·} является функцией индикатора.

Потеря стержня"hinge"L=j=1nwjmax{0,1mj}.
Потеря логита"logit"L=j=1nwjlog(1+exp(mj)).
Квадратичная потеря"quadratic"L=j=1nwj(1mj)2.

Этот рисунок сравнивает функции потерь по счету m для одного наблюдения. Некоторые функции нормированы, чтобы пройти через точку (0,1).

Comparison of classification losses for different loss functions

Потеря регрессии

Функции Regression loss измеряют прогнозирующую погрешность моделей регрессии. Когда вы сравниваете тот же тип потери среди многих моделей, более низкая потеря указывает на лучшую прогнозную модель.

Рассмотрите следующий сценарий.

  • L является средневзвешенной потерей классификации.

  • n является объемом выборки.

  • yj является наблюдаемым ответом наблюдения j.

  • f (Xj) = β 0 + xj β является ожидаемым значением наблюдения j данных о предикторе X, где β 0 является смещением, и β является вектором из коэффициентов.

  • Весом для наблюдения j является wj.

Учитывая этот сценарий, следующая таблица описывает поддерживаемые функции потерь, которые можно задать при помощи 'LossFun' аргумент пары "имя-значение".

Функция потерьЗначение LossFunУравнение
Эпсилон нечувствительная потеря"epsiloninsensitive"

L=max[0,|yf(x)|ε].

Среднеквадратическая ошибка"mse"

L=[yf(x)]2.

Алгоритмы

свернуть все

Веса наблюдения

Для проблем классификации, если предшествующее вероятностное распределение класса известно (другими словами, предшествующее распределение не является эмпирическим), loss нормирует веса наблюдения, чтобы суммировать к предшествующим вероятностям класса в соответствующих классах. Это действие подразумевает, что веса наблюдения являются соответствующими предшествующими вероятностями класса по умолчанию.

Для проблем регрессии или если предшествующее вероятностное распределение класса является эмпирическим, программное обеспечение нормирует заданные веса наблюдения, чтобы суммировать к 1 каждому разу, когда вы вызываете loss.

Расширенные возможности

Введенный в R2020b