Loading src/main/java/io/gitlab/chaver/mining/examples/ExampleAdequateClosure.java 0 → 100644 +60 −0 Original line number Diff line number Diff line package io.gitlab.chaver.mining.examples; import io.gitlab.chaver.mining.patterns.constraints.AdequateClosureDC; import io.gitlab.chaver.mining.patterns.constraints.CoverSize; import io.gitlab.chaver.mining.patterns.io.DatReader; import io.gitlab.chaver.mining.patterns.io.Database; import io.gitlab.chaver.mining.patterns.io.Pattern; import io.gitlab.chaver.mining.patterns.measure.Measure; import org.chocosolver.solver.Model; import org.chocosolver.solver.constraints.Constraint; import org.chocosolver.solver.variables.BoolVar; import org.chocosolver.solver.variables.IntVar; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.stream.IntStream; import static io.gitlab.chaver.mining.patterns.measure.MeasureFactory.*; /** * Example of closed patterns mining w.r.t. the set of measures M = {freq(x), max(x.freq)} */ public class ExampleAdequateClosure { public static void main(String[] args) throws Exception { String dataPath = "src/test/resources/contextPasquier99/contextPasquier99.dat"; List<Measure> measures = Arrays.asList(freq(), maxFreq()); Model model = new Model("adequate closure test"); Database database = new DatReader(dataPath, 0, true).readFiles(); IntVar freq = model.intVar("freq", 1, database.getNbTransactions()); IntVar length = model.intVar("length", 1, database.getNbItems()); BoolVar[] x = model.boolVarArray("x", database.getNbItems()); model.sum(x, "=", length).post(); int[] itemFreq = database.computeItemFreq(); IntVar[] itemFreqVar = model.intVarArray(database.getNbItems(), 0, database.getNbTransactions()); for (int i = 0; i < database.getNbItems(); i++) { // itemFreqVar[i] = itemFreq[i] if items[i] == 1 else 0 model.arithm(x[i], "*", model.intVar(itemFreq[i]), "=", itemFreqVar[i]).post(); } String maxFreqId = maxFreq().getId(); IntVar maxFreq = model.intVar(maxFreqId, 0, database.getNbTransactions()); // Compute max value of itemFreqVar model.max(maxFreq, itemFreqVar).post(); model.post(new Constraint("Cover Size", new CoverSize(database, freq, x))); model.post(new Constraint("Adequate Closure", new AdequateClosureDC(database, measures, x))); List<Pattern> closedPatterns = new LinkedList<>(); while (model.getSolver().solve()) { int[] itemset = IntStream.range(0, x.length) .filter(i -> x[i].getValue() == 1) .map(i -> database.getItems()[i]) .toArray(); closedPatterns.add(new Pattern(itemset, new int[]{freq.getValue(), maxFreq.getValue()})); } for (Pattern closed : closedPatterns) { System.out.println(Arrays.toString(closed.getItems()) + ", freq=" + closed.getMeasures()[0] + ", maxFreq=" + closed.getMeasures()[1]); } } } src/main/java/io/gitlab/chaver/mining/examples/ExampleCoverClosure.java 0 → 100644 +45 −0 Original line number Diff line number Diff line package io.gitlab.chaver.mining.examples; import io.gitlab.chaver.mining.patterns.constraints.CoverClosure; import io.gitlab.chaver.mining.patterns.constraints.CoverSize; import io.gitlab.chaver.mining.patterns.io.DatReader; import io.gitlab.chaver.mining.patterns.io.Database; import io.gitlab.chaver.mining.patterns.io.Pattern; import org.chocosolver.solver.Model; import org.chocosolver.solver.constraints.Constraint; import org.chocosolver.solver.variables.BoolVar; import org.chocosolver.solver.variables.IntVar; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.stream.IntStream; /** * Example of closed patterns mining (a closed pattern is an itemset which has no superset with the same frequency) */ public class ExampleCoverClosure { public static void main(String[] args) throws Exception { String dataPath = "src/test/resources/contextPasquier99/contextPasquier99.dat"; Model model = new Model("cover closure test"); Database database = new DatReader(dataPath, 0, true).readFiles(); IntVar freq = model.intVar("freq", 1, database.getNbTransactions()); IntVar length = model.intVar("length", 1, database.getNbItems()); BoolVar[] x = model.boolVarArray("x", database.getNbItems()); model.sum(x, "=", length).post(); model.post(new Constraint("Cover Size", new CoverSize(database, freq, x))); model.post(new Constraint("Cover Closure", new CoverClosure(database, x))); List<Pattern> closedPatterns = new LinkedList<>(); while (model.getSolver().solve()) { int[] itemset = IntStream.range(0, x.length) .filter(i -> x[i].getValue() == 1) .map(i -> database.getItems()[i]) .toArray(); closedPatterns.add(new Pattern(itemset, new int[]{freq.getValue()})); } for (Pattern closed : closedPatterns) { System.out.println(Arrays.toString(closed.getItems()) + ", freq=" + closed.getMeasures()[0]); } } } src/main/java/io/gitlab/chaver/mining/examples/ExampleGenerator.java 0 → 100644 +45 −0 Original line number Diff line number Diff line package io.gitlab.chaver.mining.examples; import io.gitlab.chaver.mining.patterns.constraints.CoverSize; import io.gitlab.chaver.mining.patterns.constraints.Generator; import io.gitlab.chaver.mining.patterns.io.DatReader; import io.gitlab.chaver.mining.patterns.io.Database; import io.gitlab.chaver.mining.patterns.io.Pattern; import org.chocosolver.solver.Model; import org.chocosolver.solver.constraints.Constraint; import org.chocosolver.solver.variables.BoolVar; import org.chocosolver.solver.variables.IntVar; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.stream.IntStream; /** * Example of generators mining (a generator is an itemset which has no subset with the same frequency) */ public class ExampleGenerator { public static void main(String[] args) throws Exception { String dataPath = "src/test/resources/contextPasquier99/contextPasquier99.dat"; Model model = new Model("generator test"); Database database = new DatReader(dataPath, 0, true).readFiles(); IntVar freq = model.intVar("freq", 1, database.getNbTransactions()); IntVar length = model.intVar("length", 1, database.getNbItems()); BoolVar[] x = model.boolVarArray("x", database.getNbItems()); model.sum(x, "=", length).post(); model.post(new Constraint("Cover Size", new CoverSize(database, freq, x))); model.post(new Constraint("Generator", new Generator(database, x))); List<Pattern> generators = new LinkedList<>(); while (model.getSolver().solve()) { int[] itemset = IntStream.range(0, x.length) .filter(i -> x[i].getValue() == 1) .map(i -> database.getItems()[i]) .toArray(); generators.add(new Pattern(itemset, new int[]{freq.getValue()})); } for (Pattern generator : generators) { System.out.println(Arrays.toString(generator.getItems()) + ", freq=" + generator.getMeasures()[0]); } } } Loading
src/main/java/io/gitlab/chaver/mining/examples/ExampleAdequateClosure.java 0 → 100644 +60 −0 Original line number Diff line number Diff line package io.gitlab.chaver.mining.examples; import io.gitlab.chaver.mining.patterns.constraints.AdequateClosureDC; import io.gitlab.chaver.mining.patterns.constraints.CoverSize; import io.gitlab.chaver.mining.patterns.io.DatReader; import io.gitlab.chaver.mining.patterns.io.Database; import io.gitlab.chaver.mining.patterns.io.Pattern; import io.gitlab.chaver.mining.patterns.measure.Measure; import org.chocosolver.solver.Model; import org.chocosolver.solver.constraints.Constraint; import org.chocosolver.solver.variables.BoolVar; import org.chocosolver.solver.variables.IntVar; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.stream.IntStream; import static io.gitlab.chaver.mining.patterns.measure.MeasureFactory.*; /** * Example of closed patterns mining w.r.t. the set of measures M = {freq(x), max(x.freq)} */ public class ExampleAdequateClosure { public static void main(String[] args) throws Exception { String dataPath = "src/test/resources/contextPasquier99/contextPasquier99.dat"; List<Measure> measures = Arrays.asList(freq(), maxFreq()); Model model = new Model("adequate closure test"); Database database = new DatReader(dataPath, 0, true).readFiles(); IntVar freq = model.intVar("freq", 1, database.getNbTransactions()); IntVar length = model.intVar("length", 1, database.getNbItems()); BoolVar[] x = model.boolVarArray("x", database.getNbItems()); model.sum(x, "=", length).post(); int[] itemFreq = database.computeItemFreq(); IntVar[] itemFreqVar = model.intVarArray(database.getNbItems(), 0, database.getNbTransactions()); for (int i = 0; i < database.getNbItems(); i++) { // itemFreqVar[i] = itemFreq[i] if items[i] == 1 else 0 model.arithm(x[i], "*", model.intVar(itemFreq[i]), "=", itemFreqVar[i]).post(); } String maxFreqId = maxFreq().getId(); IntVar maxFreq = model.intVar(maxFreqId, 0, database.getNbTransactions()); // Compute max value of itemFreqVar model.max(maxFreq, itemFreqVar).post(); model.post(new Constraint("Cover Size", new CoverSize(database, freq, x))); model.post(new Constraint("Adequate Closure", new AdequateClosureDC(database, measures, x))); List<Pattern> closedPatterns = new LinkedList<>(); while (model.getSolver().solve()) { int[] itemset = IntStream.range(0, x.length) .filter(i -> x[i].getValue() == 1) .map(i -> database.getItems()[i]) .toArray(); closedPatterns.add(new Pattern(itemset, new int[]{freq.getValue(), maxFreq.getValue()})); } for (Pattern closed : closedPatterns) { System.out.println(Arrays.toString(closed.getItems()) + ", freq=" + closed.getMeasures()[0] + ", maxFreq=" + closed.getMeasures()[1]); } } }
src/main/java/io/gitlab/chaver/mining/examples/ExampleCoverClosure.java 0 → 100644 +45 −0 Original line number Diff line number Diff line package io.gitlab.chaver.mining.examples; import io.gitlab.chaver.mining.patterns.constraints.CoverClosure; import io.gitlab.chaver.mining.patterns.constraints.CoverSize; import io.gitlab.chaver.mining.patterns.io.DatReader; import io.gitlab.chaver.mining.patterns.io.Database; import io.gitlab.chaver.mining.patterns.io.Pattern; import org.chocosolver.solver.Model; import org.chocosolver.solver.constraints.Constraint; import org.chocosolver.solver.variables.BoolVar; import org.chocosolver.solver.variables.IntVar; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.stream.IntStream; /** * Example of closed patterns mining (a closed pattern is an itemset which has no superset with the same frequency) */ public class ExampleCoverClosure { public static void main(String[] args) throws Exception { String dataPath = "src/test/resources/contextPasquier99/contextPasquier99.dat"; Model model = new Model("cover closure test"); Database database = new DatReader(dataPath, 0, true).readFiles(); IntVar freq = model.intVar("freq", 1, database.getNbTransactions()); IntVar length = model.intVar("length", 1, database.getNbItems()); BoolVar[] x = model.boolVarArray("x", database.getNbItems()); model.sum(x, "=", length).post(); model.post(new Constraint("Cover Size", new CoverSize(database, freq, x))); model.post(new Constraint("Cover Closure", new CoverClosure(database, x))); List<Pattern> closedPatterns = new LinkedList<>(); while (model.getSolver().solve()) { int[] itemset = IntStream.range(0, x.length) .filter(i -> x[i].getValue() == 1) .map(i -> database.getItems()[i]) .toArray(); closedPatterns.add(new Pattern(itemset, new int[]{freq.getValue()})); } for (Pattern closed : closedPatterns) { System.out.println(Arrays.toString(closed.getItems()) + ", freq=" + closed.getMeasures()[0]); } } }
src/main/java/io/gitlab/chaver/mining/examples/ExampleGenerator.java 0 → 100644 +45 −0 Original line number Diff line number Diff line package io.gitlab.chaver.mining.examples; import io.gitlab.chaver.mining.patterns.constraints.CoverSize; import io.gitlab.chaver.mining.patterns.constraints.Generator; import io.gitlab.chaver.mining.patterns.io.DatReader; import io.gitlab.chaver.mining.patterns.io.Database; import io.gitlab.chaver.mining.patterns.io.Pattern; import org.chocosolver.solver.Model; import org.chocosolver.solver.constraints.Constraint; import org.chocosolver.solver.variables.BoolVar; import org.chocosolver.solver.variables.IntVar; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.stream.IntStream; /** * Example of generators mining (a generator is an itemset which has no subset with the same frequency) */ public class ExampleGenerator { public static void main(String[] args) throws Exception { String dataPath = "src/test/resources/contextPasquier99/contextPasquier99.dat"; Model model = new Model("generator test"); Database database = new DatReader(dataPath, 0, true).readFiles(); IntVar freq = model.intVar("freq", 1, database.getNbTransactions()); IntVar length = model.intVar("length", 1, database.getNbItems()); BoolVar[] x = model.boolVarArray("x", database.getNbItems()); model.sum(x, "=", length).post(); model.post(new Constraint("Cover Size", new CoverSize(database, freq, x))); model.post(new Constraint("Generator", new Generator(database, x))); List<Pattern> generators = new LinkedList<>(); while (model.getSolver().solve()) { int[] itemset = IntStream.range(0, x.length) .filter(i -> x[i].getValue() == 1) .map(i -> database.getItems()[i]) .toArray(); generators.add(new Pattern(itemset, new int[]{freq.getValue()})); } for (Pattern generator : generators) { System.out.println(Arrays.toString(generator.getItems()) + ", freq=" + generator.getMeasures()[0]); } } }