R 标准化后,我得到NA、NAN和1e+;00类型值
我有一个5000行785列的数据集。数据集由0-255之间的整数组成。我想要的是规范化最小-最大[0,1]范围,不包括第一列。为此,我编写了以下代码。 总结的结果(MNIST)给了我R 标准化后,我得到NA、NAN和1e+;00类型值,r,R,我有一个5000行785列的数据集。数据集由0-255之间的整数组成。我想要的是规范化最小-最大[0,1]范围,不包括第一列。为此,我编写了以下代码。 总结的结果(MNIST)给了我 summary(MNIST[c("X14","X234", "X643", "X543", "X666")]) X14 X234 X643 X543 X666 Min. :0 Min. : 0.0
summary(MNIST[c("X14","X234", "X643", "X543", "X666")])
X14 X234 X643 X543 X666
Min. :0 Min. : 0.00 Min. : 0.0000 Min. : 0.00 Min. : 0.00
1st Qu.:0 1st Qu.: 0.00 1st Qu.: 0.0000 1st Qu.: 0.00 1st Qu.: 0.00
Median :0 Median : 0.00 Median : 0.0000 Median : 0.00 Median : 0.00
Mean :0 Mean : 73.45 Mean : 0.0298 Mean : 79.43 Mean : 3.49
3rd Qu.:0 3rd Qu.:169.00 3rd Qu.: 0.0000 3rd Qu.:199.00 3rd Qu.: 0.00
Max. :0 Max. :255.00 Max. :149.0000 Max. :255.00 Max. :255.00
normalize <- function(x) { // even tried with function(x,na.rm = TRUE) {
return ((x - min(x)) / (max(x) - min(x)))
}
MNIST_n <- as.data.frame(lapply(MNIST[2:785], normalize)) //MNIST is orignal dataset and MNIST_n is normalised
我怎样才能去掉NA和NAN以及像0e+00这样的值
我注意到它只在min和max有0个值时出现您需要在对
min()
和max()
的每个函数调用中输入na.rm=TRUE
normalize问题是,不能将常量列规格化为[0,1]中的值。您可以向函数中添加以下内容:
normalize <- function(x) {
z=x
if(min(x)<max(x)){
z=(x - min(x)) / (max(x) - min(x))
}
return(z)
}
normalize我相信这会奏效:
normalize <- function(x) {
minx = min(x)
maxx = max(x)
if(minx == maxx) {
return(x)
} else {
return( (x - minx) / (maxx - minx) )
}
}
normalize它将在任何时候发生min(x)=max(x)
因为“normalize”函数被零除,因此您得到的结果是NA's抱歉,我被您将NA.rm参数放在normalize函数调用中而不是放在min和max调用中分散了注意力。其他答案指向您可能的实际问题。我也会将其插入我的代码中,这样谷歌就不会复制不完整的代码。更新后,我得到这些值“0e+00”,而且在coulmn 1中,我得到的是0.5而不是00+e00。这不是问题,只是意味着0。之所以使用这种符号,是因为其中一个汇总统计数据,即平均值,太小,无法很好地用0.0002的正常符号表示在表中。0.5值是正常值,因为它确实是我在没有正确的标准化解决方案时插入的值,因为您不接受NA或NaN。您可以插入任何其他内容,或原始值,或任何对应用程序有利的内容。如果向量中的所有值都是0,您希望它们是什么,以便它们的范围从0扩展到1?没有正确的解决办法。回答得好。但是,规范化的目的是将不同的列带入相同的范围,因此,可能最好返回一个固定值,如0.5,而不是原始值。@mpjdem我不同意最后的建议。规范化常数毫无意义,报告任意答案不太可能有用,也可能会产生误导。奥托,我会对一个真正的理论基础感兴趣。它确实没有数学意义。但是,根据应用程序的不同(例如,在同一个图形上绘制所有变量以供目视检查),可能不希望有一个变量远远超出所有其他变量的范围。如果NA和NaN不可接受,则没有“正确”的解决方案来规范化数据,这将取决于应用程序,IMO.@mpjdem OK。对于绘图,如果变量很重要,我会报告哪些变量是常量。在一列中绘制0.5将浪费空间。X14上仍然是NA?它甚至没有标准化任何克隆
normalize <- function(x) {
z=x
if(min(x)<max(x)){
z=(x - min(x)) / (max(x) - min(x))
}
return(z)
}
normalize <- function(x) {
return(ifelse(min(x)<max(x),(x - min(x)) / (max(x) - min(x)),x))
}
normalize <- function(x,const=mean(x)) {
return(ifelse(min(x)<max(x),(x - min(x)) / (max(x) - min(x)),const))
}
normalize <- function(x) {
minx = min(x)
maxx = max(x)
if(minx == maxx) {
return(x)
} else {
return( (x - minx) / (maxx - minx) )
}
}