R-计算精度,召回RPART软件包结果的F1值



以下数据框架是我的总数据集的示例:

A    B   C    D    E    target
0.2 0.5 0.6 -0.5   -0.7   1
0.9 0.7 0.4 -0.3   -0.8   0  
0.1 0.3 0.5 -0.9   -0.2   0
0.2 0.5 0.6 -0.5   -0.6   1

我想在其中应用分类树,因此我使用了以下代码:

data$target<-factor(data$target)
# Create Training Data
train.ind <- sample(nrow(data), 0.7*nrow(data))
trainData<-data[train.ind,]
testData<-data[-train.ind,]    
library("rpart")
tree <- rpart(target ~.,data=trainData)
ypred=predict(tree,testData)
    library(caret)
    #Print a confusion matrix
    result <- confusionMatrix(ypred,testData$target)

错误:datareference应该是具有相同级别的因素。

   precision <- result$byClass['Pos Pred Value']    
    recall <- result$byClass['Sensitivity']
    f_measure <- 2 * ((precision * recall) / (precision + recall))
    #OR
    f_measure <-result$byClass['F1']

,但它行不通。我需要精确,召回和F1值,但我不知道如何使用" rpart"软件包结果计算。

函数confusionMatrix采用两个参数(datareference(,必须是具有相同级别的因素。代码并非如此,因为predict函数在给出rpart -Object时,默认情况下,将返回一个具有类成员的概率的矩阵。您需要指定该功能,您需要一个预测类的向量,并将此向量转换为具有与target相同级别的因素(01(。

这应该可以解决:

ypred <- factor(predict(tree, testData[, -6], type="vector"),
                levels = levels(testData$target))
library(caret)
confusionMatrix(ypred, testData$target)

使用factor(..., levels = levels(testData$target))确保在这两个因素中均处于相同顺序以避免遵循警告:

警告消息:在ConfusionMatrix.Default(ypred,testdata $ target(: 级别不在相同的顺序中以供参考和数据。重构 匹配的数据。

最新更新