2016-06-21 2 views
4

Mon jeu de données est le MNIST de KaggleR - Photo Terrain MNIST ensemble de données

Je suis en train d'utiliser la fonction image pour visualiser dire le premier chiffre dans l'ensemble de la formation. Malheureusement, je reçois l'erreur suivante:

>image(1:28, 1:28, im, col=gray((0:255)/255)) 
Error in image.default(1:28, 1:28, im, col = gray((0:255)/255)) : 
'z' must be numeric or logical 

Ajout de quelques codes:

rawfile<-read.csv("D://Kaggle//MNIST//train.csv",header=T) #Reading the csv file 
im<-matrix((rawfile[1,2:ncol(rawfile)]), nrow=28, ncol=28) #For the 1st Image 

image(1:28, 1:28, im, col=gray((0:255)/255)) 

Error in image.default(1:28, 1:28, im, col = gray((0:255)/255)) : 
'z' must be numeric or logical 

Répondre

5

Au moment où votre im est une matrice de caractères. Vous devez le convertir en une matrice de nombres, par ex. en émettant im_numbers <- apply(im, 2, as.numeric).

Vous pouvez ensuite émettre image(1:28, 1:28, im_numbers, col=gray((0:255)/255)).

0

Do image (01h28, 01h28, im_numbers, col = gris ((255: 0)/255)) pour le numéro noir sur fond blanc ... =]

1

J'ai essayé pour tracer le même ensemble de données avec la fonction graphics::image. Cependant, étant donné que la matrice ont tendance à être rempli d'une manière que le chiffre ne correspond pas correctement, je l'ai écrit une fonction qui rend une parcelle appropriée pour une observation donnée:

#Function to visualize a number 
img <- function(data, row_index){ 

#Obtaining the row as a numeric vector 
r <- as.numeric(d[row_index, 2:785]) 

#Creating a empty matrix to use 
im <- matrix(nrow = 28, ncol = 28) 

#Filling properly the data into the matrix 
j <- 1 
for(i in 28:1){ 

    im[,i] <- r[j:(j+27)] 

    j <- j+28 

} 

#Plotting the image with the label 
image(x = 1:28, 
     y = 1:28, 
     z = im, 
     col=gray((0:255)/255), 
     main = paste("Number:", d[row_index, 1])) 
} 

Je l'ai écrit parce que j'eu du mal en essayant pour trouver un moyen de tracer correctement, et puisque je ne l'ai pas trouvé, je partage la fonction ici pour que les autres puissent l'utiliser.