为 rpart 包结果计算精度、召回率、F1 值
compute precision, recall, F1 values for rpart package result
下面的数据框是我的总数据集的一个样本:
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)
Error: data
and reference
should be factors with the same levels.
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
有两个参数(data
和reference
),它们必须是具有相同水平的因子。这不是你的代码的情况,因为 predict
函数,当给定一个 rpart
-object 时,returns 一个矩阵,默认情况下每个样本的成员资格概率为 class。您需要向此函数指定您想要预测的 classes 向量,并将此向量转换为与 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))
确保两个因素的水平顺序相同以避免以下警告:
Warning message: In confusionMatrix.default(ypred, testData$target) :
Levels are not in the same order for reference and data. Refactoring
data to match.
下面的数据框是我的总数据集的一个样本:
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)
Error:
data
andreference
should be factors with the same levels.
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
有两个参数(data
和reference
),它们必须是具有相同水平的因子。这不是你的代码的情况,因为 predict
函数,当给定一个 rpart
-object 时,returns 一个矩阵,默认情况下每个样本的成员资格概率为 class。您需要向此函数指定您想要预测的 classes 向量,并将此向量转换为与 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))
确保两个因素的水平顺序相同以避免以下警告:
Warning message: In confusionMatrix.default(ypred, testData$target) : Levels are not in the same order for reference and data. Refactoring data to match.