Класс: RegressionLinear
Предскажите ответ модели линейной регрессии
YHat = predict(Mdl,X)YHat = predict(Mdl,X,Name,Value) возвращает предсказанные ответы с дополнительными опциями, заданными одним или несколькими аргументами пары YHat = predict(Mdl,X,Name,Value)Name,Value. Например, укажите, что столбцы в данных о предикторе соответствуют наблюдениям.
Mdl — Модель линейной регрессииRegressionLinearМодель линейной регрессии, заданная как объект модели RegressionLinear. Можно создать объект модели RegressionLinear с помощью fitrlinear.
X Данные о предиктореДанные о предикторе, заданные как n-by-p полная или разреженная матрица. Эта ориентация X указывает, что строки соответствуют отдельным наблюдениям, и столбцы соответствуют отдельным переменным прогноза.
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns', то вы можете испытать значительное сокращение во время вычисления.
Длина Y и количество наблюдений в X должны быть равными.
Типы данных: single | double
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'ObservationsIn' — Размерность наблюдения данных о предикторе'rows' (значение по умолчанию) | 'columns'Размерность наблюдения данных о предикторе, заданная как пара, разделенная запятой, состоящая из 'ObservationsIn' и 'columns' или 'rows'.
Если вы ориентируете свою матрицу предиктора так, чтобы наблюдения соответствовали столбцам и задали 'ObservationsIn','columns', то вы можете испытать значительное сокращение во время выполнения оптимизации.
YHat — Предсказанные ответыПредсказанные ответы, возвращенные как n-by-L числовая матрица. n является количеством наблюдений в X, и L является количеством сильных мест регуляризации в Mdl.Lambda. является ответом для наблюдения YHat(i,j) i с помощью модели линейной регрессии, которая имеет силу регуляризации .Mdl.Lambda(j)
Предсказанный ответ с помощью модели с силой регуляризации j
x является наблюдением от матрицы данных предиктора X и является вектором - строкой.
предполагаемый вектор-столбец коэффициентов. Программное обеспечение хранит этот вектор в .Mdl.Beta(:,j)
предполагаемое, скалярное смещение, которое программное обеспечение хранит в .Mdl.Bias(j)
Моделируйте 10 000 наблюдений из этой модели
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 логарифмически распределенных сильных мест регуляризации от через .
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

Выберите индекс силы регуляризации, которая балансирует разреженность переменной прогноза и низкий 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');
Эта функция полностью поддерживает "высокие" массивы. Для получения дополнительной информации смотрите Длинные массивы (MATLAB).
Указания и ограничения по применению:
Используйте saveCompactModel, loadCompactModel и codegen, чтобы сгенерировать код для функции predict. Сохраните обученную модель при помощи saveCompactModel. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadCompactModel и вызывает функцию predict. Затем используйте codegen, чтобы сгенерировать код для функции точки входа.
Эта таблица содержит примечания об аргументах predict. Аргументы, не включенные в эту таблицу, полностью поддержаны.
| Аргумент | Примечания и ограничения |
|---|---|
Mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода объекта |
X |
|
| Аргументы в виде пар имя-значение |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.