【问题标题】:'sum' not meaningful for factors while using diag(prop.table()) functionality使用 diag(prop.table()) 功能时,“sum”对因子没有意义
【发布时间】:2016-11-27 02:22:17
【问题描述】:

我试图在运行生成混淆矩阵的 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

但是当我执行命令“error_per_class= diag(prop.table(m1))”时,它返回了一个错误

> 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

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

【问题讨论】:

    标签: r machine-learning knn


    【解决方案1】:

    原因在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))
    

    【讨论】:

    • 嗨阿克伦,感谢您的回复。 m1 表是在训练和测试目标之后生成的。我已经编辑了代码以反映流程。那么我应该在哪里添加您推荐的更改?
    • @misctpasdas 看起来您在第 12 列使用它,所以,在该列上执行此操作,即 as.logical(kdd_test_target)。关于m1,您发布的示例中没有显示
    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 2018-08-07
    • 2013-10-29
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多