public static void main(String args[]) { ProblemTransformationMethod.evaluation(new RAkELd(), args); }
@Override public Enumeration listOptions() { Vector result = new Vector(); result.addElement(new Option("\tSets M (default 10): the number of subsets", "M", 1, "-M <num>")); OptionUtils.add(result, super.listOptions()); return OptionUtils.toEnumeration(result); }
@Override public void setOptions(String[] options) throws Exception { setK(OptionUtils.parse(options, 'k', 3)); super.setOptions(options); }
RAkELd PSt_Classifier = new RAkELd(); Instances data = arff.getData(); data.setClassIndex(6); PSt_Classifier.buildClassifier(data); /* double[] confidences = PSt_Classifier.distributionForInstance(ins); int argmax = -1; double max = -1;
@Override public String [] getOptions() { List<String> result = new ArrayList<>(); OptionUtils.add(result, 'k', getK()); OptionUtils.add(result, super.getOptions()); return OptionUtils.toArray(result); }
@Override public String [] getOptions() { List<String> result = new ArrayList<>(); OptionUtils.add(result, 'M', getM()); OptionUtils.add(result, super.getOptions()); return OptionUtils.toArray(result); }
@Override public Enumeration listOptions() { Vector result = new Vector(); result.addElement(new Option("\t"+kTipText(), "k", 1, "-k <num>")); OptionUtils.add(result, super.listOptions()); return OptionUtils.toEnumeration(result); }
@Override public void buildClassifier(Instances D) throws Exception { int L = D.classIndex(); int N = D.numInstances(); Random random = new Random(m_S); // Note: a slightly roundabout way of doing it: int num = (int)Math.ceil(L / m_K); kMap = SuperLabelUtils.generatePartition(A.make_sequence(L),num,random,true); m_M = kMap.length; m_Classifiers = AbstractClassifier.makeCopies(m_Classifier,m_M); m_InstancesTemplates = new Instances[m_M]; if (getDebug()) System.out.println("Building "+m_M+" models of "+m_K+" partitions:"); for(int i = 0; i < m_M; i++) { if (getDebug()) System.out.println("\tpartitioning model "+(i+1)+"/"+m_M+": "+Arrays.toString(kMap[i])+", P="+m_P+", N="+m_N); Instances D_i = SuperLabelUtils.makePartitionDataset(D,kMap[i],m_P,m_N); if (getDebug()) System.out.println("\tbuilding model "+(i+1)+"/"+m_M+": "+Arrays.toString(kMap[i])); m_Classifiers[i].buildClassifier(D_i); m_InstancesTemplates[i] = new Instances(D_i,0); } }
@Override public double[] distributionForInstance(Instance x) throws Exception { int L = x.classIndex(); // If there is only one label, predict it //if(L == 1) return new double[]{1.0}; double y[] = new double[L]; //int c[] = new int[L]; // to scale it between 0 and 1 for(int m = 0; m < m_M; m++) { // Transform instance Instance x_m = PSUtils.convertInstance(x, L, m_InstancesTemplates[m]); x_m.setDataset(m_InstancesTemplates[m]); // Get a meta classification int i_m = (int)m_Classifiers[m].classifyInstance(x_m); // e.g., 2 int k_indices[] = mapBack(m_InstancesTemplates[m],i_m); // e.g., [3,8] // Vote with classification for (int i : k_indices) { int index = kMap[m][i]; y[index] += 1.; } } return y; }
@Override public String [] getOptions() { List<String> result = new ArrayList<>(); OptionUtils.add(result, 'k', getK()); OptionUtils.add(result, super.getOptions()); return OptionUtils.toArray(result); }
@Override public String [] getOptions() { List<String> result = new ArrayList<>(); OptionUtils.add(result, 'M', getM()); OptionUtils.add(result, super.getOptions()); return OptionUtils.toArray(result); }
@Override public Enumeration listOptions() { Vector result = new Vector(); result.addElement(new Option("\t"+kTipText(), "k", 1, "-k <num>")); OptionUtils.add(result, super.listOptions()); return OptionUtils.toEnumeration(result); }
@Override public void buildClassifier(Instances D) throws Exception { int L = D.classIndex(); int N = D.numInstances(); Random random = new Random(m_S); // Note: a slightly roundabout way of doing it: int num = (int)Math.ceil(L / m_K); kMap = SuperLabelUtils.generatePartition(A.make_sequence(L),num,random,true); m_M = kMap.length; m_Classifiers = AbstractClassifier.makeCopies(m_Classifier,m_M); m_InstancesTemplates = new Instances[m_M]; if (getDebug()) System.out.println("Building "+m_M+" models of "+m_K+" partitions:"); for(int i = 0; i < m_M; i++) { if (getDebug()) System.out.println("\tpartitioning model "+(i+1)+"/"+m_M+": "+Arrays.toString(kMap[i])+", P="+m_P+", N="+m_N); Instances D_i = SuperLabelUtils.makePartitionDataset(D,kMap[i],m_P,m_N); if (getDebug()) System.out.println("\tbuilding model "+(i+1)+"/"+m_M+": "+Arrays.toString(kMap[i])); m_Classifiers[i].buildClassifier(D_i); m_InstancesTemplates[i] = new Instances(D_i,0); } }
@Override public double[] distributionForInstance(Instance x) throws Exception { int L = x.classIndex(); // If there is only one label, predict it //if(L == 1) return new double[]{1.0}; double y[] = new double[L]; //int c[] = new int[L]; // to scale it between 0 and 1 for(int m = 0; m < m_M; m++) { // Transform instance Instance x_m = PSUtils.convertInstance(x, L, m_InstancesTemplates[m]); x_m.setDataset(m_InstancesTemplates[m]); // Get a meta classification int i_m = (int)m_Classifiers[m].classifyInstance(x_m); // e.g., 2 int k_indices[] = mapBack(m_InstancesTemplates[m],i_m); // e.g., [3,8] // Vote with classification for (int i : k_indices) { int index = kMap[m][i]; y[index] += 1.; } } return y; }
public static void main(String args[]) { ProblemTransformationMethod.evaluation(new RAkELd(), args); }
@Override public void setOptions(String[] options) throws Exception { setK(OptionUtils.parse(options, 'k', 3)); super.setOptions(options); }
@Override public Enumeration listOptions() { Vector result = new Vector(); result.addElement(new Option("\tSets M (default 10): the number of subsets", "M", 1, "-M <num>")); OptionUtils.add(result, super.listOptions()); return OptionUtils.toEnumeration(result); }