我在尝试计算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) m1kdd_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
有什么办法可以解决这个问题吗?感谢任何帮助!
回答:
错误信息中提到了原因,变量是因子类型。直接对因子类型应用prop.table
是不可能的,因为它需要进行一些计算。
prop.table(m1)
Error in Summary.factor(c(2L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, : ‘sum’ not meaningful for factors
根据显示的值来看,它应该是一个逻辑向量,所以将其转换为逻辑类型应该可以解决问题
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))