Я создал код для имитации набора данных в R, чтобы увидеть, как работает обратный выбор в машинном обучении.И я сгенерировал функцию poly () для написания полиномиальной функции, а затем хотел выбрать подходящий полином, используя Cp, BIC, скорректированный R ^ 2.
Код:
###Generating dataset
set.seed(1)
X = rnorm(100)
eps = rnorm(100)
beta0 = 3
beta1 = 2
beta2 = -3
beta3 = 0.3
Y = beta0 + beta1 * X + beta2 * X^2 + beta3 * X^3 + eps
library(leaps)
data.full = data.frame(y = Y, x = X)
mod.full = regsubsets(y ~ poly(x, 10, raw = T), data = data.full, nvmax = 10)
mod.summary = summary(mod.full)
### Find the model size for best cp, BIC and adjr2
which.min(mod.summary$cp)
Для cp, BIC и скорректированного R ^ 2 я получаю модель с полиномом 3, как и должно быть
Однако теперь я хочусмоделируйте 100 наборов данных и посмотрите, сколько наборов данных я получаю правильную модель.Я смоделировал 100 наборов данных, но теперь я не получаю полином 3 для каждого из показателей.И я не совсем понимаю, что я делаю не так.Мой код для симуляции:
###Generating 100 datasets
data <- replicate(100, rnorm(n=100))
epsilon <- replicate(100,rnorm(n=100))
###Formula (same as before)
Y = beta0 + beta1 * data + beta2 * data^2 + beta3 * data^3 + epsilon
data.full = data.frame(y = Y, x = data)
###Using polynomial terms
mod.bwd = regsubsets(data.full$y.1 ~ poly(data.full$x.1, 10, raw = T), data = data.full, nvmax = 10,
method = "backward")
bwd.summary = summary(mod.bwd)
which.min(bwd.summary$cp)
which.min(bwd.summary$bic)
which.max(bwd.summary$adjr2)
Для данного подмножества cp, Bic, adjr2 дают мне разные результаты.Например, использование y.1 и x.1 (первый набор данных в моделировании) дает следующие результаты:
which.min (bwd.summary $ cp): 7
which.min (bwd.summary $ bic): 4
which.max (bwd.summary $ adjr2): 9
Может кто-нибудь помочь мне в том, что я делаю неправильно при моделировании этих100 наборов данных.