R – funcția svd() – valori infinite sau lipsă în ‘x’ (Programare, R, Infinit, Svd)

Shubham Saini a intrebat.

Primesc în mod constant această eroare. Sunt sigur că matricea nu are intrări nenumerice. Am încercat, de asemenea, imputând matricea, nu a funcționat.

Știe cineva care ar putea fi eroarea?

fileUrl <- "https://dl.dropboxusercontent.com/u/76668273/kdd.csv";
download.file(fileUrl,destfile="./kdd.csv",method="curl");
kddtrain <- read.csv("kdd.csv");
kddnumeric <- kddtrain[,sapply(kddtrain,is.numeric)];
kddmatrix <- as.matrix(kddnumeric);
svd1 <- svd(scale(kddmatrix));

Comentarii

  • În viitor, un mic exemplu reproductibil (și nu ceva care necesită descărcare) este apreciat. –  > Por Blue Magister.
1 răspunsuri
Blue Magister

Aveți coloane compuse numai din zerouri. Folosind scale pe o coloană cu toate zerourile returnează o coloană compusă din NaN. Pentru a rezolva acest lucru, eliminați coloanele în care aveți toate zerourile (svd nu va dezvălui nimic nou despre ele), sau înlocuiți NaN coloanele cu zerouri după ce se utilizează scale.

Exemplu reproductibil:

mat <- matrix(c(1,2,3,0,0,0,2,4,6,5,12,13),nrow = 3)
     # [,1] [,2] [,3] [,4]
# [1,]    1    0    2    5
# [2,]    2    0    4   12
# [3,]    3    0    6   13
scale(mat)
     # [,1] [,2] [,3]       [,4]
# [1,]   -1  NaN   -1 -1.1470787
# [2,]    0  NaN    0  0.4588315
# [3,]    1  NaN    1  0.6882472
# attr(,"scaled:center")
# [1]  2  0  4 10
# attr(,"scaled:scale")
# [1] 1.000000 0.000000 2.000000 4.358899
svd(mat) #fine
svd(scale(mat)) # not fine

Comentarii

  • mulțumesc mult, răspuns perfect. o simplă linie kddmatrix <- kddmatrix[,colSums(kddmatrix= 0)= 0] înainte de a aplica svd a rezolvat. –  > Por Shubham Saini.

Tags:, ,