r - 恢复最小值以在 R 中应用转换
问题描述
我在训练集和测试集之间划分了一个数据集。在训练集上,我使用该数据集的最小值和最大值应用归一化。我们以 iris 数据集为例:
iris_vars <- iris[,1:4] %>%
mutate(id = row_number())
iris_train <- iris_vars %>%
sample_n(100)
iris_test <- iris_vars %>%
filter(!id %in% iris_train$id)
iris_train_norm <- iris_train %>%
select(-id) %>%
mutate(across(where(is.numeric),
.fns = function(x) (x - min(x))/(max(x)-min(x))))
head(iris_train_norm)
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 0.9444444 0.3333333 0.96610169 0.79166667
2 0.1666667 0.4583333 0.08474576 0.00000000
3 0.9444444 0.2500000 1.00000000 0.91666667
4 0.2777778 0.7083333 0.08474576 0.04166667
5 0.2222222 0.2083333 0.33898305 0.41666667
6 0.2222222 0.7500000 0.08474576 0.08333333
现在要将这种转换应用于测试集,我必须记住训练集的最小值。这是一种将训练集上的最小值和最大值作为向量的方法:
iris_train_mins <- c(min(iris_train$Sepal.Length),
min(iris_train$Sepal.Width),
min(iris_train$Petal.Length),
min(iris_train$Petal.Width))
> iris_train_mins
[1] 4.3 2.0 1.0 0.1
iris_train_maxs <- c(max(iris_train$Sepal.Length),
max(iris_train$Sepal.Width),
max(iris_train$Petal.Length),
max(iris_train$Petal.Width))
> iris_train_maxs
[1] 7.9 4.4 6.9 2.5
现在我必须使用这些向量的最大值和最小值。由于分母是固定的,我的问题是减去每行的最小值。我用扫描试过这个:
这些是测试集的前两个观察结果:
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 4.6 3.4 1.4 0.3
2 4.4 2.9 1.4 0.2
减去最小值
[1] 4.3 2.0 1.0 0.1
应该:
Sepal.Length Sepal.Width Petal.Length Petal.Width
0.3 1.4 0.4 0.2
0.1 0.9 0.4 0.1
但是我申请了扫描,我得到了一个错误的答案:
first_step <- sweep(iris_test[,1:4], 1, iris_train_mins, FUN = "-")
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 0.3 2.4 -2.9 -0.7
2 2.4 2.8 -0.6 0.1
请问,你知道我做错了什么吗?任何帮助将不胜感激。
解决方案
要将数据列减去您需要使用sweep
边距 2 的最小值。尝试 -
cols <- 1:4
first_step <- sweep(iris_test[cols], 2, sapply(iris_train[cols], min), `-`)
first_step
推荐阅读
- angular6 - 在 Angular 6 上寻找滚动事件的库,例如 Scrollwizardry
- c++-cli - 语法错误:'->' 和语法错误:缺少';' 在'->'之前
- java - Spring Boot 多上下文 application.properties 问题
- javascript - Javascript 上的长日期格式 - PDF Stamp
- html - IE 和 Edge 中的视频伪影问题
- npm - 有没有办法将 npm .tar 文件存储在 Artifactory 的远程存储库中?
- php - 如何防止重新执行查询php+mysql
- powershell - 忽略 Powershell 中 FFMPEG 控制台输出的特定警告
- r - R 闪亮的隐藏/显示操作按钮
- python - 用于 OpenFoam 的 jupyter 笔记本中的 Paraview:没有名为 vtkCommonCorePython 的模块