predict

Класс: RegressionLinear

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

Описание

пример

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 -by 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 наблюдений как в Predict Test-Sample Responses.

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 реализует 5-кратную перекрестную валидацию, 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