在R中制作错误分类表
Posted
技术标签:
【中文标题】在R中制作错误分类表【英文标题】:Making a misclassification table in R 【发布时间】:2019-07-09 14:01:39 【问题描述】:关于这个问题有几个问题,但我无法找到我的问题的答案。运行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
或任何其他包来完成吗?如果没有,是否有一种相对简单的方法来编写这样的过程?至少有人能让我走上正轨吗?
感谢任何帮助!
【问题讨论】:
【参考方案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% 总和的参数
【讨论】:
是的文件在同一个文件夹中。这是我尝试过的:files = as.list(list.files(path = "C:/Users/Juan/Desktop/KNN/41361_by_41365")) miss_class = lapply(files, function(x) data = read.csv("accuracycollar41361_41365",header=T) prop.table(table(data$observed,data$predicted),margin=1) )
我得到了错误:Error in file(file, "rt") : cannot open the connection In addition: Warning message: In file(file, "rt") : Show Traceback Rerun with Debug Error in file(file, "rt") : cannot open the connection
这可能是因为该文件夹中有一些不是.csv
的文件。您可以删除它们,或者,如果您可以以某种方式生成文件名向量(例如v = c("accuracycollar41361_41366.0.8.csv","accuracycollar41362_41366.0.8.csv",...)
),只需执行files = as.list(v)
,它应该可以工作。
谢谢,成功了。但是我想知道如何以 csv 格式编写由 R 打印的结果表?我需要在代码开头创建一个对象吗?
您可以使用write.csv(miss_class[[i]],"your_file.csv")
编写每个单独的表,并将i
替换为文件索引。我不确定如何将它们全部保存到同一个文件中,因为这取决于你想要它们的方式。【参考方案2】:
函数table()
将起作用。这里我写了一个简单的例子来说明它是如何工作的:
predicted<-c(1,0,0,1)
observed<- c(1,1,0,1)
data<-data.frame(predicted, observed)
table(data)
【讨论】:
以上是关于在R中制作错误分类表的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法通知 R 中的分类器错误分类的相对成本? [关闭]