KNN

data(iris)
## split in train/test 
idx<-sample(150,50)
trainset<-iris[-idx,]
testset<-iris[idx,]

knn_model <- caret::knn3(Species ~ .,data = trainset, k=3)

# predictins on trainset
predictions <- predict(knn_model,trainset,type="class")
caret::confusionMatrix(predictions,trainset$Species)
Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         33          0         0
  versicolor      0         33         1
  virginica       0          1        32

Overall Statistics
                                          
               Accuracy : 0.98            
                 95% CI : (0.9296, 0.9976)
    No Information Rate : 0.34            
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.97            
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                   1.00            0.9706           0.9697
Specificity                   1.00            0.9848           0.9851
Pos Pred Value                1.00            0.9706           0.9697
Neg Pred Value                1.00            0.9848           0.9851
Prevalence                    0.33            0.3400           0.3300
Detection Rate                0.33            0.3300           0.3200
Detection Prevalence          0.33            0.3400           0.3300
Balanced Accuracy             1.00            0.9777           0.9774
# Prediction on testset
predictions <- predict(knn_model,testset,type="class")
# Calculate Confusion MAtrix
caret::confusionMatrix(predictions,testset$Species)
Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         17          0         0
  versicolor      0         15         1
  virginica       0          1        16

Overall Statistics
                                          
               Accuracy : 0.96            
                 95% CI : (0.8629, 0.9951)
    No Information Rate : 0.34            
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.94            
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                   1.00            0.9375           0.9412
Specificity                   1.00            0.9706           0.9697
Pos Pred Value                1.00            0.9375           0.9412
Neg Pred Value                1.00            0.9706           0.9697
Prevalence                    0.34            0.3200           0.3400
Detection Rate                0.34            0.3000           0.3200
Detection Prevalence          0.34            0.3200           0.3400
Balanced Accuracy             1.00            0.9540           0.9554

Random Forest

library(randomForest)
library(dplyr)
data(iris)
#set.seed(71)

idx<-sample(150,50)
trainset<-iris[-idx,]
testset<-iris[idx,]

iris.rf <- randomForest(Species ~ Petal.Width, data=trainset)
iris.rf <- randomForest(Species ~ ., data=trainset,)

# Calculate importance
importance(iris.rf)
             MeanDecreaseGini
Sepal.Length         7.102603
Sepal.Width          1.416911
Petal.Length        27.407175
Petal.Width         29.662431
predictions<-predict(iris.rf,testset)
caret::confusionMatrix(as.factor(predictions),testset$Species)
Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         12          0         0
  versicolor      0         20         1
  virginica       0          1        16

Overall Statistics
                                          
               Accuracy : 0.96            
                 95% CI : (0.8629, 0.9951)
    No Information Rate : 0.42            
    P-Value [Acc > NIR] : 3.498e-16       
                                          
                  Kappa : 0.9385          
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                   1.00            0.9524           0.9412
Specificity                   1.00            0.9655           0.9697
Pos Pred Value                1.00            0.9524           0.9412
Neg Pred Value                1.00            0.9655           0.9697
Prevalence                    0.24            0.4200           0.3400
Detection Rate                0.24            0.4000           0.3200
Detection Prevalence          0.24            0.4200           0.3400
Balanced Accuracy             1.00            0.9589           0.9554

ARBOLES DE DECISION

El paquete rpart implementa un tipo de arbol de decision (CART)

library(rpart)
library(rpart.plot)
idx<-sample(150,50)
trainset<-iris[-idx,]
testset<-iris[idx,]

iris.rpart<-rpart(Species ~., data=trainset)
rpart.plot(iris.rpart)


predictions <- predict(iris.rpart,testset,type="class")
caret::confusionMatrix(predictions,testset$Species)
Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         20          0         0
  versicolor      0         15         0
  virginica       0          2        13

Overall Statistics
                                          
               Accuracy : 0.96            
                 95% CI : (0.8629, 0.9951)
    No Information Rate : 0.4             
    P-Value [Acc > NIR] : < 2.2e-16       
                                          
                  Kappa : 0.9394          
                                          
 Mcnemar's Test P-Value : NA              

Statistics by Class:

                     Class: setosa Class: versicolor Class: virginica
Sensitivity                    1.0            0.8824           1.0000
Specificity                    1.0            1.0000           0.9459
Pos Pred Value                 1.0            1.0000           0.8667
Neg Pred Value                 1.0            0.9429           1.0000
Prevalence                     0.4            0.3400           0.2600
Detection Rate                 0.4            0.3000           0.2600
Detection Prevalence           0.4            0.3000           0.3000
Balanced Accuracy              1.0            0.9412           0.9730

