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 (iJ) ответ для наблюдения i использование модели линейной регрессии, которая имеет силу регуляризации Mdl. Lambda (j).

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

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

  • βj предполагаемый вектор-столбец коэффициентов. Программное обеспечение хранит этот вектор в Mdl. \beta: J).

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

Примеры

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

Симулируйте 10 000 наблюдений из этой модели

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 числовые векторы.

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

Симулируйте 10 000 наблюдений, когда в Предсказывают Демонстрационные Тестом Ответы.

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: [-0.0049 -0.0049 -0.0049 -0.0049 -0.0049 -0.0048 ... ]
               Lambda: [1.0000e-05 1.9307e-05 3.7276e-05 7.1969e-05 ... ]
              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 objects. Axes object 1 contains an object of type line. Axes object 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