1

I am using the precrec package in order to evaluate multiple models and plotting ROC and PR-ROC.

I want to do a model comparison at the end, but it seems I can't plot both models on the same plot.

Here is my attempt:

library(precrec)
library(caret)
library(e1071)


classifier = svm(formula = Class ~ ., 
                 data = train_smote_maison, 
                 type = 'C-classification', 
                 kernel = "linear",
                 probability = TRUE,
                 cross = 3,
                 cost = 1) 

test_svm_plot = df[train.test.split == 2,]
predictions_svm2 <- predict(classifier,newdata = test_svm_plot, probability=T)
svm2_predict_obj <- mmdata(as.numeric(predictions_svm2),test_svm_plot$Class)
svm2_perfromance <- evalmod(svm2_predict_obj)



classifier_logreg <- glm(data = train, family = "binomial",
                         formula = Class ~ .)

test_glm = test
test_glm_plot = df[train.test.split == 2,]
predictions_logreg <- predict(classifier_logreg,newdata = test_glm, type = "response")
logreg_predict_obj <- mmdata(predictions_logreg,test_glm$Class)
logreg_performance <- evalmod(mdat = logreg_predict_obj) 


plot(svm2_perfromance, "ROC")
plot(logreg_performance, "ROC", add=TRUE, col='red')

Does somebody know how to make sure I can get both ROC on the same plot ?

Thanks in advance.

Kermit
  • 3,112
  • 2
  • 10
  • 34

2 Answers2

1

You can use "fortify" to make a ggplot data frame for each performance object, then combine (rbind) them and plot with ggplot.

library(ggplot2)

svm2_df <- fortify(svm2_perfromance)
logreg_df <- fortify(logreg_performance)

svm2_df$classifier <- "svm2"
logreg_df$classifier <- "logreg"

performance_df <- rbind(svm2_df, logreg_df)

roc <- performance_df[performance_df$classifier == "ROC",]

ggplot(roc, aes(x=x, y=y, group = classifier)) + geom_line(aes(color = classifier))
katkoler
  • 26
  • 1
  • 5
  • you just need to change the following line of code:` ```r roc <- performance_df[performance_df$curvetype == "ROC",] ``` – Kermit Sep 27 '19 at 18:45
0
    import plotly.express as px

x = ["K Neighbors Classifier", "Random Forest Classifier", "Logistic Regression", "XGBoost Classifier"]

y = [knn_accuracy100, rf_accuracy100, lr_accuracy100, xgb_accuracy100]

fig = px.bar(x=x, y=y, color=x, title="Model Comparison - Model Accuracy", labels={ 'x': 'Model', 'y': 'Model Accuracy'},) fig.show()