Класс: Линейный
Прогнозирование отклика модели линейной регрессии
Mdl - Модель линейной регрессииRegressionLinear объект моделиМодель линейной регрессии, заданная как RegressionLinear объект модели. Можно создать RegressionLinear объект модели с использованием fitrlinear.
X - Данные предиктора, используемые для генерации ответовДанные предиктора, используемые для генерации ответов, заданные как полная или разреженная числовая матрица или таблица.
По умолчанию каждая строка 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
dimension - Измерение наблюдения данных предиктора'rows' (по умолчанию) | 'columns'Измерение наблюдения данных предиктора, указанное как 'columns' или 'rows'.
Примечание
Если вы ориентируете матрицу предиктора так, чтобы наблюдения соответствовали столбцам, и укажите 'ObservationsIn','columns', то вы можете испытать значительное сокращение времени выполнения оптимизации. Невозможно указать 'ObservationsIn','columns' для данных предиктора в таблице.
YHat - Прогнозируемые ответыПрогнозируемые отклики, возвращаемые в виде n-на-L числовой матрицы. n - количество наблюдений в X и L - количество сильных сторон регуляризации в Mdl.Lambda. YHat( является ответом на наблюдение i,j)i использование модели линейной регрессии, которая имеет силу регуляризации Mdl.Lambda(.j)
Прогнозируемый отклик с использованием модели с силой регуляризации j равен + bj.
x - наблюдение из матрицы данных предиктора X, и является вектором строки.
- оценочный вектор-столбец коэффициентов. Программа сохраняет этот вектор в Mdl.Beta(:,.j)
- оценочное скалярное смещение, которое программное обеспечение хранит в Mdl.Bias(.j)
Моделирование 10000 наблюдений из этой модели
2x200 + e.
является редкой матрицей 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 логарифмически разнесенных уровней регуляции от до .
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

Выберите индекс силы регуляризации, который уравновешивает предикторную переменную разреженность и низкий 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');
Примечания и ограничения по использованию:
predict не поддерживает высокий table данные.
Дополнительные сведения см. в разделе Массивы Tall.
Примечания и ограничения по использованию:
Можно создать код C/C + + для обоихpredict и update с помощью конфигуратора кодера. Или создайте код только для predict с помощью saveLearnerForCoder, loadLearnerForCoder, и codegen.
Создание кода для predict и update - Создание конфигуратора кодера с помощью learnerCoderConfigurer а затем создать код с помощью generateCode. Затем можно обновить параметры модели в сгенерированном коде без необходимости регенерации кода.
Создание кода для predict - сохранение обучаемой модели с помощью saveLearnerForCoder. Определение функции точки входа, которая загружает сохраненную модель с помощью loadLearnerForCoder и вызывает predict функция. Затем использовать codegen (Кодер MATLAB) для создания кода для функции точки входа.
Чтобы создать код C/C + + с одной точностью для прогнозирования, укажите аргумент имя-значение'DataType','single' при вызове loadLearnerForCoder функция.
Эта таблица содержит примечания о аргументах predict. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
| Аргумент | Примечания и ограничения |
|---|---|
Mdl | Примечания по использованию и ограничения объекта модели см. в разделе
Создание кода |
X |
|
| Аргументы пары имя-значение |
|
Дополнительные сведения см. в разделе Введение в создание кода.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.