incrementalRegressionLinear

Линейная регрессионая модель для инкрементного обучения

Описание

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

В отличие от другого Statistics and Machine Learning Toolbox™ объектов модели, incrementalRegressionLinear можно вызвать непосредственно. Кроме того, можно задать опции обучения, такие как строения метрики эффективности, значения параметров и решатель цели, перед подгонкой модели к данным. После создания incrementalRegressionLinear объект подготовлен для инкрементного обучения.

incrementalRegressionLinear лучше всего подходит для инкрементного обучения. Для традиционного подхода к обучению SVM или линейной регрессионой модели (такой как создание модели путем подбора ее к данным, выполнения перекрестной валидации, настройки гиперпараметров и так далее), смотрите fitrsvm или fitrlinear.

Создание

Можно создать incrementalRegressionLinear моделировать объект несколькими способами:

  • Вызов функции непосредственно - настройте опции инкрементного обучения или задайте начальные значения для параметров линейной модели и гиперпараметров, вызывая incrementalRegressionLinear непосредственно. Этот подход лучше всего, когда у вас еще нет данных или вы хотите немедленно начать инкрементное обучение.

  • Преобразуйте традиционно обученную модель - Чтобы инициализировать линейную регрессионую модель для инкрементного обучения с помощью коэффициентов модели и гиперпараметров обученного SVM или линейного регрессионого объекта модели, можно преобразовать традиционно обученную модель в incrementalRegressionLinear моделировать объект путем передачи его в incrementalLearner функция. Эта таблица содержит ссылки на соответствующие страницы с описанием.

    Объект модели преобразованияФункция преобразования
    RegressionSVM или CompactRegressionSVMincrementalLearner
    RegressionLinearincrementalLearner

  • Вызовите функцию инкрементного обучения - fit, updateMetrics, и updateMetricsAndFit принять сконфигурированную incrementalRegressionLinear моделируйте объект и данные как вход и возвращайте incrementalRegressionLinear объект модели обновлен информацией, полученной из модели входа, и данными.

Описание

пример

Mdl = incrementalRegressionLinear() возвращает инкрементный объект линейной модели по умолчанию для регрессии Mdl. Свойства модели по умолчанию содержат заполнители для неизвестных параметров модели. Необходимо обучить модель по умолчанию, прежде чем можно будет отследить ее эффективность или сгенерировать предсказания из нее.

пример

Mdl = incrementalRegressionLinear(Name,Value) устанавливает свойства и дополнительные опции, используя аргументы пары "имя-значение". Заключайте каждое имя в кавычки. Для примера, incrementalRegressionLinear('Beta',[0.1 0.3],'Bias',1,'MetricsWarmupPeriod',100) устанавливает вектор линейных коэффициентов модели β равным [0.1 0.3], смещение β 0, чтобы 1, и период прогрева метрики до 100.

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

расширить все

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Standardize',true стандартизирует данные предиктора, используя средство предиктора и стандартные отклонения, оцененные в течение периода оценки.

Моделируйте метрики производительности для отслеживания во время инкрементного обучения, заданные как разделенная разделенными запятой парами, состоящая из 'Metrics' и встроенное имя функции потерь, строковый вектор имен, указатель на функцию (@metricName), массив структур указателей на функцию или вектор камер с именами, указатели на функцию или массивы структур.

Когда Mdl warm (см. IsWarm), updateMetrics и updateMetricsAndFit отследите показатели эффективности в свойстве Metrics Mdl.

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

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

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

Пример: 'Metrics',["epsiloninsensitive" "mse"]

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

metric = customMetric(Y,YFit)

  • Выходной аргумент metric является n-на-1 числовым вектором, где каждый элемент является потерей соответствующего наблюдения в данных, обработанных инкрементальными функциями обучения во время цикла обучения.

  • Вы выбираете имя функции (customMetric).

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

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

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

Пример: 'Metrics',struct('Metric1',@customMetric1,'Metric2',@customMetric2)

Пример: 'Metrics',{@customMetric1 @customeMetric2 'mse' struct('Metric3',@customMetric3)}

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

