RegressionPartitionedLinear

Пакет: classreg.learning.partition
Суперклассы: RegressionPartitionedModel

Перекрестная подтвержденная модель линейной регрессии для высоко-размерных данных

Описание

RegressionPartitionedLinear набор моделей линейной регрессии, обученных на перекрестных подтвержденных сгибах. Получить перекрестное подтвержденное, модель линейной регрессии, использование fitrlinear и задайте одну из опций перекрестной проверки. Можно оценить прогнозирующее качество модели, или как хорошо модель линейной регрессии делает вывод, с помощью одного или нескольких из этих “kfold” методов: kfoldPredict и kfoldLoss.

Каждый “kfold” метод использует модели, обученные на, окутывают наблюдения, чтобы предсказать ответ для наблюдений из сгиба. Например, предположите, что вы перекрестный подтверждаете использование пяти сгибов. В этом случае программное обеспечение случайным образом присваивает каждое наблюдение в пять примерно одинаково размерных групп. training fold содержит четыре из групп (то есть, примерно 4/5 данных), и test fold содержит другую группу (то есть, примерно 1/5 данных). В этом случае перекрестная проверка продолжает можно следующим образом:

  1. Программное обеспечение обучает первую модель (сохраненный в CVMdl.Trained{1}) использование наблюдений в последних четырех группах и резервах наблюдения в первой группе для валидации.

  2. Программное обеспечение обучает вторую модель (сохраненный в CVMdl.Trained{2}) использование наблюдений в первой группе и последних трех группах. Программное обеспечение резервирует наблюдения во второй группе для валидации.

  3. Программное обеспечение продолжает подобным способом для третьего через пятые модели.

Если вы подтверждаете путем вызова kfoldPredict, это вычисляет предсказания для наблюдений в группе 1, использующей первую модель, группу 2 для второй модели, и так далее. Короче говоря, программное обеспечение оценивает ответ для каждого наблюдения с помощью модели, обученной без того наблюдения.

Примечание

В отличие от другого перекрестного подтвержденного, моделей регрессии, RegressionPartitionedLinear объекты модели не хранят набор данных предиктора.

Конструкция

CVMdl = fitrlinear(X,Y,Name,Value) создает перекрестное подтвержденное, модель линейной регрессии когда Name любой 'CrossVal', 'CVPartition', 'Holdout', или 'KFold'. Для получения дополнительной информации смотрите fitrlinear.

Свойства

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

Свойства перекрестной проверки

Перекрестное подтвержденное имя модели в виде вектора символов.

Например, 'Linear' задает перекрестную подтвержденную линейную модель для бинарной классификации или регрессии.

Типы данных: char

Количество перекрестных подтвержденных сгибов в виде положительного целого числа.

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

Значения параметров перекрестной проверки, например, значения аргумента пары "имя-значение" раньше перекрестный подтверждали линейную модель в виде объекта. ModelParameters не содержит оцененные параметры.

Доступ к свойствам ModelParameters использование записи через точку.

Количество наблюдений в обучающих данных в виде положительного числового скаляра.

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

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

Модели линейной регрессии, обученные на перекрестной проверке, сворачиваются в виде массива ячеек RegressionLinear модели. Trained имеет ячейки k, где k является количеством сгибов.

Типы данных: cell

Веса наблюдения раньше перекрестный подтверждали модель в виде числового вектора. W имеет NumObservations элементы.

Программное обеспечение нормирует веса, используемые для обучения так, чтобы sum(W,'omitnan') 1.

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

Наблюдаемые ответы раньше перекрестный подтверждали модель в виде числового вектора, содержащего NumObservations элементы.

Каждая строка Y представляет наблюдаемый ответ соответствующего наблюдения в данных о предикторе.

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

Другие свойства регрессии

Категориальные индексы предиктора в виде вектора из положительных целых чисел. CategoricalPredictors содержит значения индекса, указывающие, что соответствующие предикторы являются категориальными. Значения индекса между 1 и p, где p количество предикторов, используемых, чтобы обучить модель. Если ни один из предикторов не является категориальным, то это свойство пусто ([]).

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

Предиктор называет в порядке их внешнего вида в данных о предикторе в виде массива ячеек из символьных векторов. Длина PredictorNames равно количеству переменных в обучающих данных X или Tbl используемый в качестве переменных предикторов.

Типы данных: cell

Имя переменной отклика в виде вектора символов.

Типы данных: char

Преобразование ответа функционирует в виде 'none' или указатель на функцию. ResponseTransform описывает, как программное обеспечение преобразовывает необработанные значения отклика.

Для MATLAB® функционируйте или функция, что вы задаете, вводите ее указатель на функцию. Например, можно ввести Mdl.ResponseTransform = @function, где function принимает числовой вектор из исходных ответов и возвращает числовой вектор, одного размера содержащий преобразованные ответы.

Типы данных: char | function_handle

Методы

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

Примеры

свернуть все

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

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

X = X';
CVMdl = fitrlinear(X,Y,'CrossVal','on','ObservationsIn','columns');

CVMdl RegressionPartitionedLinear перекрестная подтвержденная модель. Поскольку fitrlinear реализует 10-кратную перекрестную проверку по умолчанию, CVMdl.Trained содержит вектор ячейки из десяти RegressionLinear модели. Каждая ячейка содержит модель линейной регрессии, обученную на девяти сгибах, и затем протестированную на остающемся сгибе.

Предскажите ответы для наблюдений из сгиба и оцените ошибку обобщения путем передачи CVMdl к kfoldPredict и kfoldLoss, соответственно.

oofYHat = kfoldPredict(CVMdl);
ge = kfoldLoss(CVMdl)
ge = 0.1748

Предполагаемое, обобщение, среднеквадратическая ошибка 0.1748.

Чтобы определить хорошую силу штрафа лассо для модели линейной регрессии, которая использует наименьшие квадраты, реализуйте 5-кратную перекрестную проверку.

Симулируйте 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-5 через 10-1.

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: [-0.0049 -0.0049 -0.0049 -0.0049 -0.0049 -0.0048 ... ]
               Lambda: [1.0000e-05 1.9307e-05 3.7276e-05 7.1969e-05 ... ]
              Learner: 'leastsquares'


  Properties, Methods

Mdl1 RegressionLinear объект модели. fitrlinear созданный Mdl1 по образованию на первых четырех сгибах. Поскольку Lambda последовательность сильных мест регуляризации, можно думать о Mdl1 как 15 моделей, один для каждой силы регуляризации в 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

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

Выберите индекс силы регуляризации, которая балансирует разреженность переменного предиктора и низкий 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 близко к коэффициентам, которые симулировали данные.

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

| | |

Введенный в R2016a