exponenta event banner

selectModels

Класс: Линейный

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

Описание

пример

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 объект модели.

Примеры

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

Моделирование 10000 наблюдений из этой модели

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

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Выберите индекс или индексы 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