【问题标题】:Error in svd(x, nu = 0) : infinite or missing values in 'x' (checked no negative values exist)svd(x, nu = 0) 中的错误:“x”中的值无限或缺失(已检查不存在负值)
【发布时间】:2016-11-27 08:32:13
【问题描述】:

我知道这是 PCA 的常见错误,但我查看了提供的解决方案,但它不起作用。

我关注了: Error in svd(x, nu = 0) : 0 extent dimensions

以下是我的代码摘录:

require(class)
set.seed(2095)
# dataset source:https://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html
normalize<-function(x) {
  return ((x - min(x)) / (max(x) - min(x)))
}
dataset <- read.csv("data/kdd_data_10pc.csv", header = FALSE, sep = ",")
names   <- read.csv("data/kdd_names.csv", header = FALSE , sep = ";")
names(dataset) <- sapply((1:nrow(names)),function(i) toString(names[i, 1]))

# extracting relevant features
dataset_extracted <- dataset[, c("src_bytes", "dest_bytes", "count", "dst_host_count", "dst_host_same_srv_rate", "dst_host_serror_rate", "label")]

head(dataset_extracted, 3)

log.kdd   <-log(dataset_extracted[, 1:6])
kdd.label <- dataset_extracted[, 7]

kdd.pca <-prcomp(log.kdd,
             center = TRUE,
             scale. = TRUE)

Summary(dataset) 输出如下:

 summary(dataset_extracted)
   src_bytes           dest_bytes          count       dst_host_count  dst_host_same_srv_rate dst_host_serror_rate      label       
 Min.   :        0   Min.   :      0   Min.   :  0.0   Min.   :  0.0   Min.   :0.0000         Min.   :0.0000       smurf.  :280790  
 1st Qu.:       45   1st Qu.:      0   1st Qu.:117.0   1st Qu.:255.0   1st Qu.:0.4100         1st Qu.:0.0000       neptune.:107201  
 Median :      520   Median :      0   Median :510.0   Median :255.0   Median :1.0000         Median :0.0000       normal. : 97278  
 Mean   :     3026   Mean   :    869   Mean   :332.3   Mean   :232.5   Mean   :0.7538         Mean   :0.1768       back.   :  2203  
 3rd Qu.:     1032   3rd Qu.:      0   3rd Qu.:511.0   3rd Qu.:255.0   3rd Qu.:1.0000         3rd Qu.:0.0000       satan.  :  1589  
 Max.   :693375640   Max.   :5155468   Max.   :511.0   Max.   :255.0   Max.   :1.0000         Max.   :1.0000       ipsweep.:  1247  
                                                                                                                   (Other) :  3713  

根据摘要,提取的列最小值都不是负值。

我是机器学习的新手。感谢提供的任何帮助。显示的确切错误是

Error in svd(x, nu = 0) : infinite or missing values in 'x'

【问题讨论】:

  • @ZheyuanLi 结果非常冗长...我不认为将其包含在此处是可行的..我还纠正了代码中的一些错字。参考网站是r-bloggers.com/computing-and-visualizing-pca-in-r
  • 我添加了问题中显示的错误
  • 这可能是因为您的某些变量的方差为零。您可以使用apply(x, 2, var) == 0 或类似的方式进行检查。
  • this不是同样的问题和解决方法吗?
  • @Joe 不确定它是否与提供的解决方案相同...

标签: r machine-learning pca


【解决方案1】:

您将日志转换应用于包含零值的对象 (dataset)。这将产生负无穷大的元素。尝试改用log1p()

别忘了应用您在函数normalize() 中编码的标准化。

此外,考虑到一些异常值的大小,我不确定对数转换是否足够 - 您可能需要考虑排除一些观察结果。

【讨论】:

    猜你喜欢
    • 2021-08-07
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多