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