# You can write R code here and then click "Run" to run it on our platform

library(readr)

# The competition datafiles are in the directory ../input
# Read competition data files:
train <- read_csv("../input/train.csv")
test <- read_csv("../input/test.csv")

# Write to the log:
cat(sprintf("Training set has %d rows and %d columns\n", nrow(train), ncol(train)))
cat(sprintf("Test set has %d rows and %d columns\n", nrow(test), ncol(test)))

# Generate output files with write_csv(), plot() or ggplot()
# Any files you write to the current directory get shown as outputs

library(class)
library(gmodels)
#generate label 

label <- train[,1]

#generate training data without lable

train.data <- train[, -1]

#Feature selection via PCA
train.data.var <- apply(train.data, 2, var)
train.pca <- train.data[,train.data.var!=0]
train.pca.result <- prcomp(train.pca, scale=TRUE)
pca.train <- train.pca.result$x
test.data.var <- apply(test, 2, var)
test.pca <- test[,test.data.var!=0]
test.pca.result <- prcomp(test.pca, scale=TRUE)
pca.test <- test.pca.result$x

# pca.test <- predict(pca.train, test)



# Implement KNN algorithm
#Euclidean_distance
# Euclidean <- function(a, b){
#         
#        distance <- sum((a-b) * (a-b))
#        return(distance) 
# }

comps <- 1:45
prediction <- knn(pca.train[,comps], pca.test[,comps], label, k = 4)
output <- data.frame(ImageId = 1:nrow(test), Label = prediction)
write_csv(output, "knn_predict.csv")

#Evaluaton
eva_train <- knn(pca.train[,comps], train.data[,comps], label, k =4)
plot <- CrossTable(x = label, y = eva_train, prop.chisq=FALSE)
