首页 > 解决方案 > 在R中制作错误分类表

问题描述

关于这个问题有几个问题,但我无法找到我的问题的答案。运行KNN算法后,我创建了一个"observed"/"predicted"文件。"observed"是真实事件,而"predicted"是算法分类的事件。我有多个文件,所有文件的名称都遵循以下模式:"accuracycollar4136*_4136*.0.*.csv". 这是一个小样本:

> sample<-fread("accuracycollar41361_41366.0.8.csv")
> print(sample)
      V1  observed predicted   
  1:   1   Head-up   Grazing       
  2:   2   Head-up   Head-up      
  3:   3   Head-up   Head-up       
  4:   4   Head-up   Head-up       
  5:   5   Head-up   Head-up       
 ---                                                                                                
236: 236   Unknown   Head-up       
237: 237   Unknown   Grazing      
238: 238 Vigilance   Grazing      
239: 239   Unknown   Grazing       
240: 240   Unknown   Head-up       

我已经计算了不同的分类准确度度量。但是,我接下来想做的是:

1)创建一个for循环读取每个"accuracycollar4136*_4136*.0.*.csv"文件。

2)对于每个文件,我想创建一个汇总错误分类的表格。

3)理想情况下,我想最终得到一个百分比/概率表,说明一个事件被归类为另一个事件的比例。例如,假设"Head-up"80% 的时间被归类为 " Head-up",15% 的时间为"Grazing"和 5% 的时间为"Unknown"。这是我的想法:

    class Head-up Vigilance Grazing Unknown etc.. 
  Head-up       %         %       %       %
Vigilance       %         %       %       %
  Grazing       %         %       %       %
  Unknown       %         %       %       %
    etc..       %         %       %       %

我总共有 9 个班级,分别是"Head-up", "Grazing", "Browsing", "Vigilance", "Unknown", "Moving", "Grooming", "Fleeing", "Resting".

现在,这可以用caret或任何其他包来完成吗?如果没有,是否有一种相对简单的方法来编写这样的过程?至少有人能让我走上正轨吗?

任何帮助表示赞赏!

标签: rclassificationr-caretknn

解决方案


考虑到你所有的文件都在"your folder"(没有别的)

files = as.list(list.files(path = "your folder"))

如果不是这种情况,您只需将文件名列表传递给files下一步即可

miss_class = lapply(files, function(x){
  data = read.csv(x)
  prop.table(table(data$observed,data$predicted),margin=1)
})

这将生成一个百分比表列表,每个文件对应一个your folder. 这margin = 1意味着百分比表将对行求和 100%。您可以将列更改为 2 或删除整个表 100% 总和的参数


推荐阅读