以下数据框是我的全部数据集的示例:
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)
错误:
data
和reference
应该是具有相同水平的因子。
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”包结果进行计算。
答案 0 :(得分:1)
函数confusionMatrix
带有两个自变量(data
和reference
),它们必须是具有相同级别的因子。对于您的代码,情况并非如此,因为在给定predict
对象的情况下,rpart
函数将返回一个矩阵,该矩阵默认具有每个样本的类成员资格的概率。您需要为此函数指定想要一个预测类的向量,并将该向量转换为与target
(0
和1
)相同级别的因子。
这应该可以解决问题:
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)中: 级别的参考和数据顺序不同。重构 数据进行匹配。