'和'使用diag(prop.table())功能时对因素没有意义

时间:2016-11-27 02:22:17

标签: r machine-learning knn

我试图在运行产生混淆矩阵的KNN算法时找到错误分类的平均值。下面是我执行" prop.table(t,1)"

时的结果
kdd_train <- dataset_normalized[1:140000,]
kdd_test <- dataset_normalized[140001:145586,]

kdd_train_target <- dataset_extracted[1:140000,12]
kdd_test_target <- dataset_extracted[140001:145586,12]
prop.table(t,1)
               m1
kdd_test_target       FALSE        TRUE
          FALSE 0.997044917 0.002955083
          TRUE  0.048592189 0.951407811

然而,当我执行命令&#34; error_per_class = diag(prop.table(m1))&#34;时,它返回错误

> error_per_class = diag(prop.table(m1))
Error in Summary.factor(c(1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L,  : 
  ‘sum’ not meaningful for factors

有什么办法可以解决吗?感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

error中提到了原因,variablefactor。由于需要进行一些计算,因此无法在prop.table类上直接应用factor

prop.table(m1)
  

Summary.factor中的错误(c(2L,2L,1L,1L,1L,1L,2L,1L,1L,2L,1L,   :'sum'对因素无意义

根据显示的值,它应该是一个逻辑向量,因此将其转换为逻辑,它应该工作

as.logical(m1)
prop.table(as.logical(m1))
#[1] 0.09090909 0.09090909 0.00000000 0.00000000 0.00000000 0.00000000 0.09090909 0.00000000 0.00000000 0.09090909 0.00000000 0.09090909 0.00000000 0.00000000
#[15] 0.09090909 0.00000000 0.09090909 0.09090909 0.00000000 0.09090909 0.09090909 0.00000000 0.00000000 0.09090909

数据

set.seed(24)
m1 <- factor(sample(c(TRUE, FALSE), 24, replace=TRUE))
kdd_test_target  <- factor(sample(c(TRUE, FALSE), 24, replace=TRUE))