Обучите линейную модель пошаговому обучению
fit
функция подбирает сконфигурированную модель пошагового обучения для линейной регрессии (incrementalRegressionLinear
объект) или линейная бинарная классификация (incrementalClassificationLinear
объект) к потоковой передаче данных. Чтобы дополнительно отследить показатели производительности с помощью данных, когда это прибывает, использовать updateMetricsAndFit
вместо этого.
Чтобы соответствовать или перекрестный подтвердить регрессию или модель классификации к целому пакету данных целиком, см. другие модели машинного обучения в Регрессии или Классификации.
возвращает модель Mdl
= fit(Mdl
,X
,Y
)Mdl
пошагового обучения, который представляет входную модель
Mdl
пошагового обучения обученное использование предиктора и данных об ответе,
X
и Y
соответственно. А именно, fit
реализации следующая процедура:
Модели ввода и вывода являются совпадающим типом данных.
Создайте инкрементную линейную модель SVM по умолчанию для бинарной классификации. Задайте период оценки 5 000 наблюдений и решателя 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
процессы больше фрагментов.
Инкрементно обучите модель линейной регрессии только, когда ее эффективность ухудшится.
Загрузите и переставьте 2 015 наборов данных корпуса Нью-Йорк Сити. Для получения дополнительной информации о данных смотрите, что Нью-Йорк Сити Открывает Данные.
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}];
Сконфигурируйте модель линейной регрессии для пошагового обучения так, чтобы оно не имело оценки или метрического периода прогрева. Задайте метрический размер окна 1 000. Подбирайте сконфигурированную модель к первым 100 наблюдениям.
Mdl = incrementalRegressionLinear('EstimationPeriod',0,'MetricsWarmupPeriod',0,'MetricsWindowSize',1000); numObsPerChunk = 100; Mdl = fit(Mdl,X(1:numObsPerChunk,:),Y(1:numObsPerChunk));
Mdl
incrementalRegressionLinear
объект модели.
Выполните пошаговое обучение, с условным подбором кривой, путем выполнения этой процедуры для каждой итерации:
Симулируйте поток данных путем обработки фрагмента 100 наблюдений за один раз.
Обновите производительность модели путем вычисления эпсилона нечувствительная потеря в 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
единицы (
.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)
.
В отличие от традиционного обучения, пошаговое обучение не может иметь отдельного теста (затяжка) набор. Поэтому, чтобы обработать каждый входящий фрагмент данных как набор тестов, передайте инкрементную модель и каждый входящий фрагмент к updateMetrics
перед обучением модель на тех же данных.
Для проблем классификации, если предшествующее вероятностное распределение класса известно (другими словами, предшествующее распределение не является эмпирическим), fit
нормирует веса наблюдения, чтобы суммировать к предшествующим вероятностям класса в соответствующих классах. Это действие подразумевает, что веса наблюдения являются соответствующими предшествующими вероятностями класса по умолчанию.
Для проблем регрессии или если предшествующее вероятностное распределение класса является эмпирическим, программное обеспечение нормирует заданные веса наблюдения, чтобы суммировать к 1 каждому разу, когда вы вызываете fit
.
Указания и ограничения по применению:
Использование saveLearnerForCoder
, loadLearnerForCoder
, и codegen
(MATLAB Coder), чтобы сгенерировать код для 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.