exponenta event banner

предсказать

Класс: Линейный

Прогнозирование отклика модели линейной регрессии

Описание

пример

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

пример

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

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

развернуть все

Модель линейной регрессии, заданная как RegressionLinear объект модели. Можно создать RegressionLinear объект модели с использованием fitrlinear.

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

По умолчанию каждая строка X соответствует одному наблюдению, и каждый столбец соответствует одной переменной.

  • Для числовой матрицы:

    • Переменные в столбцах X должен иметь тот же порядок, что и обучаемые переменные предиктора Mdl.

    • Если вы тренируетесь Mdl использование таблицы (например, Tbl) и Tbl содержит только числовые переменные предиктора, затем X может быть числовой матрицей. Чтобы обработать числовые предикторы в Tbl в качестве категориального во время обучения, определить категориальные предикторы, используя CategoricalPredictors аргумент пары имя-значение fitrlinear. Если Tbl содержит разнородные переменные предиктора (например, числовые и категориальные типы данных) и X является числовой матрицей, то predict выдает ошибку.

  • Для таблицы:

    • predict не поддерживает многозначные переменные или массивы ячеек, отличные от массивов ячеек символьных векторов.

    • Если вы тренируетесь Mdl использование таблицы (например, Tbl), затем все переменные предиктора в X должны иметь те же имена переменных и типы данных, что и обучаемые переменные Mdl (хранится в Mdl.PredictorNames). Однако порядок столбцов X не обязательно соответствовать порядку столбцов Tbl. Также, Tbl и X может содержать дополнительные переменные (переменные ответа, веса наблюдения и т.д.), но predict игнорирует их.

    • Если вы тренируетесь Mdl используя числовую матрицу, затем имена предикторов в Mdl.PredictorNames должны совпадать с именами соответствующих переменных предиктора в X. Чтобы указать имена предикторов во время обучения, используйте PredictorNames аргумент пары имя-значение fitrlinear. Все переменные предиктора в X должны быть числовыми векторами. X может содержать дополнительные переменные (переменные ответа, веса наблюдения и т.д.), но predict игнорирует их.

Примечание

Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени выполнения оптимизации. Невозможно указать 'ObservationsIn','columns' для данных предиктора в таблице.

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

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

Примечание

Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени выполнения оптимизации. Невозможно указать 'ObservationsIn','columns' для данных предиктора в таблице.

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

развернуть все

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

Прогнозируемый отклик с использованием модели с силой регуляризации j равен y ^ j = xβj + bj.

  • x - наблюдение из матрицы данных предиктора X, и является вектором строки.

  • βj - оценочный вектор-столбец коэффициентов. Программа сохраняет этот вектор в Mdl.Beta(:,j).

  • bj - оценочное скалярное смещение, которое программное обеспечение хранит в Mdl.Bias(j).

Примеры

развернуть все

Моделирование 10000 наблюдений из этой модели

y = x100 + 2x200 + e.

  • X=x1..., x1000 является редкой матрицей 10000 на 1000 с 10%-ми отличными от нуля стандартными нормальными элементами.

  • e - случайная нормальная ошибка со средним значением 0 и стандартным отклонением 0,3.

rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

Тренировка модели линейной регрессии. Зарезервировать 30% наблюдений в виде выборки.

CVMdl = fitrlinear(X,Y,'Holdout',0.3);
Mdl = CVMdl.Trained{1}
Mdl = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x1 double]
                 Bias: -0.0066
               Lambda: 1.4286e-04
              Learner: 'svm'


  Properties, Methods

CVMdl является RegressionPartitionedLinear модель. Он содержит свойство Trained, который представляет собой массив ячеек 1 на 1, содержащий RegressionLinear модель, которую программное обеспечение обучило с использованием обучающего набора.

Извлеките данные обучения и тестирования из определения раздела.

trainIdx = training(CVMdl.Partition);
testIdx = test(CVMdl.Partition);

Прогнозирование ответов на обучающие и тестовые образцы.

