在R

时间:2019-02-15 12:11:55

标签: r classification r-caret knn

有人对此问题提出了一些疑问,但我一直未能找到答案。运行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"被分类为“ Head-up”的次数为80%,"Grazing"被分类为15%,"Unknown"被分类为5%。这就是我的想法:

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

我总共有9个课程,分别是"Head-up""Grazing""Browsing""Vigilance""Unknown""Moving",{{1 }},"Grooming""Fleeing"

现在,可以使用"Resting"或任何其他软件包来完成此操作吗?如果不是,是否有相对简单的方法来编码此过程?至少有人能让我走上正确的路吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分: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 :(得分:-1)

函数table()将起作用。在这里,我写了一个有关其工作原理的简单示例:

predicted<-c(1,0,0,1)
observed<- c(1,1,0,1)
data<-data.frame(predicted, observed)
table(data)