gpt4 book ai didi

r - 用于训练和测试数据的r中的最小最大缩放/归一化

转载 作者:行者123 更新时间:2023-12-03 15:58:22 26 4
gpt4 key购买 nike

我正在寻找一个将训练集和测试集作为其参数的函数,最小-最大缩放/归一化并返回训练集,并使用最小和范围的那些相同的值来最小/最大缩放/归一化并返回测试集。

到目前为止,这是我想出的功能:

min_max_scaling <- function(train, test){

min_vals <- sapply(train, min)
range1 <- sapply(train, function(x) diff(range(x)))

# scale the training data

train_scaled <- data.frame(matrix(nrow = nrow(train), ncol = ncol(train)))

for(i in seq_len(ncol(train))){
column <- (train[,i] - min_vals[i])/range1[i]
train_scaled[i] <- column
}

colnames(train_scaled) <- colnames(train)

# scale the testing data using the min and range of the train data

test_scaled <- data.frame(matrix(nrow = nrow(test), ncol = ncol(test)))

for(i in seq_len(ncol(test))){
column <- (test[,i] - min_vals[i])/range1[i]
test_scaled[i] <- column
}

colnames(test_scaled) <- colnames(test)

return(list(train = train_scaled, test = test_scaled))
}

最小最大缩放的定义类似于前面在SO- Normalisation of a two column data using min and max values上提出的问题

我的问题是:
1.有没有一种方法可以对函数中的两个 for循环进行矢量化处理?例如使用 sapply() 2.是否有任何软件包可以让我们做我们打算在这里做的事情?

最佳答案

这是用于最小-最大归一化的代码。有关公式以及执行特征缩放的其他方法,请参见此Wikipedia page

normalize <- function(x, na.rm = TRUE) {
return((x- min(x)) /(max(x)-min(x)))
}
要获取向量,请使用 apply而不是 lapply
as.data.frame(apply(df$name, normalize))

更新以解决 Holger的建议。
如果要将其他参数传递给 min()max(),例如 na.rm,则可以使用:
normalize <- function(x, ...) {
return((x - min(x, ...)) /(max(x, ...) - min(x, ...)))
}

x <- c(1, NA, 2, 3)

normalize(a)
# [1] NA NA NA NA

normalize(a, na.rm = TRUE)
# 0.0 NA 0.5 1.0
请记住,无论您通过省略号 min()传递给 ...还是隐式传递给 max()。在这种情况下,这应该不是什么大问题,因为 min()max()共享相同的函数签名。

关于r - 用于训练和测试数据的r中的最小最大缩放/归一化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44050028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com