'Metrics' Тип данных значенияОписание Metrics Имя строки свойстваПример
Строка или вектор символовИмя соответствующей встроенной метрикиИмя строки для "epsiloninsensitive" является "EpsilonInsensitiveLoss"
Массив структурИмя поляИмя строки для struct('Metric1',@customMetric1) является "Metric1"
Указатель на функцию для функции, сохраненной в программном файлеИмя функцииИмя строки для @customMetric является "customMetric"
Анонимная функцияCustomMetric_<reservedrangesplaceholder0 >, где j метрический j в MetricsИмя строки для @(Y,YFit)customMetric(Y,YFit)... является CustomMetric_1

По умолчанию:

  • Metrics является "epsiloninsensitive" если Mdl.Learner является 'svm'.

  • Metrics является "mse" если Mdl.Learner является 'leastsquares'.

Для получения дополнительной информации о опциях показателей эффективности см. Раздел «Показатели эффективности».

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

Флаг для стандартизации данных предиктора, заданный как разделенная разделенными запятой парами, состоящая из 'Standardize' и значение в этой таблице.

ЗначениеОписание
'auto'incrementalRegressionLinear определяет, нужно ли стандартизировать переменные предиктора. См. Раздел «Стандартизация данных»
trueПрограммное обеспечение стандартизирует данные предиктора. Для получения дополнительной информации см. раздел Стандартизация данных.
falseПрограммное обеспечение не стандартизирует данные предиктора.

Пример: 'Standardize',true

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

Свойства

расширить все

Вы можете задать большинство свойств, используя синтаксис аргумента пары "имя-значение" только при вызове incrementalRegressionLinear. Вы можете задать некоторые свойства при вызове incrementalLearner для преобразования традиционно обученной модели. Вы не можете задать свойства FittedLoss, NumTrainingObservations, Mu, Sigma, SolverOptions , и IsWarm.

Параметры модели

Это свойство доступно только для чтения.

Линейные коэффициенты модели β, заданный как NumPredictors-by-1 числовой вектор.

Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, Beta задается значением Beta свойство традиционно обученной модели. В противном случае по умолчанию Beta является zeros(NumPredictors,1).

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

Это свойство доступно только для чтения.

Моделируйте точку пересечения β 0, или термин смещения, заданный как числовой скаляр.

Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, Bias задается значением Bias свойство традиционно обученной модели. В противном случае по умолчанию Bias является 0.

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

Это свойство доступно только для чтения.

Половина ширины эпсилонового нечувствительного диапазона, заданная как 'auto' или неотрицательный скаляр.

Если вы задаете 'auto' когда вы звоните incrementalRegressionLinear, оценка инкрементных функций аппроксимации Epsilon в течение периода оценки, заданного EstimationPeriod, с помощью этой процедуры:

  • Если iqr(Y) ≠ 0, Epsilon является iqr(Y)/13.49, где Y - данные отклика периода оценки.

  • Если iqr(Y) = 0 или перед подгонкой Mdl к данным, Epsilon является 0.1.

Если вы преобразовываете традиционно обученную регрессионую модель SVM, чтобы создать Mdl (Learner является 'svm'), Epsilon задается значением Epsilon свойство традиционно обученной модели.

Если Learner является 'leastsquares', вы не можете задать Epsilon и его значение NaN.

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

Это свойство доступно только для чтения.

Функция потерь, используемая для соответствия линейной модели, задается как 'epsiloninsensitive' или 'mse'.

ЗначениеАлгоритмФункция потерьLearner Значение
'epsiloninsensitive'Машина опорных векторов регрессияЭпсилон нечувствительный: [y,f(x)]=max[0,|yf(x)|ε]'svm'
'mse'Линейная регрессия через обыкновенные наименьшие квадратыСредняя квадратичная невязка (MSE): [y,f(x)]=12[yf(x)]2'leastsquares'

Это свойство доступно только для чтения.

Тип линейной регрессионой модели, заданный как 'leastsquares' или 'svm'.

В следующей таблице: f(x)=xβ+b.

  • β Beta.

  • x является наблюдением от p переменных предиктора.

  • β 0 есть Bias.

ЗначениеАлгоритмФункция потерьFittedLoss Значение
'leastsquares'Линейная регрессия через обыкновенные наименьшие квадратыСредняя квадратичная невязка (MSE): [y,f(x)]=12[yf(x)]2'mse'
'svm'Машина опорных векторов регрессияЭпсилон нечувствительный: [y,f(x)]=max[0,|yf(x)|ε]'epsiloninsensitive'

Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, Learner является учеником традиционно обученной модели.

  • Если традиционно обученная модель CompactRegressionSVM или RegressionSVM, Learner является 'svm'.

  • Если традиционно обученная модель RegressionLinear, Learner - значение Learner свойство традиционно обученной модели.

