# Creates a simple random forest benchmark

library(randomForest)
library(readr)
library(caret)

set.seed(0)



#read in data
train <- read_csv("../input/train.csv")
test <- read_csv("../input/test.csv")

#subset labels and training data into CV and train sets
inCV<-sample(1:nrow(train), size = .33*nrow(train))
CV.labels <- as.factor(train[inCV,1])
CV<-train[inCV,-1]

train.labels <- as.factor(train[-inCV,1])
train<-train[-inCV,-1]

#preprocess train and test sets
    #remove nearZeroVariance predictors
test<-test[,-nearZeroVar(train)]
CV<-CV[,-nearZeroVar(train)]
train<-train[,-nearZeroVar(train)]

    #Principal Component Analysis
pca<-preProcess(train, method=c("center","scale"))
train<-predict(pca,train)
test<-predict(pca,test)
CV<-predict(pca,CV)

#set parameters
numTrees <- 200
nodesize<-10
mtry<-ncol(train)*0.75

#compute random forest model
rf <- randomForest(train, train.labels, ntree=numTrees,nodesize=nodesize)



#predict on test set/CV
testPredictions<-predict(rf,test)
CVpredictions<-predict(rf,CV)
predictions <- data.frame(ImageId=1:nrow(test), Label=testPredictions)


cat(sum(CVpredictions==CV.labels)/nrow(CV.labels))

#output test set
write_csv(predictions, "rf.csv")

print(rf)
