2016-11-04 168 views
0

實施ROCR曲線,kNN,K 10倍交叉驗證。 我正在使用電離層數據集。「預測格式不正確」

這裏是供參考的屬性信息:

- 所有34是連續的,上述 所描述 - 第35屆屬性爲「好」或「壞」,根據上面概述的定義 。這是一個二進制分類任務。

data1<-read.csv('https://archive.ics.uci.edu/ml/machine-learning-databases/ionosphere/ionosphere.data',header = FALSE) 

knn對自己的作品,kNN與kfold也行得通。但是當我輸入ROCR代碼時,它並不喜歡它。 我收到錯誤:「預測的格式不正確」。 我檢查了dataframes pred和Class 1.維度是相同的。我嘗試data.test $ V35而不是Class1我得到這個選項相同的錯誤。

install.packages("class") 
    library(class) 

nrFolds <- 10 
data1[,35]<-as.numeric(data1[,35]) 

# generate array containing fold-number for each sample (row) 
folds <- rep_len(1:nrFolds, nrow(data1)) 


# actual cross validation 
for(k in 1:nrFolds) { 
    # actual split of the data 
    fold <- which(folds == k) 
    data.train <- data1[-fold,] 
    data.test <- data1[fold,] 

    Class<-data.train[,35] 
    Class1<-data.test[,35] 
    # train and test your model with data.train and data.test 

    pred<-knn(data.train, data.test, Class, k = 5, l = 0, prob = FALSE, use.all = TRUE) 
    data<-data.frame('predict'=pred, 'actual'=Class1) 
    count<-nrow(data[data$predict==data$actual,]) 
    total<-nrow(data.test) 
    avg = (count*100)/total 
    avg =format(round(avg, 2), nsmall = 2) 
    method<-"KNN" 
    accuracy<-avg 
    cat("Method = ", method,", accuracy= ", accuracy,"\n") 
} 

install.packages("ROCR") 
library(ROCR) 
rocrPred=prediction(pred, Class1, NULL) 
rocrPerf=performance(rocrPred, 'tpr', 'fpr') 
plot(rocrPerf, colorize=TRUE, text.adj=c(-.2,1.7)) 

任何幫助表示讚賞。

+0

我沒有看到對循環內分配的LHS任何索引。這是一種常見的R-newb錯誤。 (我也不確定ROCR是否設立了處理CV多重挑戰。) –

+0

謝謝您的評論。 Guilty- R-newb。我不明白你的任務的LHS索引是什麼意思。你能指出我在你認爲是錯誤的代碼行嗎? – codingyo

+0

我真的不知道它是否是「錯誤的」,但你是否知道,每當你賦予'pred',data','count', 'total','avg',你是否覆蓋了每個人的先前值?相反,如果你將它們設置爲你可以做的列表:'pred [[i]] < - knn(...)' –

回答

0

這個工作對我..

install.packages("class") 
library(class) 
library(ROCR) 
nrFolds <- 10 
data1[,35]<-as.numeric(data1[,35]) 

# generate array containing fold-number for each sample (row) 
folds <- rep_len(1:nrFolds, nrow(data1)) 


# actual cross validation 
for(k in 1:nrFolds) { 
    # actual split of the data 
    fold <- which(folds == k) 
    data.train <- data1[-fold,] 
    data.test <- data1[fold,] 

    Class<-data.train[,35] 
    Class1<-data.test[,35] 
    # train and test your model with data.train and data.test 

    pred<-knn(data.train, data.test, Class, k = 5, l = 0, prob = FALSE, use.all = TRUE) 
    data<-data.frame('predict'=pred, 'actual'=Class1) 
    count<-nrow(data[data$predict==data$actual,]) 
    total<-nrow(data.test) 
    avg = (count*100)/total 
    avg =format(round(avg, 2), nsmall = 2) 
    method<-"KNN" 
    accuracy<-avg 
    cat("Method = ", method,", accuracy= ", accuracy,"\n") 

    pred <- prediction(Class1,pred) 
    perf <- performance(pred, "tpr", "fpr") 
    plot(perf, colorize=T, add=TRUE) 
    abline(0,1) 
}