Обучение линейной модели для инкрементного обучения
fit функция подходит для сконфигурированной инкрементной модели обучения для линейной регрессии (incrementalRegressionLinear объект) или линейная двоичная классификация (incrementalClassificationLinear object) для потоковой передачи данных. Для дополнительного отслеживания показателей производительности с использованием данных по мере их поступления используйте updateMetricsAndFit вместо этого.
Сведения о подгонке или перекрестной проверке регрессионной или классификационной модели для всего пакета данных одновременно см. в других моделях машинного обучения в разделе Регрессия или Классификация.
возвращает инкрементную модель обучения Mdl = fit(Mdl,X,Y)Mdl, которая представляет входную инкрементную модель обучения Mdl обучены с использованием данных предиктора и ответа, X и Y соответственно. В частности, fit реализует следующую процедуру:
Входные и выходные модели имеют одинаковый тип данных.
Создайте инкрементную линейную модель SVM по умолчанию для двоичной классификации. Укажите период оценки 5000 наблюдений и решатель SGD.
Mdl = incrementalClassificationLinear('EstimationPeriod',5000,'Solver','sgd')
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;
Подгоните инкрементную модель к учебным данным, в порциях по 50 наблюдений за раз, используя fit функция. При каждой итерации:
Моделирование потока данных путем обработки 50 наблюдений.
Перезаписать предыдущую инкрементную модель новой, установленной для входящего наблюдения.
Сохраните , количество учебных наблюдений и предварительную вероятность того, переехал ли субъект (Y = true), чтобы увидеть, как они развиваются во время дополнительного обучения.
% Preallocation numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); beta1 = zeros(nchunk,1); numtrainobs = zeros(nchunk,1); priormoved = 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 = fit(Mdl,X(idx,:),Y(idx)); beta1(j) = Mdl.Beta(1); numtrainobs(j) = Mdl.NumTrainingObservations; priormoved(j) = Mdl.Prior(Mdl.ClassNames == true); end
IncrementalMdl является incrementalClassificationLinear объект модели обучен всем данным в потоке.
Чтобы увидеть, как параметры развивались во время инкрементного обучения, постройте их график на отдельных вложенных графиках.
figure; subplot(2,2,1) plot(beta1) ylabel('\beta_1') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); xlabel('Iteration') axis tight subplot(2,2,2) plot(numtrainobs); ylabel('Number of Training Observations') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); xlabel('Iteration') axis tight subplot(2,2,3) plot(priormoved); ylabel('Prior P(Subject Moved)') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); xlabel('Iteration') axis tight

Сюжет говорит о том, что fit не соответствует модели данным и не обновляет параметры до окончания периода оценки.
Обучение линейной модели для двоичной классификации с помощью 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 наблюдений.
Звонить updateMetrics для обновления кумулятивной и оконной ошибки классификации модели с учетом входящего фрагмента наблюдений. Перезаписать предыдущую инкрементную модель для обновления потерь в Metrics собственность. Обратите внимание, что функция не подходит модели к порции данных - порция является «новыми» данными для модели. Укажите, что наблюдения ориентированы в столбцах, и укажите веса наблюдений.
Звонить fit для соответствия модели входящему фрагменту наблюдений. Перезаписать предыдущую инкрементную модель для обновления параметров модели. Укажите, что наблюдения ориентированы в столбцах, и укажите веса наблюдений.
Сохраните ошибку классификации и первый оцененный коэффициент .
% 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(1); end
IncrementalMdl является incrementalClassificationLinear объект модели обучен всем данным в потоке.
Кроме того, можно использовать updateMetricsAndFit для обновления метрик производительности модели с учетом нового фрагмента данных, а затем подгонки модели к данным.
Постройте график трассировки метрик производительности и оценочного коэффициента .
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')

