Professional Documents
Culture Documents
Кафедра інформаційних
технологій
ЗВІТ
з лабораторної роботи №1
дисципліни «Статистичне навчання»
Вінниця – 2023
Завдання 8
У цій вправі ми створимо штучні дані, а потім виконаємо для них відбір оптимального
підмножини змінних.
а) За допомогою функції rnorm() створимо предиктор Х довжиною n = 100, а також
вектора залишку e довжиною n = 100.
> X <- rnorm(100, mean = 0, sd = 1)
> e <- rnorm(100, mean = 0, sd = 1)
Результат:
Завдання 10
Раніше ми бачили, що при збільшенні числа включених у модель змінних помилка на
навчальній вибірці завжди буде знижуватися, тоді як помилка на контрольній вибірці не
обов'язково поводитиметься тим же чином. Тепер ми розглянемо цю властивість з
прикладу імітованих даних.
a) Створимо набір даних з р = 20 змінними, n = 1000 спостереженнями та відповідним
вектором кількісного відгуку, згенерованим згідно моделі
Y = Xβ + є,
де деякі елементи β дорівнюють 0.
Ми задаємо параметри моделі, у тому числі вектор коефіцієнтів beta, ненульові елементи
якого генеруються з нормального розподілу з параметрами mean = 2 і sd = 1. Матриця X
містить випадкові значення стандартного нормального розподілу, а вектор e містить
випадкові значення помилки, також згенеровані з нормального розподілу із заданим
стандартним відхиленням sigma. Нарешті, вектор відгуку Y обчислюється як добуток
матриці X вектор коефіцієнтів beta, збільшене на вектор помилки e. Результат
зберігається в датафреймі data, що містить стовпець відгуку Y та стовпці змінних X.
> set.seed(123)
> p <- 20
> n <- 1000
> beta <- rep(0, p)
> beta[1:5] <- rnorm(5, mean = 2, sd = 1)
> sigma <- 2
> X <- matrix(rnorm(n * p), n, p)
> e <- rnorm(n, sd = sigma)
> Y <- X %*% beta + e
> data <- data.frame(Y = Y, X)
Результат:
Завдання 11
Зараз ми намагатимемося передбачити рівень злочинності в розрахунку душу населення
за даними Boston.
a) Спробуємо застосувати деякі з розглянутих у цій главі регресійних методів -
наприклад, відбір оптимального підмножини змінних, ласо, гребеневу регресію та
PCR.
Завантаження данних:
> library(MASS)
> data(Boston)
Підготовка данних:
> Boston <- Boston[, -1]
> set.seed(123)
> train <- sample(1:nrow(Boston), 0.7 * nrow(Boston))
> train_data <- Boston[train, ]
> test_data <- Boston[-train, ]
> train_x <- as.matrix(train_data[, -ncol(train_data)])
> train_y <- as.matrix(train_data[, ncol(train_data)])
> test_x <- as.matrix(test_data[, -ncol(test_data)])
> test_y <- as.matrix(test_data[, ncol(test_data)])
Відбір оптимального підмножини змінних:
> library(MASS)
> set.seed(123)
> lm.fit <- lm(train_y ~ ., data = train_data)
> step.fit <- step(lm.fit, direction = "backward")
Результат:
Lasso регресія
> library(glmnet)
> set.seed(123)
> cv.lasso <- cv.glmnet(train_x, train_y, alpha = 1, nfolds = 10,
type.measure = "mse")
> best.lambda <- cv.lasso$lambda.min
> lasso.fit <- glmnet(train_x, train_y, alpha = 1, lambda = best.lambda)
> plot(lasso.fit, xvar = "lambda")
Результат:
Гребенева регресія
> library(glmnet)
> set.seed(123)
> cv.ridge <- cv.glmnet(train_x, train_y, alpha = 0, nfolds = 10, type.measure = "mse")
> best.lambda <- cv.ridge$lambda.min
> ridge.fit <- glmnet(train_x, train_y, alpha = 0, lambda = best.lambda)
> plot(ridge.fit, xvar = "lambda")
Резуьтат:
PCR
> set.seed(123)
> train_pca <- prcomp(train_x)
> summary(train_pca)
> library(pls)
> set.seed(123)
> pcr.fit <- pcr(train_y ~ ., data = train_data, scale = TRUE, validation =
"CV")
> validationplot(pcr.fit, val.type = "MSEP")
Результат:
Висновки:
Результати, отримані за допомогою відбору оптимального підмножини змінних,
говорять про те, що в моделі залишено чотири змінні: рівень злочинності на душу
населення (crim), частка землі під житлову забудову, зонована для ділянок понад 25 000
кв. футів (zn), частка немає торгових земель у радіусі 25 миль від центру міста (indus) і
концентрація оксиду азоту (nox). Ці змінні було обрано з урахуванням значимості
їхнього впливу залежну змінну - рівень злочинності душу населення.
Результати Lasso регресії показали, що оптимальний коефіцієнт регуляризації було
знайдено при значенні лямбда, близькому до нуля. Це говорить про те, що всі змінні
можуть бути значущими для моделі.
Результати гребеневої регресії показали, що оптимальний коефіцієнт регуляризації
було знайдено при значенні лямбда, близькому до 0.1. Це говорить про те, що не всі
змінні моделі є значущими, і деякі з них можуть бути виключені без значної втрати
точності моделі.
PCR показало, що оптимальна кількість компонентів для побудови моделі - це 5. Це
говорить про те, що в моделі має бути використано не менше 5 змінних для досягнення
оптимальної точності.
В цілому, отримані результати говорять про те, що в моделі можуть бути використані
всі змінні або тільки частина їх залежно від методу вибору змінних. Однак, вибір
оптимального підмножини змінних може допомогти зменшити кількість незначних
змінних та покращити точність моделі.