r - 在 SVM 中绘制 Roc 曲线

标签 r machine-learning svm roc

我正在尝试为 SVM 创建 ROC 曲线,这是我使用的代码:

#learning from training
#tuned <- tune.svm(y~., data=train, gamma = 10^(-6:-1), cost = 10^(1:2))
summary(tuned)


svmmodel<-svm(y~., data=train, method="C-classification",
              kernel="radial", gamma = 0.01, cost = 100,cross=5, probability=TRUE) 

svmmodel

#predicting the test data
svmmodel.predict<-predict(svmmodel,subset(test,select=-y),decision.values=TRUE)
svmmodel.probs<-attr(svmmodel.predict,"decision.values")
svmmodel.class<-predict(svmmodel,test,type="class")
svmmodel.labels<-test$y
#analyzing result
svmmodel.confusion<-confusion.matrix(svmmodel.labels,svmmodel.class)
svmmodel.accuracy<-prop.correct(svmmodel.confusion)

#roc analysis for test data
svmmodel.prediction<-prediction(svmmodel.probs,svmmodel.labels)
svmmodel.performance<-performance(svmmodel.prediction,"tpr","fpr")
svmmodel.auc<-performance(svmmodel.prediction,"auc")@y.values[[1]]

但是ROC曲线的问题是这样的:

enter image description here

最佳答案

我在MATLAB - generate confusion matrix from classifier回答了类似的问题
通过使用上面链接中给出的代码,如果您得到如图所示的反向 ROC 曲线,则替换以下行(在链接中给出的代码中):
1. 替换链接中给出的代码中的行。

b_pred = (tot_op>=th_vals(i,1)); 

b_pred = (tot_op<=th_vals(i,1));  

2.更换线路

AUC = sum(0.5*(sens(2:end)+sens(1:end-1)).*(cspec(2:end) - cspec(1:end-1))); 

AUC = sum(0.5*(sens(2:end)+sens(1:end-1)).*(cspec(1:end-1) - cspec(2:end)));

在链接上给出的代码中。

关于r - 在 SVM 中绘制 Roc 曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33531347/

相关文章:

python - StandardScaler 如何不破坏数据完整性?

c++ - HoG+SVM -> HOGDescriptor::setsvmdetector

r - 将矩阵的列视为系列的图

滚动平均值/标准差(随条件变化)

python - Scikit 管道参数 - fit() 得到一个意外的关键字参数 'gamma'

boost - 基于分布的弱学习器 : Decision stump

r - 如何在MacOS上下载Sf包

r 单元格中的热图值 - 包 ComplexHeatmap

python - 如何在 scikit-learn 中使用管道调整自定义内核函数的参数

python - OpenCV 3.0.0 SVM 训练模型保存/加载