exponenta event banner

incrementalRegressionLinear

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

Описание

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

В отличие от других объектов модели 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 теплый (см. IsThream), 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_j, где 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-по-1 числовой вектор.

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

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

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

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

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

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

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

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

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

  • Если 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, | y f (x) | −'svm'
'mse'Линейная регрессия через обычные наименьшие квадратыСреднеквадратичная ошибка (MSE): ℓ[y,f (x)] = 12 [y f (x)] 2'leastsquares'

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

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

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

  • β является Beta.

  • x - это наблюдение из переменных p-предиктора.

  • β0 является Bias.

СтоимостьАлгоритмФункция потерьFittedLoss Стоимость
'leastsquares'Линейная регрессия через обычные наименьшие квадратыСреднеквадратичная ошибка (MSE): ℓ[y,f (x)] = 12 [y f (x)] 2'mse'
'svm'Поддержка векторной машинной регрессииЭпсилон нечувствительный: ℓ[y,f (x)] = max [0, | y f (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.

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

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

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

  • 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

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

Сила члена регуляризации хребта (L2), определяемая как неотрицательный скаляр.

При преобразовании традиционно обученной линейной модели для регрессии гребня (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 свойство традиционно обученной модели.

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 теплый (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, с момента, когда модель стала теплой (IsHeam 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 наблюдениям.

  • Отслеживание нечувствительных потерь epsilon, MSE и средней абсолютной ошибки (MAE) для измерения производительности модели. Программное обеспечение поддерживает нечувствительные потери epsilon и 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преобразуйте его в добавочный ученик, отслеживайте его производительность и подгоняйте под потоковые данные. Переносите варианты обучения с традиционного на инкрементное обучение.

Загрузка и предварительная обработка данных

Загрузите набор данных по жилью в Нью-Йорке за 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 + + требуется Coder™ MATLAB. Дополнительные сведения см. в разделе Введение в создание кода.

Алгоритмы

развернуть все

Ссылки

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

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

[3] Шалев-Шварц, С., Я. Сингер и Н. Сребро. «Pegasos: Основной оценочный вычислитель субпогренов для SVM». Материалы 24-й Международной конференции по машинному обучению, ICML "07, 2007, стр. 807-814.

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

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

.
Представлен в R2020b