exponenta event banner

предсказать

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

Описание

пример

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.

  • incrementalLearner функция инициализирует добавочного учащегося, передавая ему усвоенные коэффициенты вместе с другой информацией TTMdl извлеченные из данных обучения.

  • IncrementalMdl теплый (IsWarm является 1), что означает, что инкрементные функции обучения могут начать отслеживать метрики производительности.

  • incrementalLearner конфигурирует модель для обучения с использованием адаптивного решателя с инвариантным масштабированием, тогда как fitclinear обученный TTMdl использование решателя BFGS

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

Прогнозирование меток классов для всех наблюдений с использованием обеих моделей.

ttlabels = predict(TTMdl,feat);
illables = predict(IncrementalMdl,feat);
sameLabels = sum(ttlabels ~= illables) == 0
sameLabels = logical
   1

Обе модели предсказывают одинаковые метки для каждого наблюдения.

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

Загрузка и перетасовка набора данных по жилью в Нью-Йорке 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 преобразовать каждую категориальную переменную в числовую матрицу фиктивных переменных и объединить все фиктивные матрицы переменных и любые другие числовые предикторы. Дополнительные сведения см. в разделе Фиктивные переменные.

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

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

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

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

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

свернуть все

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

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

  • Для регрессионных проблем: label - вектор с плавающей запятой.

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

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

Подробнее

свернуть все

Оценка классификации

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

f (x) = β0 + xβ,

где

  • β0 - скалярное смещение Mdl.Bias.

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

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

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

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

.
Представлен в R2020b