如何从矩阵中提取预测值和实际值向量以将它们与 R 中的 confusionMatrix() 一起使用?
How to extract predictions and actual values vectors from a matrix to use them with confusionMatrix() in R?
假设我有矩阵
> a <- matrix(c(1,2,3,4,5,6,7,8,9),nrow=3)
> rownames(a)=c('A','B','C')
> colnames(a)=c('A','B','C')
> a
A B C
A 1 4 7
B 2 5 8
C 3 6 9
考虑到列代表实际 class,行代表预测 class,我如何提取预测值和实际值向量以在 confusionMatrix() 中使用它们?
我猜你指的是 caret
中的 confusionMatrix()
。这已经是一个混淆矩阵,您可以使用 as.table() 将预测传递到函数中,参见示例,我们在其中设置模型并训练/测试数据:
library(caret)
set.seed(111)
idx = sample(1:nrow(iris),100)
trainData = iris[idx,]
testData = iris[-idx,]
mdl = train(Species ~ .,data=trainData,
method="rf",trControl=trainControl(method="cv"))
pred = predict(mdl,testData)
actual = testData$Species
带有标签的混淆矩阵:
confusionMatrix(pred,actual)
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 20 0 0
versicolor 0 11 2
virginica 0 0 17
混淆矩阵与 table 或矩阵:
a = matrix(table(pred,actual),nrow=3)
colnames(a) = levels(testData$Species)
rownames(a) = levels(testData$Species)
setosa versicolor virginica
setosa 20 0 0
versicolor 0 11 2
virginica 0 0 17
confusionMatrix(as.table(a))
Confusion Matrix and Statistics
setosa versicolor virginica
setosa 20 0 0
versicolor 0 11 2
virginica 0 0 17
Overall Statistics
Accuracy : 0.96
95% CI : (0.8629, 0.9951)
No Information Rate : 0.4
P-Value [Acc > NIR] : < 2.2e-16
如果你真的需要它们在一个向量中,(这对我来说听起来超级奇怪)使用:
actual_vector = rep(colnames(a),colSums(a))
pred_vector = rep(rownames(a),rowSums(a))
table(actual_vector) == table(actual)
actual_vector
setosa versicolor virginica
TRUE TRUE TRUE
table(pred_vector) == table(pred)
pred_vector
setosa versicolor virginica
TRUE TRUE TRUE
假设我有矩阵
> a <- matrix(c(1,2,3,4,5,6,7,8,9),nrow=3)
> rownames(a)=c('A','B','C')
> colnames(a)=c('A','B','C')
> a
A B C
A 1 4 7
B 2 5 8
C 3 6 9
考虑到列代表实际 class,行代表预测 class,我如何提取预测值和实际值向量以在 confusionMatrix() 中使用它们?
我猜你指的是 caret
中的 confusionMatrix()
。这已经是一个混淆矩阵,您可以使用 as.table() 将预测传递到函数中,参见示例,我们在其中设置模型并训练/测试数据:
library(caret)
set.seed(111)
idx = sample(1:nrow(iris),100)
trainData = iris[idx,]
testData = iris[-idx,]
mdl = train(Species ~ .,data=trainData,
method="rf",trControl=trainControl(method="cv"))
pred = predict(mdl,testData)
actual = testData$Species
带有标签的混淆矩阵:
confusionMatrix(pred,actual)
Confusion Matrix and Statistics
Reference
Prediction setosa versicolor virginica
setosa 20 0 0
versicolor 0 11 2
virginica 0 0 17
混淆矩阵与 table 或矩阵:
a = matrix(table(pred,actual),nrow=3)
colnames(a) = levels(testData$Species)
rownames(a) = levels(testData$Species)
setosa versicolor virginica
setosa 20 0 0
versicolor 0 11 2
virginica 0 0 17
confusionMatrix(as.table(a))
Confusion Matrix and Statistics
setosa versicolor virginica
setosa 20 0 0
versicolor 0 11 2
virginica 0 0 17
Overall Statistics
Accuracy : 0.96
95% CI : (0.8629, 0.9951)
No Information Rate : 0.4
P-Value [Acc > NIR] : < 2.2e-16
如果你真的需要它们在一个向量中,(这对我来说听起来超级奇怪)使用:
actual_vector = rep(colnames(a),colSums(a))
pred_vector = rep(rownames(a),rowSums(a))
table(actual_vector) == table(actual)
actual_vector
setosa versicolor virginica
TRUE TRUE TRUE
table(pred_vector) == table(pred)
pred_vector
setosa versicolor virginica
TRUE TRUE TRUE