在R中制作错误分类表

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

关于这个问题有几个问题,但我找不到问题的答案。运行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或任何其他包装完成吗?如果没有,是否有一种相对简单的方法来编码这样的过程?有人至少可以让我走上正轨吗?

任何帮助表示赞赏!

r classification r-caret knn
2个回答
1
投票

考虑到你的所有文件都在"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%总和


-1
投票

函数table()将起作用。在这里,我写了一个关于它如何工作的简单示例:

predicted<-c(1,0,0,1)
observed<- c(1,1,0,1)
data<-data.frame(predicted, observed)
table(data)
© www.soinside.com 2019 - 2024. All rights reserved.