exponenta event banner

RegressionPartitionedLinear

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

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

Описание

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

Каждый метод «kfold» использует модели, обученные на кратных наблюдениях, чтобы предсказать ответ для внеплановых наблюдений. Например, предположим, что выполняется перекрестная проверка с использованием пяти сгибов. В этом случае программное обеспечение случайным образом распределяет каждое наблюдение на пять групп примерно одинакового размера. Тренировочная складка содержит четыре группы (то есть примерно 4/5 данных), а тестовая складка содержит другую группу (то есть примерно 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 содержит значения индекса, соответствующие столбцам данных предиктора, которые содержат категориальные предикторы. Если ни один из предикторов не категоричен, то это свойство пустое ([]).

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

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

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

Имя ответной переменной, указанное как символьный вектор.

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

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

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

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

Методы

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

Копирование семантики

Значение. Сведения о том, как классы значений влияют на операции копирования, см. в разделе Копирование объектов.

Примеры

свернуть все

Моделирование 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);

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

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.

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

Моделирование 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-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 реализует пятикратную перекрестную проверку, CVMdl содержит 5 RegressionLinear модели, которые программное обеспечение обучает на каждой складке.

Отображение первой обученной модели линейной регрессии.

Mdl1 = CVMdl.Trained{1}
Mdl1 = 
  RegressionLinear
         ResponseName: 'Y'
    ResponseTransform: 'none'
                 Beta: [1000x15 double]
                 Bias: [1x15 double]
               Lambda: [1x15 double]
              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. Axes 1 contains an object of type line. Axes 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