Это свойство доступно только для чтения.

Количество переменных предиктора, заданное как неотрицательный числовой скаляр.

Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, NumPredictors определяется конгруэнтным свойством традиционно обученной модели. В противном случае инкрементальные функции аппроксимации выводят NumPredictors из данных предиктора во время обучения.

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

Это свойство доступно только для чтения.

Количество наблюдений, подобранных к инкрементальной модели Mdl, заданный как неотрицательный числовой скаляр. NumTrainingObservations увеличивается при прохождении Mdl и обучающих данных fit или updateMetricsAndFit.

Примечание

Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, incrementalRegressionLinear не добавляет количество наблюдений в соответствии с традиционно обученной моделью к NumTrainingObservations.

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

Это свойство доступно только для чтения.

Функция преобразования отклика, заданная как 'none' или указатель на функцию. ResponseTransform описывает, как инкрементальные функции обучения преобразуют необработанные значения отклика.

Для MATLAB® функцию или функцию, которую вы задаете, вводите указатель на функцию; для примера, 'ResponseTransform',@function, где function принимает вектор n -by-1 (исходные отклики) и возвращает вектор той же длины (преобразованные отклики).

  • Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, ResponseTransform определяется конгруэнтным свойством традиционно обученной модели.

  • В противном случае ResponseTransform является 'none'.

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

Параметры обучения

Это свойство доступно только для чтения.

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

Примечание

  • Если Mdl подготовлен к пошаговому обучению (указаны все гиперпараметры, необходимые для обучения), incrementalRegressionLinear силы 'EstimationPeriod' на 0.

  • Если Mdl не подготовлен к инкрементному обучению, incrementalRegressionLinear устанавливает 'EstimationPeriod' на 1000.

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

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

Это свойство доступно только для чтения.

Флаг включения линейной модели точки пересечения, заданный как true или false.

ЗначениеОписание
trueincrementalRegressionLinear включает термин смещения, β 0 в линейной модели, причем инкрементальные функции аппроксимации подгонки к данным.
falseincrementalRegressionLinear устанавливает β 0 = 0.

Если Bias ≠ 0, FitBias должен быть true. Другими словами, incrementalRegressionLinear не поддерживает ограничение равенства для β 0.

Если вы преобразовываете традиционно обученную линейную регрессионую модель (RegressionLinear) для создания Mdl, FitBias задается значением ModelParameters.FitBias свойство традиционно обученной модели.

Типы данных: logical

Это свойство доступно только для чтения.

Предиктор означает, заданный как числовой вектор.

Если Mu - пустой массив [] и вы задаете 'Standardize',true, набор инкрементных функций аппроксимации Mu к средству переменной предиктора, оцененному в течение периода оценки, заданного EstimationPeriod.

Вы не можете задать Mu непосредственно.

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

Это свойство доступно только для чтения.

Стандартные отклонения предиктора, заданные как числовой вектор.

Если Sigma - пустой массив [] и вы задаете 'Standardize',true, набор инкрементных функций аппроксимации Sigma к стандартным отклонениям переменной предиктора, оцененным в течение периода оценки, заданного как EstimationPeriod.

Вы не можете задать Sigma непосредственно.

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

Это свойство доступно только для чтения.

Метод минимизации целевой функции, заданный как значение в этой таблице.

ЗначениеОписаниеПримечания
'scale-invariant'

Адаптивный масштабно-инвариантный решатель для инкрементного обучения [1]

  • Этот алгоритм свободен от параметров и может адаптироваться к различиям в шкалах предиктора. Попробуйте этот алгоритм перед использованием SGD или ASGD.

  • Чтобы перетасовать входящие пакеты перед fit функция подходит для модели, установите Shuffle на true.

'sgd'Стохастический градиентный спуск (SGD) [3][2]

  • Чтобы эффективно обучаться с SGD, стандартизируйте данные и задайте адекватные значения для гиперпараметров, используя опции, перечисленные в параметрах SGD и ASGD Solver.

  • The fit функция всегда тасует входящий пакет данных перед подгонкой модели.

