繁体   English   中英

在 R 中,当使用预测 function 时,cv.glmnet(或 glmnet)如何缩放测试数据?

[英]In R, how does cv.glmnet (or glmnet) scale the test data when using the predict function?

在 cv.glmnet function 中,有一个自动标准化数据的选项。 如果你 select 这个,预测 function 如何缩放测试数据?

例子:

cvob1 = cv.glmnet(x_train, y, standardize = TRUE)
# Note standardize = TRUE is the default option and just added here for illustration
predict(cvob1, newx = x_test, s = "lambda.min")

在正常的训练测试分析中,您将缩放器拟合到训练数据,然后使用它来转换训练集和测试集。 glmnet 也这样做吗? 或者它是否使用来自测试集的参数(预测函数中的 newx)来扩展测试集?

# Python code - does the R package do the same under the hood?
scaler = StandardScaler()
scaler.fit(train)
scaler.transform(train)
scaler.transform(test)

谢谢你的帮助!

是的, glmnet基本上做同样的事情,但方式不同。 glmnet 的帮助glmnet说关于standardize

系数始终以原始比例返回。

这相当于以与训练数据相同的方式缩放测试数据。 您可以进行快速测试:

library(glmnet)
#> Loading required package: Matrix
#> Loaded glmnet 4.1

set.seed(4)
train_data <- matrix(rnorm(100 * 10, mean = 1.5, sd = 1.3),
                     nrow = 100, ncol = 10)

means <- apply(train_data, 2, mean)
sds <- apply(train_data, 2, sd)

outcome <- train_data %*% matrix(c(0.5, -1, 0, 2, 0, 0, 3, 2.5, -2, 0), ncol = 1) +
  rnorm(100)

train_data_scaled <- train_data
for (i in seq_len(ncol(train_data))) {
  train_data_scaled[, i] <- (train_data_scaled[, i] - means[i]) / sds[i]
}

test_data <- matrix(rnorm(100 * 10, mean = 1.5, sd = 1.3),
                    nrow = 100, ncol = 10)

test_data_scaled <- test_data
for (i in seq_len(ncol(train_data))) {
  test_data_scaled[, i] <- (test_data_scaled[, i] - means[i]) / sds[i]
}
set.seed(4)
glmnet_res <- cv.glmnet(train_data, outcome)
set.seed(4)
glmnet_res_prescaled <- cv.glmnet(train_data_scaled, outcome, standardize = FALSE)

test_1 <- predict(glmnet_res, newx = test_data, s = "lambda.1se")
test_2 <- predict(glmnet_res_prescaled, newx = test_data_scaled, s = "lambda.1se")
all.equal(test_1, test_2)
#> [1] TRUE

代表 package (v1.0.0) 于 2022 年 1 月 31 日创建

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM