如何从具有两个以上因子级别的 kNN 模型中获取具有相对值的混淆矩阵?

问题描述 投票:0回答:1

我使用

mlr3
包和
mlr3learners
包构建了一个简单的 kNN 模型,使用
diabetes
包中的
mclust
数据集。我正在尝试使用 kNN 模型根据三个可用的数字特征(
class
glucose
insulin
)来预测
sspg
类别,并使用
mlr3measures
包和混淆矩阵,因为我有兴趣评估某些类别是否比其他类别更容易被错误分类。我的问题是如何获得具有相对值的混淆矩阵?

使用以下代码我得到一个具有绝对值的混淆矩阵。

代码示例

# load packages
library(mlr3)
library(mlr3learners) # for classif.kknn
library(mlr3measures) # for confusion_matrix()
library(mclust) # for data(diabetes)

# load data
data(diabetes, package = "mclust")
diabetes <- as.data.table(diabetes)

# define task
diabetes_task <- as_task_classif(diabetes, 
                                 target = "class", 
                                 id = "diabetes")

# define ML algorithm
knn_model <- lrn('classif.kknn')

# partition data
splits <- partition(diabetes_task) 

# train model
knn_model$train(diabetes_task, 
                row_ids = splits$train)

# test model 
prediction <- knn_model$predict(diabetes_task, 
                                row_ids = splits$test)

# evaluate performance
prediction$confusion 

混淆矩阵

           truth
 response   Chemical Normal Overt
   Chemical       10      2     0
   Normal          2     23     0
   Overt           0      0    11

我想要一个具有相对值的混淆矩阵,而不是这个矩阵。我刚刚发现

confusion_matrix()
包中的
mlr3measures
函数包含一个用于获取相对值的参数(即
relative = TRUE
),但此函数仅在真相和响应标签只有两个因素时才有效。显然,在旧的
mlr
包中获得这一点相当简单。抱歉,如果问题有点基础,但是有没有一种简单的方法来获取相对值混淆矩阵?

r machine-learning knn mlr3
1个回答
0
投票

正如评论中指出的,您可以简单地除以矩阵中所有值的总和:

prediction$confusion / sum(prediction$confusion)

          truth
response     Chemical     Normal      Overt
  Chemical 0.25000000 0.06250000 0.04166667
  Normal   0.00000000 0.45833333 0.00000000
  Overt    0.00000000 0.00000000 0.18750000
© www.soinside.com 2019 - 2024. All rights reserved.