'asgd'Средний стохастический градиентный спуск (ASGD) [4]

  • Чтобы эффективно обучаться с ASGD, стандартизируйте данные и задайте адекватные значения для гиперпараметров, используя опции, перечисленные в параметрах SGD и ASGD Solver.

  • The fit функция всегда тасует входящий пакет данных перед подгонкой модели.

Если вы преобразовываете традиционно обученную линейную регрессионую модель (RegressionLinear) для создания Mdl, чьи ModelParameters.Solver свойство 'sgd' или 'asgd', Solver задается как ModelParameters.Solver свойство традиционно обученной модели.

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

Это свойство доступно только для чтения.

Строения решателя задач, заданные как массив структур. Поля SolverOptions являются свойствами, характерными для заданного решателя Solver.

Типы данных: struct

Параметры SGD и решателя ASGD

Это свойство доступно только для чтения.

Мини-размер пакета, заданный как положительное целое число. При каждой итерации во время обучения, incrementalRegressionLinear использует min(BatchSize,numObs) наблюдения для вычисления подградиента, где numObs количество наблюдений в обучающих данных, переданных fit или updateMetricsAndFit.

Если вы преобразовываете традиционно обученную линейную регрессионую модель (RegressionLinear) для создания Mdl, чьи ModelParameters.Solver свойство 'sgd' или 'asgd', BatchSize задается как ModelParameters.BatchSize свойство традиционно обученной модели. В противном случае значение по умолчанию является 10.

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

Это свойство доступно только для чтения.

Коэффициент регуляризации гребня (L 2), заданный как неотрицательный скаляр.

Если вы преобразовываете традиционно обученную линейную модель для регрессии гребня (RegressionLinear объект со Regularization свойство, равное 'ridge (L2)') для создания Mdl, Lambda задается значением Lambda свойство традиционно обученной модели. В противном случае значение по умолчанию является 1e-5.

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

Это свойство доступно только для чтения.

Скорость обучения, заданный как 'auto' или положительная скалярная величина. LearnRate управляет размером шага оптимизации путем масштабирования целевого подграфика.

Когда вы задаете 'auto':

  • Если EstimationPeriod является 0, начальная скорость обучения 0.7.

  • Если EstimationPeriod > 0, начальная скорость обучения 1/sqrt(1+max(sum(X.^2,obsDim))), где obsDim является 1 если наблюдения составляют столбцы данных предиктора, и 2 в противном случае. fit и updateMetricsAndFit установите значение, когда вы передаете данные модели и обучающие данные, равные либо.

Если вы преобразовываете традиционно обученную линейную регрессионую модель (RegressionLinear) для создания Mdl, чьи ModelParameters.Solver свойство 'sgd' или 'asgd', LearnRate задается как ModelParameters.LearnRate свойство традиционно обученной модели.

The LearnRateSchedule свойство определяет скорость обучения для последующих циклов обучения.

Пример: 'LearnRate',0.001

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

Это свойство доступно только для чтения.

Расписание скорости обучения, заданное как значение в этой таблице, где LearnRate задает начальную скорость обучения ɣ 0 .

ЗначениеОписание
'constant'Эта скорость обучения является ɣ 0 для всех циклов обучения.
'decaying'

Это скорость обучения на t цикла обучения

γt=γ0(1+λγ0t)c.

  • λ - значение Lambda.

  • Если Solver является 'sgd', c = 1.

  • Если Solver является 'asgd':

    • c = 2/3 если Learner является 'leastsquares'

    • c = 3/4 если Learner является 'svm' [4]

Если вы преобразовываете традиционно обученную линейную регрессионую модель (RegressionLinear) для создания Mdl, чьи ModelParameters.Solver свойство 'sgd' или 'asgd', LearnRate является 'decaying'.

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

Адаптивные опции решателя масштаба-инварианта

Это свойство доступно только для чтения.

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

ЗначениеОписание
trueПрограмма тасует наблюдения в каждом входящем пакете данных перед обработкой набора. Это действие уменьшает смещение, вызванное схемой дискретизации.
falseПрограммное обеспечение обрабатывает данные в полученном порядке.

Типы данных: logical

Параметры метрики эффективности

Это свойство доступно только для чтения.

