selectModels

Класс: RegressionLinear

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

Описание

пример

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

Figure contains 2 axes objects. Axes object 1 contains an object of type line. Axes object 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