2016-11-27 247 views
0

これはPCAの一般的なエラーですが、svd(x、nu = 0)のエラー: 'x'の無限または欠損値(負の値がないことを確認)

Iに従う: 以下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_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 

列の最小値は負の値です。

私は機械学習が初めてです。提供されたヘルプを評価してください。図示の正確なエラーは、ゼロ値を含むオブジェクト(dataset)に対数変換を適用

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

@ZheyuanLiその結果は非常に長くなりました...私はここにインクルードする可能性があります。私のコードでいくつかの誤字も訂正しました。参照ウェブサイトはhttps://www.r-bloggers.com/computing-and-visualizing-pca-in-r/ –

+0

でした。私の質問に表示されたエラーを追加しました –

+0

変数の中には分散がゼロ。これを 'apply(x、2、var)== 0'またはそれに類するもので調べることができます。 – Joe

答えて

1

ました。これにより、負の無限大の要素が生成されます。代わりにlog1p()を使用してください。

また、エンコードする標準化を関数normalize()に適用することを忘れないでください。

また、外れ値の大きさを考慮すると、ログ変換が十分であるかどうかはわかりません。いくつかの観測を除外する必要があるかもしれません。

関連する問題