Флаг, указывающий, отслеживает ли инкрементальная модель метрики эффективности, заданный как false или true. Инкрементальная модель Mdl является warm (IsWarm становится true) после инкрементных функций аппроксимации подгонки MetricsWarmupPeriod наблюдения за инкрементальной моделью (то есть EstimationPeriod + MetricsWarmupPeriod наблюдения).

ЗначениеОписание
trueИнкрементальная модель Mdl тепло. Следовательно, updateMetrics и updateMetricsAndFit отслеживать показатели эффективности в Metrics свойство Mdl.
falseupdateMetrics и updateMetricsAndFit не отслеживать метрики эффективности.

Типы данных: logical

Это свойство доступно только для чтения.

Моделируйте метрики производительности, обновленные во время инкрементного обучения updateMetrics и updateMetricsAndFit, заданный как таблица с двумя столбцами и m строками, где m - количество метрик, заданное 'Metrics' аргумент пары "имя-значение".

Столбцы Metrics маркируются Cumulative и Window.

  • Cumulative: j элемента - производительность модели, измеренная метрикой j, со времени, когда модель стала теплой (IsWarm есть 1).

  • Window: j элемента - производительность модели, измеренная метрикой j, рассчитывается по всем наблюдениям в окне, заданном MetricsWindowSize свойство. Программное обеспечение обновляется Window после того, как он обрабатывает MetricsWindowSize наблюдения.

Строки помечены заданными метриками. Для получения дополнительной информации смотрите 'Metrics'.

Типы данных: table

Это свойство доступно только для чтения.

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

Для получения дополнительной информации см. «Показатели эффективности».

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

Это свойство доступно только для чтения.

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

Для получения дополнительной информации о опциях показателей эффективности см. Раздел «Показатели эффективности».

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

Функции объекта

fitОбучите линейную модель для инкрементного обучения
updateMetricsAndFitОбновляйте метрики эффективности в линейной модели для инкрементного обучения с учетом новых данных и обучайте модель
updateMetricsОбновляйте метрики эффективности в линейной модели для инкрементного обучения с учетом новых данных
lossПотеря линейной модели для инкрементного обучения на пакете данных
predictСпрогнозируйте отклики для новых наблюдений из линейной модели для инкрементного обучения

Примеры

свернуть все

Создайте пошаговую линейную модель для регрессии по умолчанию.

Mdl = incrementalRegressionLinear()
Mdl = 
  incrementalRegressionLinear

               IsWarm: 0
              Metrics: [1x2 table]
    ResponseTransform: 'none'
                 Beta: [0x1 double]
                 Bias: 0
              Learner: 'svm'


  Properties, Methods

Mdl.EstimationPeriod
ans = 1000

Mdl является incrementalRegressionLinear объект модели. Все его свойства доступны только для чтения.

Mdl необходимо соответствовать данным, прежде чем использовать их для выполнения любых других операций. Программа устанавливает период оценки равным 1000, потому что половина ширины полосы без эпсилона Epsilon неизвестно. Можно задать Epsilon к положительному скаляру с плавающей точкой при помощи 'Epsilon' аргумент пары "имя-значение". Это действие приводит к периоду оценки по умолчанию 0.

Загрузите набор данных руки робота.

load robotarm

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

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

  • Обработайте 50 наблюдений.

  • Перезаписать предыдущую инкрементальную модель на новую, подобранную входящему наблюдению.

  • Магазин β1, совокупные метрики и метрики окна, чтобы увидеть, как они развиваются во время инкрементного обучения.

% Preallocation
n = numel(ytrain);
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
ei = 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,Xtrain(idx,:),ytrain(idx));
    ei{j,:} = Mdl.Metrics{"EpsilonInsensitiveLoss",:};
    beta1(j + 1) = Mdl.Beta(1);
end

IncrementalMdl является incrementalRegressionLinear объект модели обучен на всех данных в потоке. Пока updateMetricsAndFit обрабатывает первые 1000 наблюдений, он хранит буфер для оценки Epsilon; функция не подгоняется под коэффициенты до окончания этого периода оценки. Во время инкрементного обучения и после прогрева модели updateMetricsAndFit проверяет эффективность модели при входящем наблюдении, а затем подбирает модель к этому наблюдению.

Чтобы увидеть, как метрики эффективности и β1 развивался во время обучения, строил их на отдельных подграфиках.

