关于这个问题有几个问题,但我找不到问题的答案。运行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
或任何其他包装完成吗?如果没有,是否有一种相对简单的方法来编码这样的过程?有人至少可以让我走上正轨吗?
任何帮助表示赞赏!
考虑到你的所有文件都在"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%总和
函数table()
将起作用。在这里,我写了一个关于它如何工作的简单示例:
predicted<-c(1,0,0,1)
observed<- c(1,1,0,1)
data<-data.frame(predicted, observed)
table(data)