2014-09-23 5 views
3

저는 이진 행렬에 arules :: apriori를 사용하고 있으며 RHS에 하나의 특정 열이있는 규칙 만 만들고 싶습니다. 이것은 문서에 지정되어 있지만 작동하지 않는 것 같습니다. 이것을 얻기 위해 post hoc을 필터링하는 것은 쉽지만 처음부터 모든 규칙을 계산하는 많은 계산 시간을 낭비합니다.arules/apriori가있는 rhs 필터가 작동하지 않습니다.

예 :

library(arules) 
data = data.frame(matrix(rbinom(10000,1, 0.6), nrow=1000)) 
for(i in 1:ncol(data)) data[,i] = as.factor(data[,i]) 
dsRules = as(data, "transactions") 
rules = apriori(dsRules, 
    parameter=list(support = 0.1, minlen = 3, maxlen = 3, target= "rules", confidence = 0.7), 
    appearance = list(rhs = c("X1=1"))) 

규칙이 이제 포함 3378 규칙

rules.sub = subset(rules, subset = (rhs %pin% "X1=1")) 

rules.sub이되는 4000 ~ 나는 결과의 수백만 이동 내 실제 데이터에서 172 규칙

을 포함 거대한 차이.

답변

2

밝혀졌습니다. 설명서를 잘못 읽었습니다. 다른 사람이 우연히 발견 할 경우 :

rhs에 대한 문서는 규칙/항목 집합의 해당 위치에만 나타날 수있는 항목의 레이블을 제공하는 문자 벡터입니다. 그래서 내 코드는 항목 X1이 rhs에만 나타날 수 있으며 rhs에는 X1 만 포함될 수 있다고 말하고있었습니다.

이 해결하기 위해, 사용자가 지정하는 다른 모든 요소는

keep = names(data) 
keep = keep[-1] #remove 1st feature 
keepnames = c(paste0(keep, "=1"), paste0(keep, "=0")) 
rules = apriori(dsRules, 
parameter=list(support = 0.1, minlen = 3, maxlen = 3, target= "rules", confidence = 0.7), 
appearance = list(lhs = keepnames)) 
4

Nsfy으로 좌측에있는 것으로,이 작업을 수행하는 쉬운 방법이있다. appearance=list(rhs='X1=1',default='lhs')처럼 default='lhs'을 추가해야합니다. 이렇게하면 rhs가 X1=1으로 제한됩니다.

+0

감사합니다. 이것은 내가 알아내는 데 100 년이 걸렸을 것입니다. –