List of usage examples for weka.core Instance dataset
public Instances dataset();
From source file:net.sf.jclal.activelearning.oracle.ConsoleHumanOracle.java
License:Open Source License
/** * Method for the specific case of a multi-label dataset. * * @param queryStrategy The query strategy to use *///from ww w . jav a 2 s. c om private void labelMultiLabelInstances(IQueryStrategy queryStrategy) { //Object to read from the console Scanner scanner = new Scanner(new BufferedInputStream(System.in)); AbstractMultiLabelQueryStrategy multiLabelQueryStrategy = (AbstractMultiLabelQueryStrategy) queryStrategy; ArrayList<Integer> selected = multiLabelQueryStrategy.getSelectedInstances(); ArrayList<String> labels = new ArrayList<String>( multiLabelQueryStrategy.getLabelsMetaData().getLabelNames()); //For each selected instance for (int i : selected) { //Ask to the oracle about the class of the instance Instance instance = multiLabelQueryStrategy.getUnlabelledData().instance(i); System.out.println("\nWhat are the labels of this multi-label instance?"); System.out.println("Instance:" + instance.toString() + "\n"); StringTokenizer line; do { System.out.println("IndexLabels: LabelName"); int index = 0; for (String label : labels) { System.out.println((index++) + "-" + label); } System.out.println( "\n Type the indexes of the labels that the instance belongs separated by a colon"); line = new StringTokenizer(scanner.next(), ","); } while (line.countTokens() == 0); //Reset the labels for (int labelIndex = 0; labelIndex < multiLabelQueryStrategy.getNumLabels(); labelIndex++) { instance.setValue(multiLabelQueryStrategy.getLabelIndices()[labelIndex], 0); } while (line.hasMoreTokens()) { int labelIndex = Integer.valueOf(line.nextToken()); Attribute att = instance.dataset().attribute(labels.get(labelIndex)); instance.setValue(att, 1); } System.out.println(); } }
From source file:net.sf.jclal.classifier.WekaComitteClassifier.java
License:Open Source License
/** * Counts the votes of the committee for each class * * @param instance The instance to test. * @return The votes of the committee for each class. * @throws Exception The exception that will be launched * /*w w w .j a va 2 s. co m*/ */ public int[] countVotesForEachClass(Instance instance) throws Exception { int[] votes = new int[instance.dataset().numDistinctValues(instance.classIndex())]; int sizeCommittee = classifiers.length; for (int i = 0; i < sizeCommittee; i++) { double v = classifiers[i].classifyInstance(instance); ++votes[(int) v]; } return votes; }
From source file:net.sf.jclal.classifier.WekaComitteClassifier.java
License:Open Source License
/** * Returns the probability that has the instance to belong to each class. * * @param instance The instance to test//from ww w. j av a2 s . c o m * @return The probabilities for each class */ @Override public double[] distributionForInstance(Instance instance) { try { double[] consensus = new double[instance.dataset().numDistinctValues(instance.classIndex())]; double sizeCommittee = classifiers.length; for (int i = 0; i < sizeCommittee; i++) { /* modified here */ /*double[] currentProb = classifiers[i] .distributionForInstance(instance); for (int j = 0; j < consensus.length; j++) { consensus[j] += currentProb[j]; }*/ //FIRST MODIFIED VERSION /*Random random = new Random(); for (int j = 0; j < consensus.length; j++) { double cenas = random.nextGaussian(); if(cenas < 0) cenas = 0; else if(cenas > 1) cenas = 1; consensus[j] += cenas; }*/ //SECOND MODIFIED VERSION Random random = new Random(); for (int j = 0; j < consensus.length; j++) { double cenas = random.nextGaussian(); if (cenas < 0) cenas = -0.48 * cenas; else cenas = 0.48 + 0.48 * cenas; consensus[j] += cenas; } } for (int i = 0; i < consensus.length; i++) { consensus[i] /= sizeCommittee; } return consensus; } catch (Exception ex) { Logger.getLogger(VoteEntropyQueryStrategy.class.getName()).log(Level.SEVERE, null, ex); } return null; }
From source file:org.mcennis.graphrat.algorithm.aggregators.PropertyToLink.java
License:Open Source License
@Override public void execute(Graph g) { ActorByMode mode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); mode.buildQuery((String) parameter.get("SourceMode").get(), ".*", false); Iterator<Actor> actorIt = AlgorithmMacros.filterActor(parameter, g, mode, null, null); if (actorIt.hasNext()) { while (actorIt.hasNext()) { Actor actor = actorIt.next(); Property linkSource = actor.getProperty( AlgorithmMacros.getDestID(parameter, g, (String) parameter.get("Property").get())); if (linkSource != null) { List values = linkSource.getValue(); if (values.size() > 0) { Instance data = (Instance) values.get(0); Instances meta = data.dataset(); TreeSet<Actor> base = new TreeSet<Actor>(); for (int j = 0; j < meta.numAttributes(); ++j) { if (!Double.isNaN(data.value(j))) { Actor destination = g.getActor((String) parameter.get("DestinationMode").get(), meta.attribute(j).name()); if (destination != null) { base.add(destination); Collection<Actor> ret = AlgorithmMacros.filterActor(parameter, g, base); if (ret.size() > 0) { Link link = LinkFactory.newInstance() .create((String) parameter.get("Relation").get()); link.set(actor, data.value(j), ret.iterator().next()); g.add(link); }/* w w w . ja v a 2 s.c om*/ base.clear(); } } } } else { Logger.getLogger(PropertyToLink.class.getName()).log(Level.WARNING, "Property '" + linkSource.getType() + "' on actor '" + actor.getID() + "' has no value"); } } else { Logger.getLogger(PropertyToLink.class.getName()).log(Level.WARNING, "Property '" + (String) parameter.get("Property").get() + "' on actor '" + actor.getID() + "' does not exist"); } } } else { Logger.getLogger(PropertyToLink.class.getName()).log(Level.WARNING, "No actors of mode '" + (String) parameter.get("SourceMode").get() + "' were found"); } }
From source file:org.mcennis.graphrat.algorithm.clustering.WekaClassifierClusterer.java
License:Open Source License
@Override public void execute(Graph g) { ActorByMode mode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); mode.buildQuery((String) parameter.get("GroundMode").get(), ".*", false); try {/*from w ww . j a v a 2 s . c om*/ Clusterer clusterer = (Clusterer) ((Class) parameter.get("Clusterer").get()).newInstance(); String[] options = ((String) parameter.get("Options").get()).split("\\s+"); ((OptionHandler) clusterer).setOptions(options); Iterator<Actor> actor = AlgorithmMacros.filterActor(parameter, g, mode, null, null); Instances dataSet = null; while (actor.hasNext()) { Actor a = actor.next(); Property property = a.getProperty( AlgorithmMacros.getSourceID(parameter, g, (String) parameter.get("SourceProperty").get())); if (!property.getValue().isEmpty()) { Instance value = (Instance) property.getValue().get(0); if ((dataSet == null) && (value.dataset() != null)) { FastVector attributes = new FastVector(); for (int i = 0; i < value.dataset().numAttributes(); ++i) { attributes.addElement(value.dataset().attribute(i)); } dataSet = new Instances("Clustering", attributes, 1000); } else if ((dataSet == null)) { FastVector attributes = new FastVector(); for (int i = 0; i < value.numAttributes(); ++i) { Attribute element = new Attribute(Integer.toString(i)); attributes.addElement(element); } dataSet = new Instances("Clustering", attributes, 1000); } dataSet.add(value); } } clusterer.buildClusterer(dataSet); actor = AlgorithmMacros.filterActor(parameter, g, mode, null, null); HashMap<Integer, Graph> clusters = new HashMap<Integer, Graph>(); while (actor.hasNext()) { Actor a = actor.next(); Property property = a.getProperty( AlgorithmMacros.getSourceID(parameter, g, (String) parameter.get("SourceProperty").get())); if (!property.getValue().isEmpty()) { Instance instance = (Instance) property.getValue().get(0); int cluster = -1; try { cluster = clusterer.clusterInstance(instance); if (!clusters.containsKey(cluster)) { Graph graph = GraphFactory.newInstance().create(AlgorithmMacros.getDestID(parameter, g, (String) parameter.get("GraphID").get() + cluster), parameter); clusters.put(cluster, graph); } clusters.get(cluster).add(a); } catch (Exception ex) { Logger.getLogger(WekaClassifierClusterer.class.getName()).log(Level.SEVERE, "ClusterInstance on clusterer failed", ex); } Property clusterProperty = PropertyFactory.newInstance().create("BasicProperty", AlgorithmMacros .getDestID(parameter, g, (String) parameter.get("DestinationProperty").get()), Integer.class); clusterProperty.add(new Integer(cluster)); a.add(clusterProperty); } } Iterator<Graph> graphIt = clusters.values().iterator(); while (graphIt.hasNext()) { LinkQuery query = (LinkQuery) parameter.get("LinkQuery").get(); Graph graph = graphIt.next(); Iterator<Link> link = query.executeIterator(g, graph.getActor(), graph.getActor(), null); while (link.hasNext()) { graph.add(link.next()); } if ((Boolean) parameter.get("AddContext").get()) { TreeSet<Actor> actorSet = new TreeSet<Actor>(); actorSet.addAll(graph.getActor()); link = query.executeIterator(g, actorSet, null, null); while (link.hasNext()) { Link l = link.next(); Actor d = l.getDestination(); if (graph.getActor(d.getMode(), d.getID()) == null) { graph.add(d); } if (graph.getLink(l.getRelation(), l.getSource(), l.getDestination()) == null) { graph.add(l); } } link = query.executeIterator(g, null, actorSet, null); while (link.hasNext()) { Link l = link.next(); Actor d = l.getSource(); if (graph.getActor(d.getMode(), d.getID()) == null) { graph.add(d); } if (graph.getLink(l.getRelation(), l.getSource(), l.getDestination()) == null) { graph.add(l); } } } } } catch (InstantiationException ex) { Logger.getLogger(WekaClassifierClusterer.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(WekaClassifierClusterer.class.getName()).log(Level.SEVERE, null, ex); } catch (Exception ex) { Logger.getLogger(WekaClassifierClusterer.class.getName()).log(Level.SEVERE, null, ex); } }
From source file:org.mcennis.graphrat.algorithm.clustering.WekaProbablisticClusterer.java
License:Open Source License
@Override public void execute(Graph g) { ActorByMode mode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); mode.buildQuery((String) parameter.get("GroundMode").get(), ".*", false); try {//from w w w.j ava 2 s . c om Clusterer clusterer = (Clusterer) ((Class) parameter.get("Clusterer").get()).newInstance(); String[] options = ((String) parameter.get("Options").get()).split("\\s+"); ((OptionHandler) clusterer).setOptions(options); Iterator<Actor> actor = AlgorithmMacros.filterActor(parameter, g, mode, null, null); Instances dataSet = null; while (actor.hasNext()) { Actor a = actor.next(); Property property = a.getProperty( AlgorithmMacros.getSourceID(parameter, g, (String) parameter.get("SourceProperty").get())); if (!property.getValue().isEmpty()) { Instance value = (Instance) property.getValue().get(0); if ((dataSet == null) && (value.dataset() != null)) { FastVector attributes = new FastVector(); for (int i = 0; i < value.dataset().numAttributes(); ++i) { attributes.addElement(value.dataset().attribute(i)); } dataSet = new Instances("Clustering", attributes, 1000); } else if ((dataSet == null)) { FastVector attributes = new FastVector(); for (int i = 0; i < value.numAttributes(); ++i) { Attribute element = new Attribute(Integer.toString(i)); attributes.addElement(element); } dataSet = new Instances("Clustering", attributes, 1000); } dataSet.add(value); } } clusterer.buildClusterer(dataSet); actor = AlgorithmMacros.filterActor(parameter, g, mode, null, null); HashMap<Integer, Graph> clusters = new HashMap<Integer, Graph>(); while (actor.hasNext()) { Actor a = actor.next(); Property property = a.getProperty( AlgorithmMacros.getSourceID(parameter, g, (String) parameter.get("SourceProperty").get())); if (!property.getValue().isEmpty()) { Instance instance = (Instance) property.getValue().get(0); double[] cluster = new double[] {}; try { cluster = clusterer.distributionForInstance(instance); } catch (Exception ex) { Logger.getLogger(WekaClassifierClusterer.class.getName()).log(Level.SEVERE, "ClusterInstance on clusterer failed", ex); } Property clusterProperty = PropertyFactory.newInstance().create("BasicProperty", AlgorithmMacros.getDestID(parameter, g, (String) parameter.get("DestinationProperty").get()), (new double[] {}).getClass()); clusterProperty.add(cluster); a.add(clusterProperty); } } } catch (InstantiationException ex) { Logger.getLogger(WekaClassifierClusterer.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(WekaClassifierClusterer.class.getName()).log(Level.SEVERE, null, ex); } catch (Exception ex) { Logger.getLogger(WekaClassifierClusterer.class.getName()).log(Level.SEVERE, null, ex); } }
From source file:org.mcennis.graphrat.algorithm.machinelearning.BuildClassifierPerActor.java
License:Open Source License
public void execute(Graph g) { // construct the queries to be used ActorByMode groundMode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); groundMode.buildQuery((String) parameter.get("GroundMode").get(), ".*", false); ActorByMode targetMode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); targetMode.buildQuery((String) parameter.get("TargetMode").get(), ".*", false); LinkByRelation groundTruth = (LinkByRelation) LinkQueryFactory.newInstance().create("LinkByRelation"); groundTruth.buildQuery((String) parameter.get("Relation").get(), false); // build a list of new artists TreeSet<Actor> artists = new TreeSet<Actor>(); artists.addAll(AlgorithmMacros.filterActor(parameter, g, targetMode.execute(g, artists, null))); // collect the instance variables from the properties to be the for (Actor i : artists) { TreeSet<Actor> artist = new TreeSet<Actor>(); artist.add(i);/* w w w . ja v a2 s . co m*/ Classifier classifier = createClassifier(); Iterator<Actor> users = AlgorithmMacros.filterActor(parameter, g, groundMode, null, null); Instances dataSet = null; boolean firstRun = true; while (users.hasNext()) { TreeSet<Actor> user = new TreeSet<Actor>(); user.add(users.next()); Property property = user.first().getProperty( AlgorithmMacros.getSourceID(parameter, g, (String) parameter.get("SourceProperty").get())); if (property.getPropertyClass().getName().contentEquals(Instance.class.getName())) { List values = property.getValue(); if (!values.isEmpty()) { // get the existing instance Instance object = (Instance) values.get(0); if (firstRun == true) { firstRun = false; Instances current = object.dataset(); FastVector attributes = new FastVector(); for (int j = 0; j < current.numAttributes(); ++j) { attributes.addElement(current.attribute(j)); } Attribute classValue = new Attribute(i.getID()); attributes.addElement(classValue); dataSet = new Instances(i.getID(), attributes, 1000); dataSet.setClassIndex(dataSet.numAttributes() - 1); } // for every artist, create a temporary artist classifer double[] content = new double[object.numAttributes() + 1]; for (int j = 0; j < object.numAttributes() + 1; ++j) { content[j] = object.value(j); } Iterator<Link> link = null; if ((LinkEnd) parameter.get("LinkEnd").get() == LinkEnd.SOURCE) { link = AlgorithmMacros.filterLink(parameter, g, groundTruth, user, artist, null); } else { link = AlgorithmMacros.filterLink(parameter, g, groundTruth, artist, user, null); } if (link.hasNext()) { content[content.length - 1] = link.next().getStrength(); } else if ((Boolean) parameter.get("AbsenceIsMissing").get()) { content[content.length - 1] = Double.NaN; } else { content[content.length - 1] = 0.0; } Instance base = new Instance(1.0, content); base.setDataset(dataSet); dataSet.add(base); } } } try { classifier.buildClassifier(dataSet); Property classifierProperty = PropertyFactory.newInstance().create( AlgorithmMacros.getDestID(parameter, g, (String) parameter.get("ClassifierProperty").get()), (String) parameter.get("ClassifierProperty").getType(), weka.classifiers.Classifier.class); classifierProperty.add(classifier); i.add(classifierProperty); Property instancesProperty = PropertyFactory.newInstance().create( AlgorithmMacros.getDestID(parameter, g, (String) parameter.get("InstancesProperty").get()), (String) parameter.get("InstancesProperty").getType(), weka.core.Instances.class); instancesProperty.add(classifier); i.add(instancesProperty); } catch (Exception ex) { Logger.getLogger(BuildClassifierPerActor.class.getName()).log(Level.SEVERE, null, ex); } } }
From source file:org.mcennis.graphrat.algorithm.machinelearning.BuildClassifierSingleAttribute.java
License:Open Source License
public void execute(Graph g) { // construct the queries to be used ActorByMode groundMode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); groundMode.buildQuery((String) parameter.get("GroundMode").get(), ".*", false); ActorByMode targetMode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); targetMode.buildQuery((String) parameter.get("TargetMode").get(), ".*", false); LinkByRelation groundTruth = (LinkByRelation) LinkQueryFactory.newInstance().create("LinkByRelation"); groundTruth.buildQuery((String) parameter.get("Relation").get(), false); // build a list of new artists TreeSet<Actor> artists = new TreeSet<Actor>(); artists.addAll(AlgorithmMacros.filterActor(parameter, g, targetMode.execute(g, artists, null))); // collect the instance variables from the properties to be the Classifier classifier = createClassifier(); Iterator<Actor> users = AlgorithmMacros.filterActor(parameter, g, groundMode, null, null); Instances dataSet = null;//w ww.j a v a 2 s . c o m boolean firstEntry = true; while (users.hasNext()) { TreeSet<Actor> user = new TreeSet<Actor>(); user.add(users.next()); Property property = user.first().getProperty( AlgorithmMacros.getSourceID(parameter, g, (String) parameter.get("SourceProperty").get())); if (property.getPropertyClass().getName().contentEquals(Instance.class.getName())) { List values = property.getValue(); if (!values.isEmpty()) { // get the existing instance Instance object = (Instance) values.get(0); if (firstEntry) { firstEntry = false; Instances current = object.dataset(); FastVector attributes = new FastVector(); for (int j = 0; j < current.numAttributes(); ++j) { attributes.addElement(current.attribute(j)); } FastVector targetNames = new FastVector(); Iterator<Actor> artistIt = targetMode.executeIterator(g, null, null); while (artistIt.hasNext()) { targetNames.addElement(artistIt.next().getID()); } Attribute classValue = new Attribute("TargetID", targetNames); attributes.addElement(classValue); dataSet = new Instances("Training", attributes, 1000); dataSet.setClassIndex(dataSet.numAttributes() - 1); } // for every artist, create a temporary artist classifer double[] content = new double[object.numAttributes() + 1]; for (int j = 0; j < object.numAttributes() + 1; ++j) { content[j] = object.value(j); } Iterator<Link> link = null; if ((LinkEnd) parameter.get("LinkEnd").get() == LinkEnd.SOURCE) { link = AlgorithmMacros.filterLink(parameter, g, groundTruth, user, null, null); } else { link = AlgorithmMacros.filterLink(parameter, g, groundTruth, null, user, null); } if (link.hasNext()) { double strength = Double.NEGATIVE_INFINITY; Actor target = null; while (link.hasNext()) { Link l = link.next(); if (l.getStrength() > strength) { strength = l.getStrength(); if ((LinkEnd) parameter.get("LinkEnd").get() == LinkEnd.SOURCE) { target = l.getDestination(); } else { target = l.getSource(); } } } content[content.length - 1] = dataSet.attribute(dataSet.numAttributes() - 1) .indexOfValue(target.getID()); } else { content[content.length - 1] = Double.NaN; } Instance base = new Instance(1.0, content); base.setDataset(dataSet); dataSet.add(base); } } } try { classifier.buildClassifier(dataSet); Property classifierProperty = PropertyFactory.newInstance().create("BasicProperty", AlgorithmMacros.getDestID(parameter, g, (String) parameter.get("ClassifierProperty").get()), weka.classifiers.Classifier.class); classifierProperty.add(classifier); g.add(classifierProperty); Property instancesProperty = PropertyFactory.newInstance().create("BasicProperty", AlgorithmMacros.getDestID(parameter, g, (String) parameter.get("InstancesProperty").get()), weka.core.Instances.class); instancesProperty.add(classifier); g.add(instancesProperty); } catch (Exception ex) { Logger.getLogger(BuildClassifierSingleAttribute.class.getName()).log(Level.SEVERE, null, ex); } }
From source file:org.mcennis.graphrat.algorithm.machinelearning.ClassifyPerActor.java
License:Open Source License
public void execute(Graph g) { // construct the queries to be used ActorByMode groundMode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); groundMode.buildQuery((String) parameter.get("GroundMode").get(), ".*", false); ActorByMode targetMode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); targetMode.buildQuery((String) parameter.get("TargetMode").get(), ".*", false); // build a list of new artists TreeSet<Actor> artists = new TreeSet<Actor>(); artists.addAll(AlgorithmMacros.filterActor(parameter, g, targetMode.execute(g, artists, null))); // collect the instance variables from the properties to be the for (Actor i : artists) { Property classifierProperty = i.getProperty( AlgorithmMacros.getSourceID(parameter, g, (String) parameter.get("ClassifierProperty").get())); if (!classifierProperty.getValue().isEmpty()) { Classifier classifier = (Classifier) classifierProperty.getValue().get(0); TreeSet<Actor> artist = new TreeSet<Actor>(); artist.add(i);//from www. j av a 2s .c om Iterator<Actor> users = AlgorithmMacros.filterActor(parameter, g, groundMode, null, null); Instances dataSet = null; boolean firstRun = true; while (users.hasNext()) { TreeSet<Actor> user = new TreeSet<Actor>(); user.add(users.next()); Property property = user.first().getProperty(AlgorithmMacros.getSourceID(parameter, g, (String) parameter.get("SourceProperty").get())); if (property.getPropertyClass().getName().contentEquals(Instance.class.getName())) { List values = property.getValue(); if (!values.isEmpty()) { // get the existing instance Instance object = (Instance) values.get(0); if (firstRun) { firstRun = false; Instances current = object.dataset(); FastVector attributes = new FastVector(); for (int j = 0; j < current.numAttributes(); ++j) { attributes.addElement(current.attribute(j)); } Attribute classValue = new Attribute(i.getID()); attributes.addElement(classValue); dataSet = new Instances(i.getID(), attributes, 1000); dataSet.setClassIndex(dataSet.numAttributes() - 1); } // for every artist, create a temporary artist classifer double[] content = new double[object.numAttributes() + 1]; for (int j = 0; j < object.numAttributes() + 1; ++j) { content[j] = object.value(j); } Instance base = new Instance(1.0, content); try { double strength = classifier.classifyInstance(base); if ((!Double.isNaN(strength)) && (strength != 0.0)) { Link link = LinkFactory.newInstance() .create((String) parameter.get("Relation").get()); if ((LinkEnd) parameter.get("LinkEnd").get() == LinkEnd.SOURCE) { link.set(user.first(), strength, artist.first()); } else { link.set(artist.first(), strength, user.first()); } g.add(link); } } catch (Exception ex) { Logger.getLogger(ClassifyPerActor.class.getName()).log(Level.SEVERE, null, ex); } } } } } } }
From source file:org.mcennis.graphrat.algorithm.machinelearning.ClassifySingleAttribute.java
License:Open Source License
public void execute(Graph g) { // construct the queries to be used ActorByMode groundMode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); groundMode.buildQuery((String) parameter.get("GroundMode").get(), ".*", false); ActorByMode targetMode = (ActorByMode) ActorQueryFactory.newInstance().create("ActorByMode"); targetMode.buildQuery((String) parameter.get("TargetMode").get(), ".*", false); LinkByRelation groundTruth = (LinkByRelation) LinkQueryFactory.newInstance().create("LinkByRelation"); groundTruth.buildQuery((String) parameter.get("Relation").get(), false); // build a list of new artists TreeSet<Actor> artists = new TreeSet<Actor>(); artists.addAll(AlgorithmMacros.filterActor(parameter, g, targetMode.execute(g, artists, null))); // collect the instance variables from the properties to be the Property classifierProperty = g.getProperty( AlgorithmMacros.getSourceID(parameter, g, (String) parameter.get("ClassifierProperty").get())); if (!classifierProperty.getValue().isEmpty()) { Classifier classifier = (Classifier) classifierProperty.getValue().get(0); Iterator<Actor> users = AlgorithmMacros.filterActor(parameter, g, groundMode, null, null); Instances dataSet = null;//from w w w.j a v a2s .co m boolean firstEntry = true; while (users.hasNext()) { TreeSet<Actor> user = new TreeSet<Actor>(); user.add(users.next()); Property property = user.first().getProperty( AlgorithmMacros.getSourceID(parameter, g, (String) parameter.get("SourceProperty").get())); if (property.getPropertyClass().getName().contentEquals(Instance.class.getName())) { List values = property.getValue(); if (!values.isEmpty()) { // get the existing instance Instance object = (Instance) values.get(0); if (firstEntry) { firstEntry = false; Instances current = object.dataset(); FastVector attributes = new FastVector(); for (int j = 0; j < current.numAttributes(); ++j) { attributes.addElement(current.attribute(j)); } FastVector targetNames = new FastVector(); Iterator<Actor> artistIt = targetMode.executeIterator(g, null, null); while (artistIt.hasNext()) { targetNames.addElement(artistIt.next().getID()); } Attribute classValue = new Attribute("TargetID", targetNames); attributes.addElement(classValue); dataSet = new Instances("Training", attributes, 1000); dataSet.setClassIndex(dataSet.numAttributes() - 1); } // for every artist, create a temporary artist classifer double[] content = new double[object.numAttributes() + 1]; for (int j = 0; j < object.numAttributes() + 1; ++j) { content[j] = object.value(j); } Instance base = new Instance(1.0, content); try { double strength = classifier.classifyInstance(base); if (!Double.isNaN(strength)) { String id = dataSet.classAttribute().value((int) strength); Actor target = g.getActor((String) parameter.get("TargetMode").get(), id); Link link = LinkFactory.newInstance() .create((String) parameter.get("Relation").get()); if ((LinkEnd) parameter.get("LinkEnd").get() == LinkEnd.SOURCE) { link.set(user.first(), strength, target); } else { link.set(target, strength, user.first()); } g.add(link); } } catch (Exception ex) { Logger.getLogger(ClassifyPerActor.class.getName()).log(Level.SEVERE, null, ex); } } } } } }