figure;
subplot(2,1,1)
plot(beta1)
ylabel('\beta_1')
xlim([0 nchunk]);
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.');
subplot(2,1,2)
h = plot(ei.Variables);
xlim([0 nchunk]);
ylabel('Epsilon Insensitive Loss')
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.');
xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,'g-.');
legend(h,ei.Properties.VariableNames)
xlabel('Iteration')

Figure contains 2 axes. Axes 1 contains 2 objects of type line, constantline. Axes 2 contains 4 objects of type line, constantline. These objects represent Cumulative, Window.

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

  • После периода оценки (первые 20 итераций) подгонка β1 во время всех итераций инкрементного обучения.

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

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

  • Вычислите метрики окна после обработки 500 наблюдений (4 итерации).

Подготовьте учащегося с инкрементной регрессией путем определения периода разогрева метрики, в течение которого updateMetricsAndFit функция подходит только для модели. Задайте размер окна метрики 500 наблюдений. Обучите модель с помощью SGD и настройте размер пакета SGD, скорость обучения и параметр регуляризации.

Загрузите набор данных руки робота.

load robotarm
n = numel(ytrain);

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

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

  • Задайте решатель SGD.

  • Предположим, что значение параметров регуляризации гребня 0,001, размер пакета SGD 20, скорость обучения 0,002 и половина ширины нечувствительной к эпсилону полосы для SVM 0,05 хорошо работают для задачи.

  • Укажите, что инкрементальные функции подгонки обрабатывают необработанные (нестандартные) данные предиктора.

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

  • Задайте размер окна метрики 500 наблюдений.

  • Отслеживайте нечувствительные к эпсилону потери, MSE и среднюю абсолютную ошибку (MAE), чтобы измерить эффективность модели. Программное обеспечение поддерживает нечувствительные к эпсилону потери и MSE. Создайте анонимную функцию, которая измеряет абсолютную ошибку каждого нового наблюдения. Создайте массив структур, содержащий имя MeanAbsoluteError и ее соответствующую функцию.

maefcn = @(z,zfit)abs(z - zfit);
maemetric = struct("MeanAbsoluteError",maefcn);

Mdl = incrementalRegressionLinear('Epsilon',0.05,...
    'Solver','sgd','Lambda',0.001,'BatchSize',20,'LearnRate',0.002,...
    'Standardize',false,...
    'MetricsWarmupPeriod',1000,'MetricsWindowSize',500,...
    'Metrics',{'epsiloninsensitive' 'mse' maemetric})
Mdl = 
  incrementalRegressionLinear

               IsWarm: 0
              Metrics: [3x2 table]
    ResponseTransform: 'none'
                 Beta: [0x1 double]
                 Bias: 0
              Learner: 'svm'


  Properties, Methods

Mdl является incrementalRegressionLinear объект модели, сконфигурированный для инкрементного обучения без периода оценки.

Подгонка инкрементальной модели к данным при помощи updateMetricsAndfit функция. При каждой итерации:

  • Симулируйте поток данных путем обработки фрагмента 50 наблюдений. Обратите внимание, что размер фрагмента отличается от размера пакета SGD.

  • Перезаписать предыдущую инкрементальную модель на новую, подобранную входящему наблюдению.

  • Сохраните оцененный коэффициент β10, совокупные метрики и метрики окна, чтобы увидеть, как они развиваются во время инкрементного обучения.

% Preallocation
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
ei = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
mse = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
mae = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta10 = 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,Xtrain(idx,:),ytrain(idx));
    ei{j,:} = Mdl.Metrics{"EpsilonInsensitiveLoss",:};
    mse{j,:} = Mdl.Metrics{"MeanSquaredError",:};
    mae{j,:} = Mdl.Metrics{"MeanAbsoluteError",:};
    beta10(j + 1) = Mdl.Beta(10);
end

IncrementalMdl является incrementalRegressionLinear объект модели обучен на всех данных в потоке. Во время инкрементного обучения и после прогрева модели updateMetricsAndFit проверяет эффективность модели при входящем наблюдении, а затем подбирает модель к этому наблюдению.

Чтобы увидеть, как метрики эффективности и β10 развивался во время обучения, строил их на отдельных подграфиках.

