2015-11-04 2 views
0

Я пытаюсь создать кривую ROC для в SVM, и вот код, который я использовал:Plotting Roc кривой в SVM

#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]] 

, но проблема, что кривая РПЦ Somthing так:

enter image description here

+0

Это очень данные по конкретным, и никто не может сказать многое, не видя, что в настроенная. См. Http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Calimo

ответ

1

Я ответил на подобный вопрос 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))); 

в коде, приведенном по ссылке.

0

Вы решили проблему? У меня была такая же проблема с вами, обратная ROC и AUC были получены из набора тестов.

В моем случае, можно решить сортировать набор учебных материалов.

Например,

train <- train[order(train$y, decreasing = TRUE),] 
0

Вместо использования decision.values, попробуйте следующее:

fit = f(x,y,probability = TRUE) 
pred = prediction(attr(predict(fit,x_test, probability = TRUE), "probabilities")[,2], test[,colnames(test) == y_name]) 
Смежные вопросы