yHatTrain = predict(Mdl,X(trainIdx,:));
yHatTest = predict(Mdl,X(testIdx,:));

Потому что есть одна сила регуляризации в Mdl, yHatTrain и yHatTest числовые векторы.

Спрогнозировать отклики из наиболее эффективной модели линейной регрессии, которая использует лассо-штраф и наименьшие квадраты.

Смоделировать 10000 наблюдений, как в разделе Прогнозирование тестовых ответов.

rng(1) % For reproducibility
n = 1e4;
d = 1e3;
nz = 0.1;
X = sprandn(n,d,nz);
Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

Создайте набор из 15 логарифмически разнесенных уровней регуляции от 10-5 до 10-1.

Lambda = logspace(-5,-1,15);

Выполните перекрестную проверку моделей. Чтобы увеличить скорость выполнения, транспонируйте данные предиктора и укажите, что наблюдения находятся в столбцах. Оптимизируйте целевую функцию с помощью SpaRSA.

X = X'; 
CVMdl = fitrlinear(X,Y,'ObservationsIn','columns','KFold',5,'Lambda',Lambda,...
    'Learner','leastsquares','Solver','sparsa','Regularization','lasso');

numCLModels = numel(CVMdl.Trained)
numCLModels = 5

CVMdl является RegressionPartitionedLinear модель. Поскольку fitrlinear реализует пятикратную перекрестную проверку, CVMdl содержит 5 RegressionLinear модели, которые программное обеспечение обучает на каждой складке.

Отображение первой обученной модели линейной регрессии.

Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x15 double]
                 Bias: [1x15 double]
               Lambda: [1x15 double]
              Learner: 'leastsquares'


  Properties, Methods

Mdl1 является RegressionLinear объект модели. fitrlinear построенный Mdl1 путем обучения на первых четырех складках. Поскольку Lambda - это последовательность сильных сторон регуляризации, вы можете думать о Mdl1 как 11 моделей, по одной для каждой силы регуляризации в Lambda.

Оценка перекрестно проверенного MSE.

mse = kfoldLoss(CVMdl);

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

Mdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,...
    'Learner','leastsquares','Solver','sparsa','Regularization','lasso');
numNZCoeff = sum(Mdl.Beta~=0);

На том же рисунке постройте график перекрестно подтвержденного MSE и частоты ненулевых коэффициентов для каждой силы регуляции. Постройте график всех переменных на шкале журнала.

figure;
[h,hL1,hL2] = plotyy(log10(Lambda),log10(mse),...
    log10(Lambda),log10(numNZCoeff)); 
hL1.Marker = 'o';
hL2.Marker = 'o';
ylabel(h(1),'log_{10} MSE')
ylabel(h(2),'log_{10} nonzero-coefficient frequency')
xlabel('log_{10} Lambda')
hold off

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Выберите индекс силы регуляризации, который уравновешивает предикторную переменную разреженность и низкий MSE (например, Lambda(10)).

idxFinal = 10;

Извлеките модель с минимальным значением MSE.

MdlFinal = selectModels(Mdl,idxFinal)
MdlFinal = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x1 double]
                 Bias: -0.0050
               Lambda: 0.0037
              Learner: 'leastsquares'


  Properties, Methods

idxNZCoeff = find(MdlFinal.Beta~=0)
idxNZCoeff = 2×1

   100
   200

EstCoeff = Mdl.Beta(idxNZCoeff)
EstCoeff = 2×1

    1.0051
    1.9965

MdlFinal является RegressionLinear модель с одной прочностью регуляризации. Ненулевые коэффициенты EstCoeff близки к коэффициентам, моделирующим данные.

Смоделировать 10 новых наблюдений и спрогнозировать соответствующие отклики с использованием модели с наилучшей производительностью.

XNew = sprandn(d,10,nz);
YHat = predict(MdlFinal,XNew,'ObservationsIn','columns');

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

.

См. также

|

Представлен в R2016a