figure;
subplot(2,2,1)
plot(beta10)
ylabel('\beta_{10}')
xlim([0 nchunk]);
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
xlabel('Iteration')
subplot(2,2,2)
h = plot(ei.Variables);
xlim([0 nchunk]);
ylabel('Epsilon Insensitive Loss')
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,ei.Properties.VariableNames)
xlabel('Iteration')
subplot(2,2,3)
h = plot(mse.Variables);
xlim([0 nchunk]);
ylabel('MSE')
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,mse.Properties.VariableNames)
xlabel('Iteration')
subplot(2,2,4)
h = plot(mae.Variables);
xlim([0 nchunk]);
ylabel('MAE')
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,mae.Properties.VariableNames)
xlabel('Iteration')

Figure contains 4 axes. Axes 1 contains 2 objects of type line, constantline. Axes 2 contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes 3 contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes 4 contains 3 objects of type line, constantline. These objects represent Cumulative, Window.

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

  • Подгонка β10 во время всех итераций инкрементного обучения.

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

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

  • Вычислите метрики окна после обработки 500 наблюдений (10 итераций).

Обучите линейную регрессионую модель при помощи 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 ко всем остальным наблюдениям.

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 наблюдений за раз. При каждой итерации:

  1. Функции updateMetrics обновить кумулятивную и оконную эпсилоновую нечувствительную потерю модели с учетом входящего фрагмента наблюдений. Перезаписайте предыдущую инкрементальную модель, чтобы обновить потери в Metrics свойство. Обратите внимание, что функция не подгоняет модель к фрагменту данных - фрагмент является «новыми» данными для модели. Задайте, что наблюдения ориентированы в столбцах, и задайте веса наблюдений.

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

  3. Сохраните потери и последний оцененный коэффициент β313.

% 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 = updateMetrics(IncrementalMdl,Xil(:,idx),Yil(idx),...
        'ObservationsIn','columns','Weights',Wil(idx));
    ei{j,:} = IncrementalMdl.Metrics{"EpsilonInsensitiveLoss",:};
    IncrementalMdl = fit(IncrementalMdl,Xil(:,idx),Yil(idx),'ObservationsIn','columns',...
        'Weights',Wil(idx));
    beta313(j + 1) = IncrementalMdl.Beta(end);
end

IncrementalMdl является incrementalRegressionLinear объект модели обучен на всех данных в потоке.

Также можно использовать updateMetricsAndFit чтобы обновить метрики эффективности модели, заданные новый фрагмент данных, и затем подгонять модель к данным.

Постройте график трассировки метрик эффективности и оценочного коэффициента β313.

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

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Cumulative, Window. Axes 2 contains an object of type line.

Совокупные потери постепенно изменяются с каждой итерацией (фрагмент 500 наблюдений), в то время как потери окна скачут. Поскольку окно метрики по умолчанию 200, updateMetrics измеряет эффективность на основе последних 200 наблюдений в каждом 500 фрагменте наблюдения.

β313 изменяется резко, затем выравнивается как fit обрабатывает фрагменты наблюдений.

Подробнее о

расширить все

Совет

  • После создания модели можно сгенерировать код C/C + +, который выполняет инкрементальное обучение в потоке данных. Для генерации кода C/C + + требуется MATLAB Coder™. Для получения дополнительной информации смотрите Введение в генерацию кода.

Алгоритмы

расширить все

Ссылки

[1] Кемпка, Михал, Войцех Котловский и Манфред К. Вармут. Адаптивные онлайновые алгоритмы масштабирования-инвариантные для обучения линейным моделям. CoRR (февраль 2019). https://arxiv.org/abs/1902.07528.

[2] Лэнгфорд, Дж., Л. Ли, и Т. Чжан. «Разреженное онлайн-обучение через усеченный градиент». Дж. Мач. Учись. Рес., том 10, 2009, стр. 777-801.

[3] Шалев-Шварц, С., Я. Сингер, и Н. Сребру. Pegasos: Primal Estimated Sub-Gradient Solver for SVM (неопр.) (недоступная ссылка). Материалы 24-й Международной конференции по машинному обучению, ICML "07, 2007, стр. 807-814.

[4] Сюй, Вэй. «К оптимальной однопроходной большой Шкале обучению со средним стохастическим градиентным спуском». CoRR, abs/1107.2490, 2011.

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

.
Введенный в R2020b
Для просмотра документации необходимо авторизоваться на сайте