# Set up parameters meanA <- 1.5 # mean for class A meanB <- 0 # mean for class B sdA <- 1 # standard deviation for A sdB <- 0.7 # standard deviation for B # Create 100 random points and store them into 50 x 2 matrix matA <- matrix(data = rnorm(n = 100, mean = meanA, sd = sdA), nrow = 50, ncol = 2) matB <- matrix(data = rnorm(n = 100, mean = meanB, sd = sdB), nrow = 50, ncol = 2) # Combine 2 matrix points <- rbind(matA, matB) # Label A as 1, B as -1 labels <- matrix(c(rep(1, 50), rep(-1,50))) # Now plot class A as a red point, B as a blue point plot(points, col = ifelse(labels > 0, 2, 4)) # Splitting dataset into a train set and a test set sample_index <- sample(100,70) # randomly pick 70 indecies train_data <- points[sample_index,] test_data <- points[-sample_index,] train_label <- labels[sample_index,] test_label <- labels[-sample_index,] # Import class library library(class) # kNN Classifier with k = 1 classifier_1 <- knn(train = train_data, test = test_data, cl = train_label, k = 1) # kNN Classifier with k = 3 classifier_3 <- knn(train = train_data, test = test_data, cl = train_label, k = 3) # kNN Classifier with k = 5 classifier_5 <- knn(train = train_data, test = test_data, cl = train_label, k = 5) # kNN Classifier with k = 7 classifier_7 <- knn(train = train_data, test = test_data, cl = train_label, k = 7) # Here is a simple way to check accuracy mean(classifier_1 == test_label) mean(classifier_3 == test_label) mean(classifier_5 == test_label) mean(classifier_7 == test_label) table(test_label, classifier_1) table(test_label, classifier_3) table(test_label, classifier_5) table(test_label, classifier_7) library(e1071) ind <- sample(150, 150*0.8) iris.train <- iris[ind,] iris.test <- iris[-ind,] fit <- naiveBayes(Species~., data=iris.train) pred <- predict(newdata=iris.test, object = fit) table(pred, iris.test$Species) # import library e1071 library("e1071") # If you are using SVM as a classifier, you need to input non-numeric value to the function svm.classifier <- svm(train_data, as.factor(train_label)) # Now test your SVM model with test_data svm.prediction <- predict(svm.classifier, test_data) # Check the accuracy sum(svm.prediction == test_label) / 30 table(test_label, svm.prediction) summary(svm.classifier) # Optimize SVM classifier tune.svm(x = train_data, y = factor(train_label), cost = 10^(-1:3), gamma =c(.5:2)) # Create new classifier with different parameters tuned_svm_classifier <- svm(train_data, as.factor(train_label), cost = 0.1, gamma = 0.5) tuned_prediction <- predict(tuned_svm_classifier, test_data) # Check the accuracy sum(tuned_prediction == test_label) / 30