Частичные наименьшие квадраты в R (шаг за шагом)

Частичные наименьшие квадраты в R (шаг за шагом)

Одной из наиболее распространенных проблем, с которыми вы столкнетесь в машинном обучении, является мультиколлинеарность.Это происходит, когда две или более переменных-предикторов в наборе данных сильно коррелированы.

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

Один из способов обойти эту проблему — использовать метод, известный как частичные наименьшие квадраты , который работает следующим образом:

  • Стандартизируйте переменные предиктора и отклика.
  • Рассчитайте M линейных комбинаций (называемых «компонентами PLS») исходных p предикторных переменных, которые объясняют значительное количество изменений как в переменной отклика, так и в предикторных переменных.
  • Используйте метод наименьших квадратов, чтобы соответствовать модели линейной регрессии, используя компоненты PLS в качестве предикторов.
  • Используйте k-кратную перекрестную проверку , чтобы найти оптимальное количество компонентов PLS для сохранения в модели.

В этом руководстве представлен пошаговый пример выполнения частичного метода наименьших квадратов в R.

Шаг 1: Загрузите необходимые пакеты

Самый простой способ выполнить частичный метод наименьших квадратов в R — использовать функции из пакета pls .

#install pls package (if not already installed)
install.packages(" pls ")

load pls package
library(pls)

Шаг 2: подгонка частичной модели наименьших квадратов

В этом примере мы будем использовать встроенный набор данных R под названием mtcars , который содержит данные о различных типах автомобилей:

#view first six rows of mtcars dataset
head(mtcars)

 mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1

Для этого примера мы подберем модель частичного метода наименьших квадратов (PLS), используя hp в качестве переменной отклика и следующие переменные в качестве переменных-предикторов:

  • миль на галлон
  • дисп
  • дрянь
  • вес
  • qсек

В следующем коде показано, как подогнать модель PLS к этим данным. Обратите внимание на следующие аргументы:

  • scale=TRUE : это говорит R, что каждая из переменных в наборе данных должна быть масштабирована, чтобы иметь среднее значение 0 и стандартное отклонение 1. Это гарантирует, что никакая предикторная переменная не будет чрезмерно влиять на модель, если она будет измерена в разные единицы.
  • validation="CV" : это говорит R использовать перекрестную проверку k-fold для оценки производительности модели. Обратите внимание, что по умолчанию используется k=10 кратностей. Также обратите внимание, что вместо этого вы можете указать «LOOCV», чтобы выполнить перекрестную проверку с исключением одного .
#make this example reproducible
set.seed(1)

#fit PCR model
model <- plsr(hp~mpg+disp+drat+wt+qsec, data=mtcars, scale= TRUE , validation=" CV ")

Шаг 3: Выберите количество компонентов PLS

После того, как мы подогнали модель, нам нужно определить количество компонентов PLS, которые стоит сохранить.

Это можно сделать, взглянув на среднеквадратичную ошибку теста (среднеквадратическую ошибку теста), рассчитанную с помощью k-кратной перекрестной проверки:

#view summary of model fitting
summary(model)

Data: X dimension: 32 5 
 Y dimension: 32 1
Fit method: kernelpls
Number of components considered: 5

VALIDATION: RMSEP
Cross-validated using 10 random segments.
 (Intercept) 1 comps 2 comps 3 comps 4 comps 5 comps
CV 69.66 40.57 35.48 36.22 36.74 36.67
adjCV 69.66 40.41 35.12 35.80 36.27 36.20

TRAINING: % variance explained
 1 comps 2 comps 3 comps 4 comps 5 comps
X 68.66 89.27 95.82 97.94 100.00
hp 71.84 81.74 82.00 82.02 82.03

В выводе есть две интересующие таблицы:

1. ПРОВЕРКА: RMSEP

Эта таблица сообщает нам среднеквадратичное отклонение теста, рассчитанное с помощью k-кратной перекрестной проверки. Мы можем видеть следующее:

  • Если мы используем в модели только термин перехвата, тестовое среднеквадратичное отклонение равно 69,66 .
  • Если мы добавим первый компонент PLS, тестовый RMSE упадет до 40,57.
  • Если мы добавим второй компонент PLS, RMSE теста упадет до 35,48.

Мы видим, что добавление дополнительных компонентов PLS фактически приводит к увеличению RMSE теста. Таким образом, представляется оптимальным использовать только два компонента PLS в окончательной модели.

2. ОБУЧЕНИЕ: % объясненной дисперсии

Эта таблица сообщает нам процент дисперсии переменной отклика, объясненной компонентами PLS. Мы можем видеть следующее:

  • Используя только первый компонент PLS, мы можем объяснить 68,66% вариации переменной отклика.
  • Добавив второй компонент PLS, мы можем объяснить 89,27% вариации переменной отклика.

Обратите внимание, что мы всегда сможем объяснить большую дисперсию, используя больше компонентов PLS, но мы видим, что добавление более двух компонентов PLS фактически не увеличивает процент объясненной дисперсии на много.

Мы также можем визуализировать RMSE теста (вместе с MSE теста и R-квадратом) на основе количества компонентов PLS, используя функцию validationplot() .

#visualize cross-validation plots
validationplot(model)
validationplot(model, val.type=" MSEP ")
validationplot(model, val.type=" R2 ") 
Частичные наименьшие квадраты в R
MSE перекрестной проверки в R
Перекрестная проверка для частичных наименьших квадратов в R

На каждом графике мы видим, что соответствие модели улучшается при добавлении двух компонентов PLS, но имеет тенденцию к ухудшению при добавлении большего количества компонентов PLS.

Таким образом, оптимальная модель включает только первые два компонента PLS.

Шаг 4: Используйте окончательную модель для прогнозирования

Мы можем использовать окончательную модель с двумя компонентами PLS, чтобы делать прогнозы по новым наблюдениям.

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

#define training and testing sets
train <- mtcars[1:25, c("hp", "mpg", "disp", "drat", "wt", "qsec")]
y_test <- mtcars[26: nrow (mtcars), c("hp")]
test <- mtcars[26: nrow (mtcars), c("mpg", "disp", "drat", "wt", "qsec")]

#use model to make predictions on a test set
model <- plsr(hp~mpg+disp+drat+wt+qsec, data=train, scale= TRUE , validation=" CV ")
pcr_pred <- predict(model, test, ncomp= 2 )

#calculate RMSE
sqrt ( mean ((pcr_pred - y_test)^2))

[1] 54.89609

Мы видим, что тестовый RMSE оказался равным 54,89609.Это среднее отклонение между прогнозируемым значением hp и наблюдаемым значением hp для наблюдений в тестовом наборе.

Обратите внимание, что эквивалентная регрессионная модель основных компонентов с двумя основными компонентами дала тестовую среднеквадратичную ошибку 56,86549.Таким образом, модель PLS немного превзошла модель PCR для этого набора данных.

Полное использование кода R в этом примере можно найти здесь .

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.