Класс: RegressionLinear
Предскажите ответ модели линейной регрессии
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-by-L числовая матрица. n является количеством наблюдений в X
и L является количеством сильных мест регуляризации в Mdl.Lambda
. YHat (
ответ для наблюдения i
J
)i
использование модели линейной регрессии, которая имеет силу регуляризации Mdl. Lambda (
.j
)
Предсказанный ответ с помощью модели с силой регуляризации j
x является наблюдением от матрицы данных предиктора X
, и вектор-строка.
предполагаемый вектор-столбец коэффициентов. Программное обеспечение хранит этот вектор в Mdl. \beta:
.J
)
предполагаемое, скалярное смещение, которое программное обеспечение хранит в Mdl. Смещение (
.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: [-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
Выберите индекс силы регуляризации, которая балансирует разреженность переменного предиктора и низкий 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
данные.
Для получения дополнительной информации см. Раздел "Высокие массивы".
Указания и ограничения по применению:
Можно сгенерировать код C/C++ для обоих predict
и update
при помощи кодера configurer. Или, сгенерируйте код только для predict
при помощи saveLearnerForCoder
, loadLearnerForCoder
, и codegen
.
Генерация кода для predict
и update
— Создайте кодер configurer при помощи learnerCoderConfigurer
и затем сгенерируйте код при помощи generateCode
. Затем можно обновить параметры модели в сгенерированном коде, не имея необходимость регенерировать код.
Генерация кода для predict
— Сохраните обученную модель при помощи saveLearnerForCoder
. Задайте функцию точки входа, которая загружает сохраненную модель при помощи loadLearnerForCoder
и вызывает predict
функция. Затем используйте codegen
(MATLAB Coder), чтобы сгенерировать код для функции точки входа.
Сгенерировать код C/C++ с одинарной точностью для predict
, задайте аргумент 'DataType','single'
значения имени когда вы вызываете
loadLearnerForCoder
функция.
Эта таблица содержит примечания об аргументах predict
. Аргументы, не включенные в эту таблицу, полностью поддерживаются.
Аргумент | Примечания и ограничения |
---|---|
Mdl | Для указаний и ограничений по применению объекта модели смотрите
Генерацию кода |
X |
|
Аргументы в виде пар имя-значение |
|
Для получения дополнительной информации смотрите Введение в Генерацию кода.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.