gpt4 book ai didi

r - 如何只为规则中的特定列获取LHS和RHS的 Material ?

转载 作者:行者123 更新时间:2023-12-04 16:52:33 24 4
gpt4 key购买 nike

在apriori函数中,我希望结果仅在LHS HouseOwnerFlag=0HouseOwnerFlag=1中包含这两个变量。 RHS应该只包含Product列中的属性。例如:

#   lhs                   rhs                                          support confidence     lift
# 1 {HouseOwnerFlag=0} => {Product=SV 16xDVD M360 Black} 0.2500000 0.2500000 1.000000
# 2 {HouseOwnerFlag=1} => {Product=Adventure Works 26" 720p} 0.2500000 0.2500000 1.000000
# 3 {HouseOwnerFlag=0} => {Product=Litware Wall Lamp E3015 Silver} 0.1666667 0.3333333 1.333333
# 4 {HouseOwnerFlag=1} => {Product=Contoso Coffee Maker 5C E0900} 0.1666667 0.3333333 1.333333

这个问题解决了部分答案:
R arules, mine only rules from specific column

因此,现在我使用以下内容: rules <- apriori(sales, parameter=list(support =0.01, confidence =0.8, minlen=2), appearance = list(lhs=c("HouseOwnerFlag=0", "HouseOwnerFlag=1")))
然后,我从另一个SO问题中使用它来确保RHS上只有“产品”列: inspect( subset( rules, subset = rhs %pin% "Product=" ) )
结果是这样的:
#   lhs                                                                  rhs                                          support confidence     lift
# 1 {ProductKey=153, IncomeGroup=Moderate, BrandName=Adventure Works } => {Product=SV 16xDVD M360 Black} 0.2500000 0.2500000 1.000000
# 2 {ProductKey=176, MaritalStatus=M, ProductCategoryName=TV and Video } => {Product=Adventure Works 26" 720p} 0.2500000 0.2500000 1.000000
# 3 {BrandName=Southridge Video, NumberChildrenAtHome=0 } => {Product=Litware Wall Lamp E3015 Silver} 0.1666667 0.3333333 1.333333
# 4 {HouseOwnerFlag=1, BrandName=Southridge Video, ProductKey=170 } => {Product=Contoso Coffee Maker 5C E0900} 0.1666667 0.3333333 1.333333

因此,显然LHS能够包含所有可能的列,而不仅仅是我指定的 HouseOwnerFlag。从其他stackoverflow问题中,我看到可以将 default="rhs"放在apriori函数中,如下所示: rules <- apriori(sales, parameter=list(support =0.001, confidence =0.5, minlen=2), appearance = list(lhs=c("HouseOwnerFlag=0", "HouseOwnerFlag=1"), default="rhs"))
然后在检查时(没有子集部分,只有 inspect(rules),规则(7)比以前少得多,但实际上它在LHS中仅包含 HouseOwnerFlag:
#   lhs                   rhs                           support     confidence lift
# 1 {HouseOwnerFlag=0} => {MaritalStatus=S} 0.2500000 0.2500000 1.000000
# 2 {HouseOwnerFlag=1} => {Gender=M} 0.2500000 0.2500000 1.000000
# 3 {HouseOwnerFlag=0} => {NumberChildrenAtHome=0} 0.1666667 0.3333333 1.333333
# 4 {HouseOwnerFlag=1} => {Gender=M} 0.1666667 0.3333333 1.333333

但是,在RHS中,RHS中的“产品”列中没有任何内容。因此,它没有必要用 inspect对其进行 subset编码,因为它将返回null。我用不同的支持号码对其进行了几次测试,以进行试验,看看是否会出现“产品”,但7条相同的规则保持不变。

所以我的问题是,如何同时指定LHS(房屋所有者标志)和RHS(产品)?我究竟做错了什么?

编辑:您可以通过从 https://www.dropbox.com/s/tax5xalac5xgxtf/testdf.txt?dl=0下载此testdataset重现此问题
请注意,我只从一个巨大的数据集中获取了前20行,因此不幸的是,此处的输出不会具有与上面显示的示例相同的产品名称。但是问题仍然存在。我希望只能在LHS上获得 HouseOwnerFlag=0和/或 HouseOwnerFlag=1,而在RHS上获得 Product列。

最佳答案

似乎无法一次约束lhs和rhs(在处理您的数据之前,我也没有约束)。但是您可以使用子集。 编辑:我错了,您也可以一次约束lhs和rhs,请参见下面的另一种解决方案。 我保留解决方案1,因为在某些情况下,计算较大的集合然后由左侧拆分可能会很有用。

解决方案1:

rules_sales <- apriori(sales, 
parameter=list(support =0.001, confidence =0.5, minlen=2, maxlen=2),
appearance = list(lhs=c("HouseOwnerFlag=0", "HouseOwnerFlag=1"),
default="rhs"))

rules_subset <- subset(rules_sales, (rhs %in% paste0("Product=", unique(sales$Product))))
inspect(rules_subset)

给出:
  lhs                   rhs                                                support confidence lift
1 {HouseOwnerFlag=0} => {Product=SV DVD Movies E100 Yellow} 0.05 0.5 10
2 {HouseOwnerFlag=0} => {Product=Fabrikam Refrigerator 4.6CuFt E2800 Grey} 0.05 0.5 5
3 {HouseOwnerFlag=1} => {Product=Contoso SLR Camera M144 Gold} 0.10 0.5 5

但是您应该注意自己的低支持率:
Warning in apriori(sales, parameter = list(support = 0.001, confidence = 0.5,  :
You chose a very low absolute support count of 0. You might run out of memory! Increase minimum support.

解决方案2:

我对参数default的定义感到迷惑。立即使用lhs和rhs会告诉分配给其中一个的每个项目,它们只能用于lhs/rhs。参数“default”自动设置为“both”和“lhs/rhs”中未使用的所有其他项都可以同时使用(R包中实现的外观参数的说明: http://www.inside-r.org/node/86290,我意识到当阅读原始C实现的手册: http://www.borgelt.net/doc/apriori/apriori.html#appearin)。您必须设置 default="none",然后可以限制lhs和rhs,而无需稍后使用子集。
rules_sales <- apriori(sales, 
parameter=list(support =0.001, confidence =0.5, minlen=2, maxlen=2),
appearance = list(lhs=c("HouseOwnerFlag=0", "HouseOwnerFlag=1"),
rhs=paste0("Product=", unique(sales$Product)), default="none"))

关于r - 如何只为规则中的特定列获取LHS和RHS的 Material ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27926131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com