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

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

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

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

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

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

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

Для MATLAB® function или функция, которую вы задаете, вводите указатель на функцию. Для примера можно ввести 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.

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

Симулируйте 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 реализует 5-кратную перекрестную валидацию, 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