Naive Bayes

data(iris)
library(naivebayes)
naivebayes 0.9.7 loaded
m <- naivebayes::naive_bayes(Species~., data = iris)
preds<- predict(m,newdata=iris,type='prob')
Warning: predict.naive_bayes(): more features in the newdata are provided as there are probability tables in the object. Calculation is performed based on features to be found in the tables.
apply(preds, 1,
      function(x) {
        names(x)[which.max(x)]
      })
  [1] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
  [9] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
 [17] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
 [25] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
 [33] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
 [41] "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"     "setosa"    
 [49] "setosa"     "setosa"     "versicolor" "versicolor" "virginica"  "versicolor" "versicolor" "versicolor"
 [57] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
 [65] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "virginica"  "versicolor"
 [73] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "virginica"  "versicolor" "versicolor"
 [81] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
 [89] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
 [97] "versicolor" "versicolor" "versicolor" "versicolor" "virginica"  "virginica"  "virginica"  "virginica" 
[105] "virginica"  "virginica"  "versicolor" "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
[113] "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "versicolor"
[121] "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
[129] "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "versicolor" "virginica"  "virginica" 
[137] "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 
[145] "virginica"  "virginica"  "virginica"  "virginica"  "virginica"  "virginica" 

Caret

Lo mismo pero utilizando el paquete Caret que nos permite cambiar facilmente el algoritmo a utilizar

library(caret)
Loading required package: ggplot2

Attaching package: ‘ggplot2’

The following object is masked from ‘package:randomForest’:

    margin

Loading required package: lattice
ctrl_fast <- trainControl(method="cv", 
                     number=5, 
                     verboseIter=T,
                     classProbs=F,
                     allowParallel = TRUE)  
train_formula<-formula(Species~.)

model_caret<- train(train_formula,
               data = iris,
               method = "naive_bayes",
               #method = "rf",
               #method = "knn",
               trControl = ctrl_fast)

