Skip to content

Commit

Permalink
No order
Browse files Browse the repository at this point in the history
  • Loading branch information
gadelrab committed Apr 26, 2016
1 parent e9584ba commit 09e2a7e
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 22 deletions.
74 changes: 52 additions & 22 deletions src/main/java/de/mpii/frequentrulesminning/Evaluator.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,13 @@ public double confidence(AssocRuleWithExceptions rule, ExceptionItem exceptionIt
Set<Transaction> ruleTransactions = transactionsDB.getTransactions(rule.getBodyAndHead(), ExceptionItem.toArray(exceptionItem), this.countPrediction);
Set<Transaction> bodyTransactions = transactionsDB.getTransactions(rule.getBody(), ExceptionItem.toArray(exceptionItem), this.countPrediction);

if (this.useOrder) {
ruleTransactions = TransactionsDatabase.filterBetterQualityRules(ruleTransactions, rule);
bodyTransactions = TransactionsDatabase.filterBetterQualityRules(bodyTransactions, rule);
}
// if (this.useOrder) {
// ruleTransactions = TransactionsDatabase.filterBetterQualityRules(ruleTransactions, rule);
// bodyTransactions = TransactionsDatabase.filterBetterQualityRules(bodyTransactions, rule);
// }

ruleTransactions = filterTransactions(ruleTransactions, rule);
bodyTransactions = filterTransactions(bodyTransactions, rule);

double bodySupport = TransactionsDatabase.getTransactionsCount(bodyTransactions, rule.getBody(), ExceptionItem.toArray(exceptionItem), this.useWeights);
double ruleSupport = TransactionsDatabase.getTransactionsCount(ruleTransactions, rule.getBodyAndHead(), ExceptionItem.toArray(exceptionItem), this.useWeights);
Expand All @@ -102,10 +105,14 @@ public double coverage(AssocRuleWithExceptions rule, ExceptionItem exceptionItem
Set<Transaction> ruleTransactions = transactionsDB.getTransactions(rule.getBodyAndHead(), ExceptionItem.toArray(exceptionItem), this.countPrediction);
Set<Transaction> headTransactions = transactionsDB.getTransactions(rule.getHead(), null, this.countPrediction);

if (this.useOrder) {
ruleTransactions = TransactionsDatabase.filterBetterQualityRules(ruleTransactions, rule);
headTransactions = TransactionsDatabase.filterBetterQualityRules(headTransactions, rule);
}
// if (this.useOrder) {
// ruleTransactions = TransactionsDatabase.filterBetterQualityRules(ruleTransactions, rule);
// headTransactions = TransactionsDatabase.filterBetterQualityRules(headTransactions, rule);
// }

ruleTransactions = filterTransactions(ruleTransactions, rule);
headTransactions = filterTransactions(headTransactions, rule);


double ruleSupport = TransactionsDatabase.getTransactionsCount(ruleTransactions, rule.getBodyAndHead(), ExceptionItem.toArray(exceptionItem), this.useWeights);
double headSupport = TransactionsDatabase.getTransactionsCount(headTransactions, rule.getHead(), ExceptionItem.toArray(exceptionItem), this.useWeights);
Expand All @@ -131,11 +138,17 @@ public double lift(AssocRuleWithExceptions rule, ExceptionItem exceptionItem) {
Set<Transaction> bodyTransactions = transactionsDB.getTransactions(rule.getBody(), ExceptionItem.toArray(exceptionItem), this.countPrediction);
Set<Transaction> headTransactions = transactionsDB.getTransactions(rule.getHead(), null, this.countPrediction);

if (this.useOrder) {
ruleTransactions = TransactionsDatabase.filterBetterQualityRules(ruleTransactions, rule);
bodyTransactions = TransactionsDatabase.filterBetterQualityRules(bodyTransactions, rule);
headTransactions = TransactionsDatabase.filterBetterQualityRules(headTransactions, rule);
}
// if (this.useOrder) {
// ruleTransactions = TransactionsDatabase.filterBetterQualityRules(ruleTransactions, rule);
// bodyTransactions = TransactionsDatabase.filterBetterQualityRules(bodyTransactions, rule);
// headTransactions = TransactionsDatabase.filterBetterQualityRules(headTransactions, rule);
// }


ruleTransactions = filterTransactions(ruleTransactions, rule);
bodyTransactions = filterTransactions(bodyTransactions, rule);
headTransactions = filterTransactions(headTransactions, rule);


double ruleSupport = TransactionsDatabase.getTransactionsCount(ruleTransactions, rule.getBodyAndHead(), ExceptionItem.toArray(exceptionItem), this.useWeights);
double bodySupport = TransactionsDatabase.getTransactionsCount(bodyTransactions, rule.getBody(), ExceptionItem.toArray(exceptionItem), this.useWeights);
Expand Down Expand Up @@ -167,10 +180,13 @@ public double negativeRuleConfidence(AssocRuleWithExceptions rule, ExceptionItem
Set<Transaction> ruleTransactions = transactionsDB.getTransactions(ArrayUtils.addAll(rule.getBody(), ExceptionItem.toArray(exceptionItem)), rule.getHead(), this.countPrediction);


if (this.useOrder) {
ruleTransactions = TransactionsDatabase.filterBetterQualityRules(ruleTransactions, rule);
bodyWithExceptionTransactions = TransactionsDatabase.filterBetterQualityRules(bodyWithExceptionTransactions, rule);
}
// if (this.useOrder) {
// ruleTransactions = TransactionsDatabase.filterBetterQualityRules(ruleTransactions, rule);
// bodyWithExceptionTransactions = TransactionsDatabase.filterBetterQualityRules(bodyWithExceptionTransactions, rule);
// }
ruleTransactions = filterTransactions(ruleTransactions, rule);
bodyWithExceptionTransactions = filterTransactions(bodyWithExceptionTransactions, rule);


double ruleSupport = TransactionsDatabase.getTransactionsCount(ruleTransactions, ArrayUtils.addAll(rule.getBody(), ExceptionItem.toArray(exceptionItem)), rule.getHead(), this.useWeights);
double bodySupport = TransactionsDatabase.getTransactionsCount(bodyWithExceptionTransactions, ArrayUtils.addAll(rule.getBody(), ExceptionItem.toArray(exceptionItem)), null, this.useWeights);
Expand All @@ -179,6 +195,16 @@ public double negativeRuleConfidence(AssocRuleWithExceptions rule, ExceptionItem

}

private Set<Transaction> filterTransactions(Set<Transaction> transactions, AssocRuleWithExceptions rule) {
if(useOrder){
transactions=TransactionsDatabase.filterBetterQualityRules(transactions, rule);
}
else{
transactions= TransactionsDatabase.filterOtherRulesPredictions(transactions, rule);
}
return transactions;
}


public void setCountPrediction(boolean countPrediction) {
this.countPrediction = countPrediction;
Expand Down Expand Up @@ -227,11 +253,15 @@ public double JaccardCoefficient(AssocRuleWithExceptions rule,ExceptionItem exce
Set<Transaction> bodyTransactions = transactionsDB.getTransactions(rule.getBody(), ExceptionItem.toArray(exceptionItem), this.countPrediction);
Set<Transaction> headTransactions = transactionsDB.getTransactions(rule.getHead(), null, this.countPrediction);

if (this.useOrder) {
ruleTransactions = TransactionsDatabase.filterBetterQualityRules(ruleTransactions, rule);
bodyTransactions = TransactionsDatabase.filterBetterQualityRules(bodyTransactions, rule);
headTransactions = TransactionsDatabase.filterBetterQualityRules(headTransactions, rule);
}
// if (this.useOrder) {
// ruleTransactions = TransactionsDatabase.filterBetterQualityRules(ruleTransactions, rule);
// bodyTransactions = TransactionsDatabase.filterBetterQualityRules(bodyTransactions, rule);
// headTransactions = TransactionsDatabase.filterBetterQualityRules(headTransactions, rule);
// }

ruleTransactions = filterTransactions(ruleTransactions, rule);
bodyTransactions = filterTransactions(bodyTransactions, rule);
headTransactions =filterTransactions(headTransactions, rule);

double ruleSupport = TransactionsDatabase.getTransactionsCount(ruleTransactions, rule.getBodyAndHead(), ExceptionItem.toArray(exceptionItem), this.useWeights);
double bodySupport = TransactionsDatabase.getTransactionsCount(bodyTransactions, rule.getBody(), ExceptionItem.toArray(exceptionItem), this.useWeights);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,4 +237,9 @@ public boolean allPredictionsFromBetterQualityRules(AssocRuleWithExceptions rule
return Arrays.stream(rule.getBody()).allMatch((i)->getItemWeight(i).predictedWithBetterQualityRules(rule));

}


public boolean allPredicationFromDifferentRules(AssocRuleWithExceptions rule){
return Arrays.stream(rule.getBody()).allMatch((i)->getItemWeight(i).predictedWithDifferentRules(rule));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,17 @@ public static Set<Transaction> filterBetterQualityRules(Collection<Transaction>
return transactions.stream().filter((t)-> t.allPredictionsFromBetterQualityRules(rule)).collect(Collectors.toSet());
}

/**
* Keep the transactions to only those generated with other rules
* @param transactions
* @param rule
* @return
*/
public static Set<Transaction> filterOtherRulesPredictions(Collection<Transaction> transactions,AssocRuleWithExceptions rule){
// Restrict on transactions of higher quality
return transactions.stream().filter((t)-> t.allPredicationFromDifferentRules(rule)).collect(Collectors.toSet());
}

/**
* Return the transactions total count either nor weighted or weighted with respect to set of Items positive and negatives
* @param transactions
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/de/mpii/frequentrulesminning/utils/Weight.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,9 @@ public double getMinimumRulesChainQuality() {
// Currently only one rule
return this.getRuleQuality();
}

public boolean predictedWithDifferentRules(AssocRuleWithExceptions rule) {
return !rulesChainContains(rule);

}
}

0 comments on commit 09e2a7e

Please sign in to comment.