2015-01-13 4 views
4

apriori 함수 내에서 결과에 LHS HouseOwnerFlag=0HouseOwnerFlag=1의 두 변수 만 포함되기를 바랍니다. RHS는 열 Product의 속성 만 포함해야합니다. 예를 들어 :arules의 특정 열에 대해서만 LHS와 RHS에 대한 항목을 얻는 방법?

해답의 일부는이 문제의 해결
# 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 

:
rules <- apriori(sales, parameter=list(support =0.01, confidence =0.8, minlen=2), appearance = list(lhs=c("HouseOwnerFlag=0", "HouseOwnerFlag=1")))

가 그럼 난에 다른 SO 질문에서 이것을 사용 : 나는 다음과 같은 사용 그래서 지금 R arules, mine only rules from specific column

제품 열만이 오른쪽에 있는지 확인하십시오.
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처럼 가능한 모든 열을 포함 할 수 있습니다. 다른 유래 질문에서, 나는 내가 지금처럼 연역적 기능에 default="rhs"을 넣을 수 있음을 참조하십시오 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을 돌려줍니다. 실험을 위해 여러 지원 번호로 여러 번 테스트했으며 제품이 표시되는지 여부는 확인했지만 동일한 규칙은 동일하게 유지됩니다.

제 질문은 어떻게 LHS (HouseOwnerFlag)와 RHS (Product)를 모두 지정할 수 있습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까?

편집 : 당신은, 난 단지 거대한 데이터 세트에서 처음 20 개 행을했다 당신은 https://www.dropbox.com/s/tax5xalac5xgxtf/testdf.txt?dl=0 마음에서이 testdataset을 다운로드하여이 문제를 재현 할 수있는, 그래서 여기에 출력 내가 표시된 예와 같은 제품 이름이 없습니다 불행히도. 그러나 문제는 여전히 동일하게 남아 있습니다. 나는 단지 HouseOwnerFlag=0 및/또는 HouseOwnerFlag=1을 LHS에, 열 Product을 RHS에 붙들고 싶습니다.

+0

그것은 당신이 [재현 예]를 포함하는 경우 (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – MrFlick

+0

수 있도록 항상 쉽게 @ MrFlick, 제안 해 주셔서 고맙습니다. 사람들이 문제를 재연하기를 원한다면 나는 방금 작은 testset을 만들었다. – Kim

+0

다른 해결책을 추가했는데 기본 매개 변수에 대해 잘못 생각한 것 같습니다. –

답변

9

한 번에 lhs와 rhs를 제한 할 수없는 것처럼 보입니다. (나는 또한 데이터를 가지고 놀지 않았습니다.) 하지만 하위 집합을 사용할 수 있습니다.편집 : 잘못되었습니다. 한 번에 lhs와 rhs를 제한 할 수도 있습니다. 아래에서 다른 해결 방법을 참조하십시오. 어떤 경우에는 더 큰 세트를 계산 한 다음 왼쪽 사이드로 나누는 것이 유용 할 수 있기 때문에 솔루션 1을 유지합니다.

해결 방법 1 :

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 

그러나 당신은 당신의 낮은 지원에 대한 조심해야한다 :

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) 

준다

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 :

매개 변수 기본값의 정의에 의해 속임을당했습니다. 한 번에 lhs와 rhs를 사용하면 그 중 하나에 할당 된 각 항목에 lhs/rhs에서만 사용할 수 있다는 것을 알립니다. "default"매개 변수는 자동으로 "both"로 설정되고 lhs/rhs에 사용되지 않은 다른 모든 항목은 모두에 사용할 수 있습니다 (R 패키지에 구현 된 appearence 매개 변수 설명 : 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")) 
+0

종합적인 답변을 보내 주셔서 감사합니다! 나는이 문제가 있었는데 아직 재창조하지는 않았지만 논리적으로 보입니다. – Kim

2

나는 파티에 매우 늦었지만, 지금도 패키지를 가지고 놀고 있기 때문에 누군가에게 도움이된다면 내 생각을 포함 시키도록하십시오.

출력에 포함 된 규칙은 지원 및 신뢰도 매개 변수와 호환되는 규칙입니다. 따라서 기대하는 형식의 규칙이없는 경우 이러한 제약 조건을 완화하십시오. 낮은 지원, 낮은 신뢰. lhs에는 한 용어 만 포함 할 수 있으므로 규칙 생성 속도를 높이기 위해이 부분을 표시 할 용어 (제품)로 제한 할 수 있습니다. 귀하의 특정 데이터 세트를 시도하지는 않았지만 모든 경우에 사용할 수있는 일반적인 조언이라고 생각합니다.