model_caret
model_caret$finalModel
LS0tCnRpdGxlOiAiS05OIGFuZCBSYW5kb20gRm9yZXN0IGFuZCBvdGhlciBNTCBhbGdvcml0aG1zIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIEtOTgoKYGBge3J9CmRhdGEoaXJpcykKIyMgc3BsaXQgaW4gdHJhaW4vdGVzdCAKaWR4PC1zYW1wbGUoMTUwLDUwKQp0cmFpbnNldDwtaXJpc1staWR4LF0KdGVzdHNldDwtaXJpc1tpZHgsXQoKa25uX21vZGVsIDwtIGNhcmV0Ojprbm4zKFNwZWNpZXMgfiAuLGRhdGEgPSB0cmFpbnNldCwgaz0zKQoKIyBwcmVkaWN0aW5zIG9uIHRyYWluc2V0CnByZWRpY3Rpb25zIDwtIHByZWRpY3Qoa25uX21vZGVsLHRyYWluc2V0LHR5cGU9ImNsYXNzIikKY2FyZXQ6OmNvbmZ1c2lvbk1hdHJpeChwcmVkaWN0aW9ucyx0cmFpbnNldCRTcGVjaWVzKQoKIyBQcmVkaWN0aW9uIG9uIHRlc3RzZXQKcHJlZGljdGlvbnMgPC0gcHJlZGljdChrbm5fbW9kZWwsdGVzdHNldCx0eXBlPSJjbGFzcyIpCiMgQ2FsY3VsYXRlIENvbmZ1c2lvbiBNQXRyaXgKY2FyZXQ6OmNvbmZ1c2lvbk1hdHJpeChwcmVkaWN0aW9ucyx0ZXN0c2V0JFNwZWNpZXMpCmBgYAoKIyBSYW5kb20gRm9yZXN0CgpgYGB7cn0KbGlicmFyeShyYW5kb21Gb3Jlc3QpCmxpYnJhcnkoZHBseXIpCmRhdGEoaXJpcykKI3NldC5zZWVkKDcxKQoKaWR4PC1zYW1wbGUoMTUwLDUwKQp0cmFpbnNldDwtaXJpc1staWR4LF0KdGVzdHNldDwtaXJpc1tpZHgsXQoKaXJpcy5yZiA8LSByYW5kb21Gb3Jlc3QoU3BlY2llcyB+IFBldGFsLldpZHRoLCBkYXRhPXRyYWluc2V0KQppcmlzLnJmIDwtIHJhbmRvbUZvcmVzdChTcGVjaWVzIH4gLiwgZGF0YT10cmFpbnNldCwpCgojIENhbGN1bGF0ZSBpbXBvcnRhbmNlCmltcG9ydGFuY2UoaXJpcy5yZikKcHJlZGljdGlvbnM8LXByZWRpY3QoaXJpcy5yZix0ZXN0c2V0KQpjYXJldDo6Y29uZnVzaW9uTWF0cml4KGFzLmZhY3RvcihwcmVkaWN0aW9ucyksdGVzdHNldCRTcGVjaWVzKQpgYGAKCiMgQVJCT0xFUyBERSBERUNJU0lPTgoKRWwgcGFxdWV0ZSBgcnBhcnRgIGltcGxlbWVudGEgdW4gdGlwbyBkZSBhcmJvbCBkZSBkZWNpc2lvbiAoQ0FSVCkKCmBgYHtyfQpsaWJyYXJ5KHJwYXJ0KQpsaWJyYXJ5KHJwYXJ0LnBsb3QpCmlkeDwtc2FtcGxlKDE1MCw1MCkKdHJhaW5zZXQ8LWlyaXNbLWlkeCxdCnRlc3RzZXQ8LWlyaXNbaWR4LF0KCmlyaXMucnBhcnQ8LXJwYXJ0KFNwZWNpZXMgfi4sIGRhdGE9dHJhaW5zZXQpCnJwYXJ0LnBsb3QoaXJpcy5ycGFydCkKCnByZWRpY3Rpb25zIDwtIHByZWRpY3QoaXJpcy5ycGFydCx0ZXN0c2V0LHR5cGU9ImNsYXNzIikKY2FyZXQ6OmNvbmZ1c2lvbk1hdHJpeChwcmVkaWN0aW9ucyx0ZXN0c2V0JFNwZWNpZXMpCmBgYAoKIyMgTmFpdmUgQmF5ZXMKYGBge3J9CmRhdGEoaXJpcykKbGlicmFyeShuYWl2ZWJheWVzKQptIDwtIG5haXZlYmF5ZXM6Om5haXZlX2JheWVzKFNwZWNpZXN+LiwgZGF0YSA9IGlyaXMpCnByZWRzPC0gcHJlZGljdChtLG5ld2RhdGE9aXJpcyx0eXBlPSdwcm9iJykKYXBwbHkocHJlZHMsIDEsCiAgICAgIGZ1bmN0aW9uKHgpIHsKICAgICAgICBuYW1lcyh4KVt3aGljaC5tYXgoeCldCiAgICAgIH0pCgoKYGBgCgoKIyMgQ2FyZXQKCkxvIG1pc21vIHBlcm8gdXRpbGl6YW5kbyBlbCBwYXF1ZXRlICBDYXJldCBxdWUgbm9zIHBlcm1pdGUgY2FtYmlhciBmYWNpbG1lbnRlIGVsIGFsZ29yaXRtbyBhIHV0aWxpemFyCmBgYHtyfQpsaWJyYXJ5KGNhcmV0KQpjdHJsX2Zhc3QgPC0gdHJhaW5Db250cm9sKG1ldGhvZD0iY3YiLCAKICAgICAgICAgICAgICAgICAgICAgbnVtYmVyPTUsIAogICAgICAgICAgICAgICAgICAgICB2ZXJib3NlSXRlcj1ULAogICAgICAgICAgICAgICAgICAgICBjbGFzc1Byb2JzPUYsCiAgICAgICAgICAgICAgICAgICAgIGFsbG93UGFyYWxsZWwgPSBUUlVFKSAgCmBgYAoKCmBgYHtyfQp0cmFpbl9mb3JtdWxhPC1mb3JtdWxhKFNwZWNpZXN+LikKCm1vZGVsX2NhcmV0PC0gdHJhaW4odHJhaW5fZm9ybXVsYSwKICAgICAgICAgICAgICAgZGF0YSA9IGlyaXMsCiAgICAgICAgICAgICAgIG1ldGhvZCA9ICJuYWl2ZV9iYXllcyIsCiAgICAgICAgICAgICAgICNtZXRob2QgPSAicmYiLAogICAgICAgICAgICAgICAjbWV0aG9kID0gImtubiIsCiAgICAgICAgICAgICAgIHRyQ29udHJvbCA9IGN0cmxfZmFzdCkKCm1vZGVsX2NhcmV0Cm1vZGVsX2NhcmV0JGZpbmFsTW9kZWwKYGBgCgoK