Спрогнозируйте отклики для новых наблюдений из линейной модели для инкрементного обучения
[
также возвращает классификационные оценки для всех классов при label
,score
] = predict(___)Mdl
является инкрементальной моделью обучения для классификации, используя любую из комбинаций входных аргументов в предыдущих синтаксисах.
Загрузите набор данных о деятельности человека.
load humanactivity
Для получения дополнительной информации о наборе данных введите Description
в командной строке.
Ответы могут быть одним из пяти классов: Сидя, Стоя, Ходьба, Бег, или Танцы. Дихотомизируйте ответ путем определения, движется ли субъект (actid
> 2).
Y = actid > 2;
Подбор линейной классификационной модели ко всему набору данных.
TTMdl = fitclinear(feat,Y)
TTMdl = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'none' Beta: [60×1 double] Bias: -0.2005 Lambda: 4.1537e-05 Learner: 'svm' Properties, Methods
TTMdl
является ClassificationLinear
объект модели, представляющий традиционно обученную линейную классификационную модель.
Преобразуйте традиционно обученную линейную классификационную модель в двоичную классификационную линейную модель для инкрементного обучения.
IncrementalMdl = incrementalLearner(TTMdl)
IncrementalMdl = incrementalClassificationLinear IsWarm: 1 Metrics: [1×2 table] ClassNames: [0 1] ScoreTransform: 'none' Beta: [60×1 double] Bias: -0.2005 Learner: 'svm' Properties, Methods
IncrementalMdl
является incrementalClassificationLinear
объект модели, подготовленный для инкрементного обучения с использованием SVM.
The incrementalLearner
функция инициализирует пошагового обучающегося путем передачи ему выученных коэффициентов вместе с другой информацией TTMdl
узнал из обучающих данных.
IncrementalMdl
тепло (IsWarm
является 1
), что означает, что инкрементальные функции обучения могут начать отслеживать метрики эффективности.
The incrementalLearner
конфигурирует модель, которая будет обучена с помощью адаптивного решателя с инвариантным масштабом, тогда как fitclinear
обученные TTMdl
использование решателя BFGS
Инкрементный ученик, созданный из преобразования традиционно обученной модели, может генерировать предсказания без дальнейшей обработки.
Спрогнозируйте метки классов для всех наблюдений, используя обе модели.
ttlabels = predict(TTMdl,feat); illables = predict(IncrementalMdl,feat); sameLabels = sum(ttlabels ~= illables) == 0
sameLabels = logical
1
Обе модели предсказывают одни и те же метки для каждого наблюдения.
Если вы ориентируете наблюдения вдоль столбцов матрицы данных предиктора, можно испытать повышение эффективности во время инкрементного обучения.
Загрузите и перетащите набор данных о корпусе NYC 2015 года. Для получения дополнительной информации о данных смотрите Открытые данные NYC.
load NYCHousing2015 rng(1) % For reproducibility n = size(NYCHousing2015,1); shuffidx = randsample(n,n); NYCHousing2015 = NYCHousing2015(shuffidx,:);
Извлеките переменную отклика SALEPRICE
со таблицы. Примените преобразование журнала к SALEPRICE
.
Y = log(NYCHousing2015.SALEPRICE + 1); % Add 1 to avoid log of 0
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}]';
Сконфигурируйте линейную регрессионую модель для инкрементного обучения без периода оценки.
Mdl = incrementalRegressionLinear('Learner','leastsquares','EstimationPeriod',0);
Mdl
является incrementalRegressionLinear
объект модели.
Выполните инкрементальное обучение и предсказание, следуя этой процедуре для каждой итерации:
Симулируйте поток данных путем обработки фрагмента 100 наблюдений за раз.
Подбор модели к входящему фрагменту данных. Задайте, что наблюдения ориентированы вдоль столбцов данных. Перезаписать предыдущую инкрементную модель новой моделью.
Спрогнозируйте ответы, используя подобранную модель и входящий фрагмент данных. Задайте, что наблюдения ориентированы вдоль столбцов данных.
% Preallocation numObsPerChunk = 100; n = numel(Y); nchunk = floor(n/numObsPerChunk); r = nan(n,1); figure h = plot(r); h.YDataSource = 'r'; ylabel('Residuals') xlabel('Iteration') % Incremental fitting for j = 2:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; Mdl = fit(Mdl,X(:,idx),Y(idx),'ObservationsIn','columns'); yhat = predict(Mdl,X(:,idx),'ObservationsIn','columns'); r(idx) = Y(idx) - yhat; refreshdata drawnow end
Mdl
является incrementalRegressionLinear
объект модели обучен на всех данных в потоке.
Невязки, по-видимому, симметрично распределены вокруг 0 на протяжении инкрементного обучения.
Чтобы вычислить апостериорные вероятности классов, задайте добавочного ученика логистической регрессии.
Загрузите набор данных о деятельности человека. Случайным образом перетасуйте данные.
load humanactivity n = numel(actid); rng(10); % For reproducibility idx = randsample(n,n); X = feat(idx,:); Y = actid(idx);
Для получения дополнительной информации о наборе данных введите Description
в командной строке.
Ответы могут быть одним из пяти классов: Сидя, Стоя, Ходьба, Бег, или Танцы. Дихотомизируйте ответ путем определения, движется ли субъект (actid
> 2).
Y = Y > 2;
Создайте инкрементальную логистическую регрессионую модель для двоичной классификации. Подготовьте его к predict
путем определения имен классов и произвольных коэффициентов и значений смещения.
p = size(X,2); Beta = randn(p,1); Bias = randn(1); Mdl = incrementalClassificationLinear('Learner','logistic','Beta',Beta,... 'Bias',Bias,'ClassNames',unique(Y));
Mdl
является incrementalClassificationLinear
модель. Все его свойства доступны только для чтения. Вместо того, чтобы задавать произвольные значения, можно предпринять одно из следующих действий, чтобы подготовить модель:
Обучите логистическую регрессионую модель для двоичной классификации с помощью fitclinear
на подмножестве данных (при наличии), а затем преобразуйте модель в пошагового ученика при помощи incrementalLearner
.
Пошагово подгоняемые Mdl
к данным при помощи fit
.
Симулируйте поток данных и выполните следующие действия на каждом входящем фрагменте из 50 наблюдений.
Функции predict
для предсказания классификационных оценок для наблюдений во входящем фрагменты данных. Классификационные оценки являются апостериорными вероятностями классов для учащихся логистической регрессии.
Функции perfcurve
вычислить площадь под кривой ROC (AUC) с помощью входящего фрагмента данных и сохранить результат.
Функции fit
для подгонки модели к входящему фрагменту. Перезаписать предыдущую инкрементальную модель на новую, подобранную входящему наблюдению.
numObsPerChunk = 50; nchunk = floor(n/numObsPerChunk); auc = zeros(nchunk,1); % Incremental learning for j = 1:nchunk ibegin = min(n,numObsPerChunk*(j-1) + 1); iend = min(n,numObsPerChunk*j); idx = ibegin:iend; [~,posteriorProb] = predict(Mdl,X(idx,:)); [~,~,~,auc(j)] = perfcurve(Y(idx),posteriorProb(:,2),Mdl.ClassNames(2)); Mdl = fit(Mdl,X(idx,:),Y(idx)); end
Mdl
является incrementalClassificationLinear
объект модели обучен на всех данных в потоке.
Постройте график AUC на входящих фрагментах данных.
plot(auc) ylabel('AUC') xlabel('Iteration')
AUC предполагает, что классификатор правильно предсказывает хорошо движущиеся субъекты.
Mdl
- Модель инкрементного обученияincrementalClassificationLinear
объект модели | incrementalRegressionLinear
объект моделиМодель инкрементного обучения, заданная как incrementalClassificationLinear
или incrementalRegressionLinear
объект модели. Можно создавать Mdl
непосредственно или путем преобразования поддерживаемой, традиционно обученной модели машинного обучения с помощью incrementalLearner
функция. Для получения дополнительной информации см. соответствующую страницу с описанием.
Необходимо сконфигурировать Mdl
для предсказания меток для пакета наблюдений.
Если Mdl
является преобразованной, традиционно обученной моделью, можно предсказать метки без каких-либо изменений.
В противном случае Mdl
должен удовлетворять следующим критериям, которые можно задать непосредственно или путем подгонки Mdl
к данным с помощью fit
или updateMetricsAndFit
.
Если Mdl
является incrementalRegressionLinear
модель, ее коэффициенты модели Mdl.Beta
и смещение Mdl.Bias
не должны быть пустыми массивами.
Если Mdl
является incrementalClassificationLinear
модель, ее коэффициенты модели Mdl.Beta
и смещение Mdl.Bias
должны быть непустыми массивами и именами классов в Mdl.ClassNames
должен содержать два класса.
Независимо от типа объекта, если вы конфигурируете модель так, эти функции стандартизировали данные предиктора, предиктор означает Mdl.Mu
и стандартные отклонения Mdl.Sigma
не должны быть пустыми массивами.
X
- Пакет данных предиктораПакет данных предиктора, для которого можно предсказать метки, заданный как матрица с плавающей точкой n наблюдений и Mdl.NumPredictors
переменные предиктора. Значение dimension
определяет ориентацию переменных и наблюдений.
Длина меток наблюдений Y
и количество наблюдений в X
должна быть равной; Y
- метка j наблюдения (строка или столбец) в (j
)X
.
Примечание
predict
поддерживает только входные данные предиктора с плавающей точкой. Если модель входа Mdl
представляет собой преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar
чтобы преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации см. Dummy Переменных.
Типы данных: single
| double
dimension
- размерность наблюдения данных предиктора'rows'
(по умолчанию) | 'columns'
Размерность наблюдения данных предиктора, заданная как 'columns'
или 'rows'
.
Пример: 'ObservationsIn','columns'
Типы данных: char
| string
label
- Предсказанные откликиПредсказанные отклики (или метки), возвращенные как категориальный или символьный массив; вектор с плавающей точкой, логический или строковый; или массив ячеек из векторов символов с n строками. n - количество наблюдений в X
, и метка
- предсказанная реакция на наблюдение (j
)
.j
Для задач классификации, label
имеет тот совпадающий тип данных, что и имена классов, хранящиеся в Mdl.ClassNames
. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)
Для задач регрессии, label
является вектором с плавающей точкой.
score
- Классификационные оценкиКлассификационные оценки, возвращенные как n-на-2 матрица с плавающей точкой при Mdl
является incrementalClassificationLinear
модель. n - количество наблюдений в X
. счет
- счет для классификации наблюдений (j
, k
)
в j
классовk
. Mdl.ClassNames
задает порядок классов.
Если Mdl.Learner
является 'svm'
, predict
возвращает необработанные классификационные оценки. Если Mdl.Learner
является 'logistic'
классификационные оценки являются апостериорными вероятностями.
Для линейных инкрементных моделей обучения для двоичной классификации необработанный classification score для классификации x наблюдений, вектора-строки, в положительный класс, является
где
β 0 является скалярным смещением Mdl.Bias
.
β - вектор-столбец коэффициентов Mdl.Beta
.
Необработанная классификационная оценка для классификации x в отрицательный класс - f (x). Программа классифицирует наблюдения в класс, который приводит к положительному счету.
Если линейная модель классификации состоит из обучающихся логистической регрессии, то программное обеспечение применяет 'logit'
преобразование счета в необработанные классификационные оценки.
Указания и ограничения по применению:
Использовать saveLearnerForCoder
, loadLearnerForCoder
, и codegen
(MATLAB Coder), чтобы сгенерировать код для predict
функция. Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
чтобы сгенерировать код для функции точки входа.
Чтобы сгенерировать одноточный код C/C + + для предсказания, задайте аргумент
имя-значение 'DataType','single'
когда вы вызываете loadLearnerForCoder
функция.
Эта таблица содержит примечания к аргументам predict
. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
Аргумент | Примечания и ограничения |
---|---|
| Для указаний по применению и ограничений объекта модели смотрите |
|
|
Действуют следующие ограничения:
Если вы конфигурируете Mdl
для тасования данных (Mdl.Shuffle
является true
, или Mdl.Solver
является 'sgd'
или 'asgd'
), predict
функция случайным образом перетасовывает каждый входящий пакет наблюдений, прежде чем он подгоняет модель к пакету. Порядок перетасованных наблюдений может не совпадать с порядком, сгенерированным MATLAB®. Поэтому, если вы подходите Mdl
перед генерацией предсказаний предсказания, вычисленные в MATLAB, и предсказания, вычисленные сгенерированным кодом, могут быть не равными.
Используйте однородный тип данных для всех входных параметров с плавающей точкой и свойств объекта, в частности, либо single
или double
.
Для получения дополнительной информации смотрите Введение в генерацию кода.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.