Кумулятивные потери стабильны и постепенно уменьшаются, тогда как оконные потери скачет.
изменяется постепенно, затем выравнивается, как fit обрабатывает больше кусков.
Пошаговое обучение модели линейной регрессии только при снижении ее производительности.
Загрузка и перетасовка набора данных по жилью в Нью-Йорке 2015 года. Дополнительные сведения о данных см. в разделе Открытые данные NYC.
load NYCHousing2015 rng(1) % For reproducibility n = size(NYCHousing2015,1); shuffidx = randsample(n,n); NYCHousing2015 = NYCHousing2015(shuffidx,:);
Извлечь переменную ответа 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}];
Настройте модель линейной регрессии для инкрементного обучения таким образом, чтобы она не имела периода прогрева оценки или метрик. Укажите размер окна метрик 1000. Установите настроенную модель в соответствии с первыми 100 наблюдениями.
Mdl = incrementalRegressionLinear('EstimationPeriod',0,'MetricsWarmupPeriod',0,'MetricsWindowSize',1000); numObsPerChunk = 100; Mdl = fit(Mdl,X(1:numObsPerChunk,:),Y(1:numObsPerChunk));
Mdl является incrementalRegressionLinear объект модели.
Выполните пошаговое обучение с условной подгонкой, выполнив следующую процедуру для каждой итерации.
Моделирование потока данных путем одновременной обработки части из 100 наблюдений.
Обновите производительность модели путем вычисления нечувствительных потерь epsilon в пределах окна наблюдения 200.
Пригоняйте модель к порции данных только тогда, когда потери более чем вдвое превышают минимальные потери.
При отслеживании производительности и подгонки перезаписать предыдущую инкрементную модель.
Храните нечувствительные потери эпсилона и , чтобы увидеть, как потери и коэффициент развиваются во время тренировки.
Отслеживать, когда fit тренирует модель.
% Preallocation n = numel(Y) - numObsPerChunk; nchunk = floor(n/numObsPerChunk); beta313 = zeros(nchunk,1); ei = array2table(nan(nchunk,2),'VariableNames',["Cumulative" "Window"]); trained = false(nchunk,1); % Incremental fitting for j = 2:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = updateMetrics(Mdl,X(idx,:),Y(idx)); ei{j,:} = Mdl.Metrics{"EpsilonInsensitiveLoss",:}; minei = min(ei{:,2}); pdiffloss = (ei{j,2} - minei)/minei*100; if pdiffloss > 100 Mdl = fit(Mdl,X(idx,:),Y(idx)); trained(j) = true; end beta313(j) = Mdl.Beta(end); end
Mdl является incrementalRegressionLinear объект модели обучен всем данным в потоке.
Чтобы увидеть, как развивались производительность модели и во время обучения, постройте их график на отдельных вложенных графиках.
subplot(2,1,1) plot(beta313) hold on plot(find(trained),beta313(trained),'r.') ylabel('\beta_{313}') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); legend('\beta_{313}','Training occurs','Location','southeast') hold off subplot(2,1,2) plot(ei.Variables) ylabel('Epsilon Insensitive Loss') xline(Mdl.EstimationPeriod/numObsPerChunk,'r-.'); xlabel('Iteration') legend(ei.Properties.VariableNames)

