selectModels

Класс: RegressionLinear

Выберите адаптированные упорядоченные модели линейной регрессии

Синтаксис

SubMdl = selectModels(Mdl,idx)

Описание

пример

SubMdl = selectModels(Mdl,idx) возвращает подмножество обученных моделей линейной регрессии от набора моделей линейной регрессии (Mdl), обученный с помощью различных сильных мест регуляризации. Индексы idx соответствует сильным местам регуляризации в Mdl.Lambda и задает который модели возвратиться.

Входные параметры

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

Модели линейной регрессии, обученные с помощью различных сильных мест регуляризации, заданных как объект модели RegressionLinear. Можно создать объект модели RegressionLinear с помощью fitrlinear.

Несмотря на то, что Mdl является одним объектом модели, если numel(Mdl.Lambda) = L ≥ 2, то можно думать о Mdl как о L, обучил модели.

Индексы, соответствующие сильным местам регуляризации, заданным как числовой вектор положительных целых чисел. Значения idx должны быть в интервале [1, L], где L = numel(Mdl.Lambda).

Типы данных: double | single

Выходные аргументы

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

Подмножество моделей линейной регрессии, обученных с помощью различных сильных мест регуляризации, возвращенных как объект модели RegressionLinear.

Примеры

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

Моделируйте 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);

Создайте набор 15 логарифмически распределенных сильных мест регуляризации от 10-4 через 10-1.

Lambda = logspace(-4,-1,15);

Протяните 30% данных для тестирования. Идентифицируйте демонстрационные тестом индексы.

cvp = cvpartition(numel(Y),'Holdout',0.30);
idxTest = test(cvp);

Обучите модель линейной регрессии, использующую штрафы лассо с сильными местами в Lambda. Задайте сильные места регуляризации, оптимизировав использование целевой функции SpaRSA и раздел данных. Чтобы увеличить скорость выполнения, транспонируйте данные о предикторе и укажите, что наблюдения находятся в столбцах.

X = X'; 
CVMdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,...
    'Solver','sparsa','Regularization','lasso','CVPartition',cvp);
Mdl1 = CVMdl.Trained{1};
numel(Mdl1.Lambda)
ans = 15

Mdl1 является моделью RegressionLinear. Поскольку Lambda является 15-мерным вектором сильных мест регуляризации, можно думать о Mdl1 как о 15 обученных моделях, один для каждой силы регуляризации.

Оцените демонстрационную тестом среднеквадратическую ошибку для каждой упорядоченной модели.

mse = loss(Mdl1,X(:,idxTest),Y(idxTest),'ObservationsIn','columns');

Более высокие значения Lambda приводят к разреженности переменной прогноза, которая является хорошим качеством модели регрессии. Переобучите модель с помощью целого набора данных и всех опций, используемых ранее, кроме спецификации раздела данных. Определите количество ненулевых коэффициентов на модель.

Mdl = fitrlinear(X,Y,'ObservationsIn','columns','Lambda',Lambda,...
    '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

Выберите индекс или индексы Lambda, которые балансируют минимальную ошибку классификации и разреженность переменной прогноза (например, Lambda(11)).

idx = 11;
MdlFinal = selectModels(Mdl,idx);

MdlFinal является обученным объектом модели RegressionLinear, который использует Lambda(11) в качестве силы регуляризации.

Советы

Один способ создать несколько прогнозирующих моделей линейной регрессии:

  1. Протяните фрагмент данных для тестирования.

  2. Обучите модель линейной регрессии использование fitrlinear. Задайте сетку сильных мест регуляризации с помощью аргумента пары "имя-значение" ' Lambda ' и снабдите данными тренировки. fitrlinear возвращает один объект модели RegressionLinear, но это содержит модель для каждой силы регуляризации.

  3. Чтобы определить качество каждой упорядоченной модели, передайте возвращенный объект модели и протянутые данные к, например, loss.

  4. Идентифицируйте индексы (idx) удовлетворительного подмножества упорядоченных моделей, и затем передайте возвращенную модель и индексы к selectModels. selectModels возвращает один объект модели RegressionLinear, но это содержит упорядоченные модели numel(idx).

  5. Чтобы предсказать метки класса для новых данных, передайте данные и подмножество упорядоченных моделей к predict.

Смотрите также

| | |

Введенный в R2016a