incrementalClassificationLinear

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

Описание

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

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

incrementalClassificationLinear лучше всего подходит для инкрементного обучения. Для традиционного подхода к обучению SVM или линейной модели для двоичной классификации (такой как создание модели путем подбора ее к данным, выполнение перекрестной валидации, настройка гиперпараметров и так далее), смотрите fitcsvm или fitclinear. Для многоклассового инкрементного обучения с использованием наивного алгоритма Байеса смотрите incrementalClassificationNaiveBayes.

Создание

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

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

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

    Объект модели преобразованияФункция преобразования
    ClassificationSVM или CompactClassificationSVMincrementalLearner
    ClassificationLinearincrementalLearner

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

Описание

пример

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

пример

Mdl = incrementalClassificationLinear(Name,Value) устанавливает свойства и дополнительные опции, используя аргументы пары "имя-значение". Заключайте каждое имя в кавычки. Для примера, incrementalClassificationLinear('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 стандартизирует данные предиктора, используя средство предиктора и стандартные отклонения, оцененные в течение периода оценки.

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

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

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

ИмяОписание
"binodeviance"Биномиальное отклонение
"classiferror"Ошибка классификации
"exponential"Экспоненциал
"hinge"Стержень
"logit"Логистический
"quadratic"Квадратный

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

Пример: 'Metrics',["classiferror" "hinge"]

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

metric = customMetric(C,S)

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

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

  • C является n -by-2 логической матрицей с строками, указывающими класс, к которому принадлежит соответствующее наблюдение. Порядок столбцов соответствует порядку классов в ClassNames свойство. Создание C путем установки C (p, q) = 1, если наблюдение p находится в q классов, для каждого наблюдения в заданных данных. Установите другой элемент в строку p на 0.

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

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

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

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

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

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

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

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

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

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

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

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

Свойства

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

Вы можете задать большинство свойств, используя синтаксис аргумента пары "имя-значение" только при вызове incrementalClassificationLinear непосредственно. Вы можете задать некоторые свойства при вызове 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

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

Уникальные метки классов, используемые в обучении модели, заданные как категориальный или символьный массив, логический или числовой вектор или массив ячеек векторов символов. incrementalClassificationLinear сохраняет заданный строковый вектор как массив ячеек из векторов символов. ClassNames и данные отклика должны иметь совпадающий тип данных.

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

  • В противном случае инкрементальные функции аппроксимации выводят ClassNames во время обучения.

Типы данных: single | double | logical | char | cell | categorical

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

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

ЗначениеАлгоритмФункция потерьLearner Значение
'hinge'Поддерживайте векторную машинуШарнир: [y,f(x)]=max[0,1yf(x)]'svm'
'logit'Логистическая регрессияОтклонение (логистическое): [y,f(x)]=log{1+exp[yf(x)]}'logistic'

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

Тип модели линейной классификации, заданный как 'logistic' или 'svm'.

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

  • β является вектором p коэффициентов.

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

  • b - скалярное смещение.

ЗначениеАлгоритмФункция потерьFittedLoss Значение
'logistic'Логистическая регрессияОтклонение (логистическое): [y,f(x)]=log{1+exp[yf(x)]}'logit'
'svm'Поддерживайте векторную машинуШарнир: [y,f(x)]=max[0,1yf(x)]'hinge'

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

ЗначениеОписание
'empirical'Функции инкрементного обучения выводят вероятности предыдущего класса из наблюдаемых относительных частот класса в данных отклика во время инкрементного обучения (после периода оценки EstimationPeriod).
'uniform'Для каждого класса априорная вероятность равна 1/ K, где K - количество классов.
числовой векторПользовательские, нормированные предыдущие вероятности. Порядок элементов Prior соответствует элементам ClassNames свойство.

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

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

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

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

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

Эта таблица описывает доступные встроенные функции для преобразования счета.

ЗначениеОписание
'doublelogit'1/(1 + e–2x)
'invlogit'журнал (x/( 1 - x))
'ismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равным 0
'logit'1/(1 + ex)
'none' или 'identity'x (без преобразования)
'sign'-1 для x < 0
0 для x = 0
1 для x > 0
'symmetric'2 x – 1
'symmetricismax'Устанавливает счет для класса с самым большим счетом равным 1 и устанавливает счета для всех других классов равной -1
'symmetriclogit'2/(1 + ex) – 1

Для MATLAB® функцию или функцию, которую вы задаете, вводите указатель на функцию; для примера, 'ScoreTransform',@function, где:

  • function принимает n -by - K матрицу (исходные счета) и возвращает матрицу того же размера (преобразованные счета).

  • n - количество наблюдений, а строка j матрицы содержит счета j наблюдений.

  • K - количество классов numel(ClassNames), и столбец k является класс (k).

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

  • Если вы преобразовываете традиционно обученную модель, чтобы создать Mdl, ScoreTransform определяется конгруэнтным свойством традиционно обученной модели. Для примера, если ScoreTransform свойство традиционно обученной модели является функцией счета-в-апостериорно-вероятностного преобразования, вычисляемой fitPosterior или fitSVMPosterior, Mdl.ScoreTransform содержит анонимную функцию.

  • ScoreTransform является 'none' когда Learner является 'svm'.

  • ScoreTransform является 'logit' когда Learner является 'logistic'.

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

Если вы преобразовываете традиционно обученную линейную модель классификации (ClassificationLinear) для создания 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 функция всегда тасует входящий пакет данных перед подгонкой модели.

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

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

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

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

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

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

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

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

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

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

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

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

Если вы преобразовываете традиционно обученную линейную модель для двоичной классификации с гребневым штрафом (ClassificationLinear объект со свойством 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 установите значение, когда вы передаете данные модели и обучающие данные, равные либо.

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

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

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

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

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

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

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

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

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

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

  • Если Solver является 'asgd', тогда c равно 0,75 [4].

Если вы преобразовываете традиционно обученную линейную модель для двоичной классификации (ClassificationLinear) для создания 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Спрогнозируйте отклики для новых наблюдений из линейной модели для инкрементного обучения

Примеры

свернуть все

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

Mdl = incrementalClassificationLinear()
Mdl = 
  incrementalClassificationLinear

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


  Properties, Methods

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

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

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

load humanactivity
n = numel(actid);
rng(1); % For reproducibility
idx = randsample(n,n);
X = feat(idx,:);
Y = actid(idx);

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

Ответы могут быть одним из пяти классов: Сидя, Стоя, Ходьба, Бег, или Танцы. Дихотомизируйте ответ путем определения, движется ли субъект (actid > 2).

Y = Y > 2;

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

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

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

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

% Preallocation
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta1 = zeros(nchunk,1);    

% Incremental learning
for j = 1:nchunk
    ibegin = min(n,numObsPerChunk*(j-1) + 1);
    iend   = min(n,numObsPerChunk*j);
    idx = ibegin:iend;    
    Mdl = updateMetricsAndFit(Mdl,X(idx,:),Y(idx));
    ce{j,:} = Mdl.Metrics{"ClassificationError",:};
    beta1(j + 1) = Mdl.Beta(1);
end

IncrementalMdl является incrementalClassificationLinear объект модели обучен на всех данных в потоке. Во время инкрементного обучения и после прогрева модели 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(ce.Variables);
xlim([0 nchunk]);
ylabel('Classification Error')
xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.');
xline((Mdl.EstimationPeriod + Mdl.MetricsWarmupPeriod)/numObsPerChunk,'g-.');
legend(h,ce.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 делает следующее:

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

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

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

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

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

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

load humanactivity
n = numel(actid);
idx = randsample(n,n);
X = feat(idx,:);
Y = actid(idx);

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

Ответы могут быть одним из пяти классов: Сидя, Стоя, Ходя, Бега или Танцы. Дихотомизируйте ответ путем определения, движется ли субъект (actid > 2).

Y = Y > 2;

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

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

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

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

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

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

  • Отслеживайте классификацию и шарнирные метрики ошибки, чтобы измерить эффективность модели.

Mdl = incrementalClassificationLinear('Standardize',false,...
    'Solver','sgd','Lambda',0.001,'BatchSize',20,'LearnRate',0.002,...
    'MetricsWarmupPeriod',5000,'MetricsWindowSize',500,...
    'Metrics',{'classiferror' 'hinge'})
Mdl = 
  incrementalClassificationLinear

            IsWarm: 0
           Metrics: [2x2 table]
        ClassNames: [1x0 double]
    ScoreTransform: 'none'
              Beta: [0x1 double]
              Bias: 0
           Learner: 'svm'


  Properties, Methods

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

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

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

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

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

% Preallocation
numObsPerChunk = 50;
nchunk = floor(n/numObsPerChunk);
ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
hinge = 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,X(idx,:),Y(idx));
    ce{j,:} = Mdl.Metrics{"ClassificationError",:};
    hinge{j,:} = Mdl.Metrics{"HingeLoss",:};
    beta10(j + 1) = Mdl.Beta(10);
end

IncrementalMdl является incrementalClassificationLinear объект модели обучен на всех данных в потоке. Во время инкрементного обучения и после прогрева модели 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(ce.Variables);
xlim([0 nchunk]);
ylabel('Classification Error')
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,ce.Properties.VariableNames)
xlabel('Iteration')
subplot(2,2,3)
h = plot(hinge.Variables);
xlim([0 nchunk]);
ylabel('Hinge Loss')
xline(Mdl.MetricsWarmupPeriod/numObsPerChunk,'r-.');
legend(h,hinge.Properties.VariableNames)
xlabel('Iteration')

Figure contains 3 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.

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

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

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

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

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

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

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

Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные. Ориентируйте наблюдения данных предиктора в столбцах.

load humanactivity
rng(1); % For reproducibility
n = numel(actid);
idx = randsample(n,n);
X = feat(idx,:)';
Y = actid(idx);

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

Ответы могут быть одним из пяти классов: Сидя, Стоя, Ходьба, Бег, или Танцы. Дихотомизируйте ответ путем определения, движется ли субъект (actid > 2).

Y = Y > 2;

Предположим, что данные, собранные, когда субъект находился в простое (Y = false) имеет удвоенное качество, чем когда субъект двигался. Создайте весовую переменную, которая атрибутирует 2 наблюдениям, собранным от бездействующего субъекта, и 1 - движущемуся субъекту.

W = ones(n,1) + ~Y;

Обучите линейную модель для двоичной классификации

Подбор линейной модели для двоичной классификации к случайной выборке из половины данных.

idxtt = randsample([true false],n,true);
TTMdl = fitclinear(X(:,idxtt),Y(idxtt),'ObservationsIn','columns',...
    'Weights',W(idxtt))
TTMdl = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [60x1 double]
              Bias: -0.1107
            Lambda: 8.2967e-05
           Learner: 'svm'


  Properties, Methods

TTMdl является ClassificationLinear объект модели, представляющий традиционно обученную линейную модель для двоичной классификации.

Преобразуйте обученную модель

Преобразуйте традиционно обученную классификационную модель в двоичную классификационную линейную модель для инкрементного обучения.

IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = 
  incrementalClassificationLinear

            IsWarm: 1
           Metrics: [1x2 table]
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [60x1 double]
              Bias: -0.1107
           Learner: 'svm'


  Properties, Methods

Отдельно отслеживайте метрики эффективности и подгоняйте модель

Выполните инкрементальное обучение для остальных данных с помощью updateMetrics и fit функций. Симулируйте поток данных путем обработки 50 наблюдений за раз. При каждой итерации:

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

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

  3. Сохраните ошибку классификации и первый оцененный коэффициент β1.

% Preallocation
idxil = ~idxtt;
nil = sum(idxil);
numObsPerChunk = 50;
nchunk = floor(nil/numObsPerChunk);
ce = array2table(zeros(nchunk,2),'VariableNames',["Cumulative" "Window"]);
beta1 = [IncrementalMdl.Beta(1); zeros(nchunk,1)];
Xil = X(:,idxil);
Yil = Y(idxil);
Wil = 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));
    ce{j,:} = IncrementalMdl.Metrics{"ClassificationError",:};
    IncrementalMdl = fit(IncrementalMdl,Xil(:,idx),Yil(idx),'ObservationsIn','columns',...
        'Weights',Wil(idx));
    beta1(j + 1) = IncrementalMdl.Beta(end);
end

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

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

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

figure;
subplot(2,1,1)
h = plot(ce.Variables);
xlim([0 nchunk]);
ylabel('Classification Error')
legend(h,ce.Properties.VariableNames)
subplot(2,1,2)
plot(beta1)
ylabel('\beta_1')
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.

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

β1 сначала резко изменяется, затем постепенно выравнивается как 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