График следов показывает периоды постоянных значений, в течение которых потери не удваивались по сравнению с минимальными испытанными.
Mdl - Модель инкрементного обучения в соответствии с потоковыми даннымиincrementalClassificationLinear объект модели | incrementalRegressionLinear объект моделиИнкрементная модель обучения в соответствии с потоковыми данными, заданная как incrementalClassificationLinear или incrementalRegressionLinear объект модели. Можно создавать Mdl непосредственно или путем преобразования поддерживаемой, традиционно обученной модели машинного обучения с использованием incrementalLearner функция. Для получения дополнительной информации см. соответствующую справочную страницу.
X - Фрагмент данных предиктораФрагмент данных предиктора, которому соответствует модель, заданный как матрица с плавающей запятой из n наблюдений и Mdl.NumPredictors переменные предиктора. Значение 'ObservationsIn' аргумент пары «имя-значение» определяет ориентацию переменных и наблюдений.
Длина меток наблюдения Y и число замечаний в X должны быть равными; Y( - метка наблюдения j (строка или столбец) в j)X.
Примечание
Если Mdl.NumPredictors = 0, fit выводит количество предикторов из Xи устанавливает конгруэнтное свойство выходной модели. В противном случае, если число переменных предиктора в потоковых данных изменяется с Mdl.NumPredictors, fit выдает ошибку.
fit поддерживает только входные данные предсказателя с плавающей запятой. Если входная модель Mdl представляет преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные матрицы переменных и любые другие числовые предикторы. Дополнительные сведения см. в разделе Фиктивные переменные.
Типы данных: single | double
Y - Порция этикетокФрагмент меток, к которым подходит модель, указанный как категориальный, символьный или строковый массив, логический вектор или вектор с плавающей запятой или массив ячеек символьных векторов для задач классификации; или вектор с плавающей запятой для регрессионных задач.
Длина меток наблюдения Y и число замечаний в X должны быть равными; Y( - метка наблюдения j (строка или столбец) в j)X.
Для проблем классификации:
fit поддерживает только двоичную классификацию.
Когда ClassNames свойство входной модели Mdl является непустым, применяются следующие условия:
Если Y содержит метку, которая не является членом Mdl.ClassNames, fit выдает ошибку.
Тип данных Y и Mdl.ClassNames должно быть то же самое.
Типы данных: char | string | cell | categorical | logical | single | double
Примечание
Если наблюдение (предиктор или метка) или вес Weight содержит по крайней мере один отсутствующий (NaN) значение, fit игнорирует наблюдение. Следовательно, fit использует менее n наблюдений для вычисления производительности модели.
Размер блока n и размер партии гиперпараметра стохастического градиентного спуска (SGD) (Mdl.BatchSize) могут быть различными значениями. Если n < Mdl.BatchSize, fit использует n доступных наблюдений при применении SGD.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'ObservationsIn','columns','Weights',W указывает, что столбцы матрицы предиктора соответствуют наблюдениям, и вектор W содержит веса наблюдения, применяемые во время инкрементного обучения.'ObservationsIn' - Измерение наблюдения данных предиктора'rows' (по умолчанию) | 'columns'Измерение наблюдения данных предиктора, указанное как пара, разделенная запятыми, состоящая из 'ObservationsIn' и 'columns' или 'rows'.
Типы данных: char | string
'Weights' - Порция наблюдательных весовФрагмент весов наблюдения, указанный как разделенная запятыми пара, состоящая из 'Weights' и вектор с плавающей запятой положительных значений. fit взвешивает наблюдения в X с соответствующими значениями в Weights. Размер Weights должно быть равно n, что является числом наблюдений в X.
По умолчанию Weights является ones(.n,1)
Дополнительные сведения, включая схемы нормализации, см. в разделе Веса наблюдений.
Типы данных: double | single
Mdl - Обновленная модель инкрементного обученияincrementalClassificationLinear объект модели | incrementalRegressionLinear объект моделиОбновленная инкрементная модель обучения, возвращенная как объект инкрементной модели обучения того же типа данных, что и входная модель Mdl, либо incrementalClassificationLinear или incrementalRegressionLinear.
Если Mdl.EstimationPeriod > 0, инкрементные функции фитинга updateMetricsAndFit и fit оценить гиперпараметры, используя первый Mdl.EstimationPeriod наблюдения, передаваемые любой из функций; они не обучают входную модель этим данным. Однако, если входящий фрагмент из n наблюдений больше или равен количеству наблюдений, оставшихся в периоде оценки m, fit оценивает гиперпараметры с использованием первых n-m наблюдений и подгоняет входную модель к остальным m наблюдениям. Следовательно, программное обеспечение обновляет Beta и Bias свойства, свойства гиперпараметров и свойства ведения записей, такие как NumTrainingObservations.
Для проблем классификации, если ClassNames свойство входной модели Mdl является пустым массивом, fit устанавливает ClassNames свойство выходной модели Mdl кому unique(Y).
В отличие от традиционного обучения, инкрементное обучение может не иметь отдельного набора тестов (holdout). Поэтому для обработки каждого входящего блока данных как тестового набора передайте инкрементную модель и каждый входящий блок в updateMetrics перед обучением модели тем же данным.
Для проблем классификации, если известно распределение вероятности предыдущего класса (другими словами, предварительное распределение не является эмпирическим), fit нормализует веса наблюдения для суммирования вероятностей предыдущего класса в соответствующих классах. Это действие подразумевает, что веса наблюдения по умолчанию являются соответствующими предшествующими вероятностями классов.
Для регрессионных задач или если предыдущее распределение вероятностей класса эмпирическое, программное обеспечение нормализует указанные веса наблюдения, чтобы суммировать 1 при каждом вызове fit.
Примечания и ограничения по использованию:
Использовать saveLearnerForCoder, loadLearnerForCoder, и codegen (Кодер MATLAB) для создания кода для fit функция. Сохранение обучаемой модели с помощью saveLearnerForCoder. Определение функции точки входа, которая загружает сохраненную модель с помощью loadLearnerForCoder и вызывает fit функция. Затем использовать codegen для создания кода для функции точки входа.
Чтобы создать код C/C + + с одинарной точностью для подгонки, укажите аргумент имя-значение'DataType','single' при вызове loadLearnerForCoder функция.
Эта таблица содержит примечания о аргументах fit. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
| Примечания по использованию и ограничения объекта модели см. в разделе |
|
|
|
|
Действуют следующие ограничения:
При настройке Mdl для перетасовки данных (Mdl.Shuffle является true, или Mdl.Solver является 'sgd' или 'asgd'), fit функция случайным образом перетасовывает каждый входящий пакет наблюдений, прежде чем он подходит модели к пакету. Порядок тасованных наблюдений может не соответствовать порядку, сгенерированному MATLAB ®. Следовательно, подобранные коэффициенты, вычисленные в MATLAB, и сгенерированный код могут быть не равны.
Используйте однородный тип данных для всех входных аргументов с плавающей запятой и свойств объекта, а именно: single или double.
Дополнительные сведения см. в разделе Введение в создание кода.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.