如何获取关联规则集的合并支持度并验证目标样本覆盖情况?
解决方法
要提取规则集的所有LHS并过滤数据集,统计覆盖的versicolor样本数,可以按以下步骤操作:
1. 提取所有规则的左部(LHS)
用arules包的lhs()函数直接提取规则对象的左部条件:
# 提取规则集的所有左部条件 rule_lhs <- lhs(rules_1)
2. 匹配数据集样本与规则LHS
使用is.subset()函数生成样本-规则匹配矩阵,再通过apply()标记每个样本是否满足任意一条规则的LHS:
# 生成匹配矩阵:每行对应一个样本,每列对应一条规则,TRUE表示样本满足该规则LHS matches_matrix <- is.subset(rule_lhs, iris, sparse = FALSE) # 标记样本是否被任意一条规则覆盖 is_covered <- apply(matches_matrix, 1, any)
3. 统计覆盖情况
基于标记结果筛选样本,统计目标样本的覆盖数量与比例:
# 筛选被规则覆盖的样本 covered_samples <- iris[is_covered, ] # 计算关键指标 total_versicolor <- sum(iris$Species == "versicolor") covered_versicolor <- sum(covered_samples$Species == "versicolor") cat("规则集覆盖的versicolor样本数:", covered_versicolor, "\n") cat("versicolor样本覆盖比例:", round(covered_versicolor / total_versicolor, 2), "\n")
简化写法
如果不需要保留匹配矩阵,可直接合并为一行代码完成筛选:
covered_samples <- iris[apply(is.subset(lhs(rules_1), iris, sparse = FALSE), 1, any), ]
运行后就能直观看到当前规则集覆盖了多少目标样本,判断是否覆盖全部50条versicolor数据。
内容的提问来源于stack exchange,提问作者Rory Ellis
相关产品推荐
相关产品推荐

