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-by-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

Типы данных: логический | char | string

Свойства

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

Можно установить большинство свойств при помощи синтаксиса аргумента пары "имя-значение" только, когда вы вызываете incrementalRegressionLinear. Можно установить некоторые свойства, когда вы вызываете incrementalLearner преобразовывать традиционно обученную модель. Вы не можете установить свойства FittedLoss, NumTrainingObservations\mu\sigmaОпции решателя , и IsWarm.

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

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

Линейные коэффициенты модели β в виде NumPredictors- 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 свойство традиционно обученной модели.

Типы данных: логический

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

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

Если 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'Stochastic gradient descent (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

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

Гребень (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 свойство традиционно обученной модели.

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Программные процессы данные в порядке получены.

Типы данных: логический

Параметры показателей производительности

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

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

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

Типы данных: логический

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

Метрики производительности модели, обновленные во время пошагового обучения 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 должно быть подходящим к данным, прежде чем можно будет использовать их, чтобы выполнить любые другие операции. Программное обеспечение устанавливает период оценки на 1 000 потому что половина ширины эпсилона нечувствительная полоса 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 обрабатывает первые 1 000 наблюдений, это хранит буфер, чтобы оценить 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 objects. Axes object 1 contains 2 objects of type line, constantline. Axes object 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 работают хорошо на проблему.

  • Укажите, что инкрементные подходящие функции обрабатывают сырые данные (нестандартизированные) данные о предикторе.

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

  • Задайте метрический размер окна 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 objects. Axes object 1 contains 2 objects of type line, constantline. Axes object 2 contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes object 3 contains 3 objects of type line, constantline. These objects represent Cumulative, Window. Axes object 4 contains 3 objects of type line, constantline. These objects represent Cumulative, Window.

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

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

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

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

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

Обучите модель линейной регрессии при помощи fitrlinear, преобразуйте его в инкрементного ученика, отследите его эффективность и соответствуйте ему к потоковой передаче данных. Перенесите опции обучения от традиционного до пошагового обучения.

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

Загрузите 2 015 наборов данных корпуса Нью-Йорк Сити и переставьте данные. Для получения дополнительной информации о данных смотрите, что Нью-Йорк Сити Открывает Данные.

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 objects. Axes object 1 contains 2 objects of type line. These objects represent Cumulative, Window. Axes object 2 contains an object of type line.

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

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

Больше о

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

Советы

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

Алгоритмы

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

Ссылки

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

[2] Лэнгфорд, J., Л. Ли и Т. Чжан. “Разреженное Дистанционное обучение Через Усеченный Градиент”. Дж. Мах. Учиться. Res., Издание 10, 2009, стр 777–801.

[3] Шалев-Шварц, S., И. Зингер и Н. Сребро. “Pegasos: Основной Предполагаемый Решатель Подградиента для SVM”. Продолжения 24-й Международной конференции по вопросам Машинного обучения, ICML ’07, 2007, стр 807–814.

[4] Сюй, Вэй. “К Оптимальному Один Крупный масштаб Передачи Изучение с Усредненным Стохастическим Градиентным спуском”. CoRR, abs/1107.2490, 2011.

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

Введенный в R2020b