R语言Lime包中Case Number与数据行号是否等价?技术咨询
嗨,很高兴你在探索lime包的功能!针对你遇到的可视化Case编号对应问题,我来帮你理清:
1. Case编号是不是连续序列?是否对应数据中的第N行?
先给你明确结论:plot_features里的Case编号是连续序列,但它只对应你输入到explain()中的测试样本的顺序,不是原始数据的行号。
比如你代码里用sample()随机选了4个测试样本,可视化里的Case 1到Case 4,对应的是biopsy2[test_set, ]里的第1到第4个样本,而不是原始数据的第1到第4行。假设你的test_set输出是[1] 416 52 301 219,那Case 1对应的是原始数据的第416行,Case 2对应第52行,以此类推——Case编号只是测试样本的顺序编号,和原始数据行号没有直接的连续对应关系。
2. 怎么确定每个Case编号对应的原始数据行?
这里有几个简单实用的方法:
方法一:从explanation对象直接提取关联信息
explain()返回的explanation数据框里自带了对应关系,你可以用代码快速查看:
# 提取Case编号和对应的原始ID explanation %>% select(case, data.ID) %>% distinct()
因为你给biopsy2加了ID列(对应原始数据行号),explanation$data.ID就是每个Case对应的原始行号,和case列一一对应。
方法二:查看测试样本的选择顺序
你生成test_set的代码是set.seed(4); test_set <- sample(seq_len(nrow(biopsy2)), 4),直接打印test_set就能看到选出来的原始行号:
print(test_set)
输出的向量顺序就是Case编号的顺序:第1个元素对应Case 1,第2个对应Case 2,以此类推。
方法三:从explanation的data列匹配特征
如果没加ID列,你还可以通过explanation$data里的特征值,和原始数据的行进行匹配,比如:
# 取出Case 1的特征数据 case1_data <- explanation$data[[1]] # 在原始数据中查找匹配的行 original_row <- biopsy2[which(apply(biopsy2, 1, function(x) all(x == case1_data))), ]
不过这种方法不如加ID列直接,所以你之前给数据加ID的做法非常明智!
小验证
运行完你的代码后,执行这两行:
# 查看Case编号 explanation$case # 查看对应的原始ID explanation$data$ID
你会看到explanation$data$ID的结果和test_set完全一致,这样就能100%确认每个Case对应的原始数据行啦!
内容的提问来源于stack exchange,提问作者Mikee

