predict

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

Описание

пример

label = predict(Mdl,X) возвращает предсказанные отклики или метки label наблюдений в данных предиктора X из модели инкрементного обучения Mdl.

пример

label = predict(Mdl,X,'ObservationsIn',dimension) задает размерность наблюдения данных предиктора либо 'rows' (по умолчанию) или 'columns'. Для примера задайте 'ObservationsIn','columns' чтобы указать, что наблюдения в данных предиктора ориентированы вдоль столбцов X.

пример

[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

Figure contains an axes. The axes contains an object of type line.

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 наблюдений.

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

  2. Функции perfcurve вычислить площадь под кривой ROC (AUC) с помощью входящего фрагмента данных и сохранить результат.

  3. Функции 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')

Figure contains an axes. The axes contains an object of type line.

AUC предполагает, что классификатор правильно предсказывает хорошо движущиеся субъекты.

Входные параметры

свернуть все

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

Пакет данных предиктора, для которого можно предсказать метки, заданный как матрица с плавающей точкой n наблюдений и Mdl.NumPredictors переменные предиктора. Значение dimension определяет ориентацию переменных и наблюдений.

Длина меток наблюдений Y и количество наблюдений в X должна быть равной; Y (j) - метка j наблюдения (строка или столбец) в X.

Примечание

predict поддерживает только входные данные предиктора с плавающей точкой. Если модель входа Mdl представляет собой преобразованную, традиционно обученную модель, подходящую для категориальных данных, использование dummyvar чтобы преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные переменные матрицы и любые другие числовые предикторы. Для получения дополнительной информации см. Dummy Переменных.

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

Размерность наблюдения данных предиктора, заданная как 'columns' или 'rows'.

Пример: 'ObservationsIn','columns'

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

Выходные аргументы

свернуть все

Предсказанные отклики (или метки), возвращенные как категориальный или символьный массив; вектор с плавающей точкой, логический или строковый; или массив ячеек из векторов символов с n строками. n - количество наблюдений в X, и метка (j) - предсказанная реакция на наблюдение j.

  • Для задач классификации, label имеет тот совпадающий тип данных, что и имена классов, хранящиеся в Mdl.ClassNames. (Программа обрабатывает массивы строк как массивы ячеек векторов символов.)

  • Для задач регрессии, label является вектором с плавающей точкой.

Классификационные оценки, возвращенные как n-на-2 матрица с плавающей точкой при Mdl является incrementalClassificationLinear модель. n - количество наблюдений в X. счет (j, k) - счет для классификации наблюдений j в k классов. Mdl.ClassNames задает порядок классов.

Если Mdl.Learner является 'svm', predict возвращает необработанные классификационные оценки. Если Mdl.Learner является 'logistic'классификационные оценки являются апостериорными вероятностями.

Подробнее о

свернуть все

Классификационная оценка

Для линейных инкрементных моделей обучения для двоичной классификации необработанный classification score для классификации x наблюдений, вектора-строки, в положительный класс, является

f(x)=β0+xβ,

где

  • β 0 является скалярным смещением Mdl.Bias.

  • β - вектор-столбец коэффициентов Mdl.Beta.

Необработанная классификационная оценка для классификации x в отрицательный класс - f (x). Программа классифицирует наблюдения в класс, который приводит к положительному счету.

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

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

.
Введенный в R2020b