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

Примеры

расширить все

Симулируйте 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);

Обучите линейную регрессионую модель, используя штрафы lasso с сильными сторонами в 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