List of usage examples for weka.core Instances attribute
publicAttribute attribute(String name)
From source file:myid3andc45classifier.Model.MyC45.java
private Instances convertInstances(Instances data, Attribute att, double threshold) { Instances newData = new Instances(data); int idx = att.index(); String name = att.name();/*from w ww.j a va 2 s. com*/ try { Add filter = new Add(); //filter.setAttributeIndex((idx + 2) + ""); filter.setNominalLabels("<=" + threshold + ",>" + threshold); filter.setAttributeName(name + " " + threshold); filter.setInputFormat(newData); newData = Filter.useFilter(newData, filter); } catch (Exception e) { e.printStackTrace(); } //System.out.println("Base attribute "+name+" index "+newData.attribute(name).index()); //System.out.println("New attribute "+newData.attribute(name + " " + threshold).name()+" index "+newData.attribute(name + " " + threshold).index()); for (int i = 0; i < newData.numInstances(); ++i) { if ((double) newData.instance(i).value(newData.attribute(idx)) <= threshold) { newData.instance(i).setValue(newData.attribute(name + " " + threshold), "<=" + threshold); } else { newData.instance(i).setValue(newData.attribute(name + " " + threshold), ">" + threshold); } } //newData.deleteAttributeAt(att.index()); return newData; }
From source file:myid3andc45classifier.Model.MyID3.java
public void makeMyID3Tree(Instances data) throws Exception { // Mengecek apakah tidak terdapat instance yang dalam node ini if (data.numInstances() == 0) { attribute = null;/*from w ww . j a v a 2 s . c om*/ classValue = Instance.missingValue(); return; } // Compute attribute with maximum information gain. double[] infoGains = new double[data.numAttributes()]; Enumeration attEnum = data.enumerateAttributes(); while (attEnum.hasMoreElements()) { Attribute att = (Attribute) attEnum.nextElement(); infoGains[att.index()] = computeInfoGain(data, att); } attribute = data.attribute(maxIndex(infoGains)); // Make leaf if information gain is zero. // Otherwise create successors. if (isDoubleEqual(infoGains[attribute.index()], 0)) { attribute = null; double[] numClasses = new double[data.numClasses()]; Enumeration instEnum = data.enumerateInstances(); while (instEnum.hasMoreElements()) { Instance inst = (Instance) instEnum.nextElement(); numClasses[(int) inst.classValue()]++; } label = maxIndex(numClasses); classAttribute = data.classAttribute(); } else { Instances[] splitData = splitInstancesByAttribute(data, attribute); successors = new MyID3[attribute.numValues()]; for (int j = 0; j < attribute.numValues(); j++) { successors[j] = new MyID3(); successors[j].buildClassifier(splitData[j]); } } }
From source file:myJ48.MyJ48.java
/** * Construct the tree using the given instance * Find the highest attribute value which best at dividing the data * @param data Instance/* w w w . ja v a2 s .c om*/ */ public void buildTree(Instances data) throws Exception { if (data.numInstances() > 0) { // Lets find the highest Information Gain! // First compute each information gain attribute double IG[] = new double[data.numAttributes()]; Enumeration enumAttribute = data.enumerateAttributes(); while (enumAttribute.hasMoreElements()) { Attribute attribute = (Attribute) enumAttribute.nextElement(); IG[attribute.index()] = informationGain(data, attribute); // System.out.println(attribute.toString() + ": " + IG[attribute.index()]); } // Assign it as the tree attribute! currentAttribute = data.attribute(maxIndex(IG)); //System.out.println(Arrays.toString(IG) + IG[currentAttribute.index()]); // IG = 0 then current node = leaf! if (Utils.eq(IG[currentAttribute.index()], 0)) { // Set the class value as the highest frequency of the class currentAttribute = null; classDistribution = new double[data.numClasses()]; Enumeration enumInstance = data.enumerateInstances(); while (enumInstance.hasMoreElements()) { Instance temp = (Instance) enumInstance.nextElement(); classDistribution[(int) temp.classValue()]++; } Utils.normalize(classDistribution); classValue = Utils.maxIndex(classDistribution); classAttribute = data.classAttribute(); } else { // Create another node from the current tree Instances[] splitData = splitDataByAttribute(data, currentAttribute); nodes = new MyJ48[currentAttribute.numValues()]; for (int i = 0; i < currentAttribute.numValues(); i++) { nodes[i] = new MyJ48(this); nodes[i].buildTree(splitData[i]); } } } else { classAttribute = null; classValue = Utils.missingValue(); classDistribution = new double[data.numClasses()]; } }
From source file:myJ48.MyJ48.java
public Instances NumericToNominal(Instances numericSet) throws Exception { //TODO: cek atribut numerik double maxIG, curIG; int maxIdx;// w w w. j a va2 s.c o m for (int i = 0; i < numericSet.numAttributes(); i++) { //System.out.println(numericSet.attribute(i).name()); Instances tempSet; if (numericSet.attribute(i).isNumeric()) { //System.out.println("is numeric"); maxIG = 0; maxIdx = 0; //Instances[] NominalizedSets = new Instances[numericSet.numInstances()]; for (int ix = 0; ix < numericSet.numInstances(); ix++) { tempSet = NumericToNominalByThreshold(numericSet, i, numericSet.instance(ix).value(i)); curIG = informationGain(tempSet, tempSet.attribute(i)); if (maxIG < curIG) { maxIG = curIG; maxIdx = ix; } } numericSet = NumericToNominalByThreshold(numericSet, i, numericSet.instance(maxIdx).value(i)); // System.out.println("Nominalized by attribute " + numericSet.attribute(i).name() + " :\n" + numericSet.toString()); // System.out.println("max index: "+ maxIdx); // System.out.println("max IG: " + informationGain(numericSet, numericSet.attribute(i))); } } return numericSet; }
From source file:myJ48.MyJ48.java
public Instances NumericToNominalByThreshold(Instances numericSet, int idx_attribute, double threshold) throws Exception { double[] values; Instances NominalizedSet = new Instances(numericSet); //System.out.println("number of instances: " + NominalizedSet.numInstances()); values = numericSet.attributeToDoubleArray(idx_attribute); List<String> nominalValue = new ArrayList<String>(); nominalValue.add("low"); nominalValue.add("high"); Attribute nominalAttrib = new Attribute(numericSet.attribute(idx_attribute).name() + "_nominal", nominalValue);/*from w w w . j a va 2s. co m*/ NominalizedSet.insertAttributeAt(nominalAttrib, idx_attribute); for (int i = 0; i < values.length; i++) { if (values[i] <= threshold) { NominalizedSet.instance(i).setValue(idx_attribute, "low"); } else { NominalizedSet.instance(i).setValue(idx_attribute, "high"); } } String[] options = { "-R", String.valueOf(idx_attribute + 2) }; Filter remove = (Filter) Class.forName("weka.filters.unsupervised.attribute.Remove").newInstance(); ((OptionHandler) remove).setOptions(options); remove.setInputFormat(NominalizedSet); NominalizedSet = Filter.useFilter(NominalizedSet, remove); return NominalizedSet; }
From source file:NaiveBayes.Atribut.java
public Atribut(Instances ints, int i, int classindex) throws Exception { if (ints.attribute(i).isNumeric()) { Instances newData = new Instances(ints); Discretize f = new Discretize(); f.setInputFormat(newData);/*from www . j a v a 2 s . c o m*/ newData = Filter.useFilter(newData, f); name = ints.attribute(i).name(); listNilai = new ArrayList<>(); for (int j = 0; j < newData.attribute(i).numValues(); j++) { listNilai.add(new Nilai(ints, i, j, classindex)); } } else { name = ints.attribute(i).name().replaceAll("\\s+", ""); // System.out.println(name); listNilai = new ArrayList<>(); for (int j = 0; j < ints.attribute(i).numValues(); j++) { listNilai.add(new Nilai(ints, i, j, classindex)); } } }
From source file:NaiveBayes.NaiveBayes.java
/** * @param args the command line arguments * @throws java.io.IOException//from w w w .j ava 2s . c o m */ public static void main(String[] args) throws IOException, Exception { System.out.print("1. Buat Model \n"); System.out.print("2. Load Model\n"); System.out.print("Masukkan pilihan : "); Scanner sc = new Scanner(System.in); int pil = sc.nextInt(); System.out.print("Masukkan nama file : "); String filename = sc.next(); DataSource source = new DataSource(("D:\\Program Files\\Weka-3-8\\data\\" + filename)); Instances train = source.getDataSet(); for (int i = 0; i < train.numAttributes(); i++) System.out.println(i + ". " + train.attribute(i).name()); System.out.print("Masukkan indeks kelas : "); int classIdx = sc.nextInt(); train.setClassIndex(classIdx); // MultilayerPerceptron mlp = new MultilayerPerceptron(train, 0.1, 10000, 14); // mlp.buildClassifier(train); // Evaluation eval = new Evaluation (train); //// eval.evaluateModel(mlp, train); // System.out.println(eval.toSummaryString()); NaiveBayes tb = new NaiveBayes(); Evaluation eval = new Evaluation(train); switch (pil) { case 1: // tb.buildClassifier(train); // tb.toSummaryString(); // eval.evaluateModel(tb, train); eval.crossValidateModel(tb, train, 10, new Random(1)); System.out.println(eval.toSummaryString(true)); System.out.println(eval.toMatrixString()); //saveModel(tb); break; default: tb = loadModel(); tb.toSummaryString(); eval.crossValidateModel(tb, train, 10, new Random(1)); System.out.println(eval.toSummaryString()); // System.out.println(eval.toMatrixString()); } }
From source file:NaiveBayes.NaiveBayes.java
public static int[] getNumEachClass(Instances ins) { int[] countEachClass = new int[ins.numClasses()]; for (int i = 0; i < ins.numClasses(); i++) { int cnt = 0; for (int j = 0; j < ins.numInstances(); j++) { if (ins.attribute(ins.classIndex()).value(i) .equals(ins.get(j).toString(ins.classIndex()).replaceAll("\\s+", ""))) cnt++;/*from w w w. j av a 2 s. c o m*/ } countEachClass[i] = cnt; } return countEachClass; }
From source file:NaiveBayes.NaiveBayes.java
public String classify(Instances init) { int nAttributes = init.numAttributes(); Instance ins = new DenseInstance(nAttributes); Instances newData = init;/*from w w w .jav a 2 s. c om*/ Scanner s = new Scanner(System.in); Double in; System.out.println("Jumlah Atribut : " + (nAttributes - 1)); for (int i = 1; i <= nAttributes - 1; i++) { //Attribute a = train.attribute(i - 1); System.out.print("Attribute " + i + " : "); in = s.nextDouble(); ins.setValue(i, in); //newIns[i] = in; } newData.add(ins); double nomorKelas = classifyInstance(newData.lastInstance()); return init.attribute(init.numAttributes() - 1).value((int) nomorKelas); }
From source file:naivebayes.NBRun.java
public static void main(String[] args) throws Exception { System.out.println("Naive Bayes Classifier"); Instances data = TucilWeka.readDataSet("C:\\Program Files\\Weka-3-8\\data\\mush_test.arff"); Scanner scan = new Scanner(System.in); Classifier cls;// www. ja v a2s . c o m Instances train = TucilWeka.readDataSet("C:\\Program Files\\Weka-3-8\\data\\mush.arff"); System.out.println("Read or create model? r/c"); if (scan.next().equals("c")) { cls = new NBTubesAI(); cls.buildClassifier(train); TucilWeka.saveModel(train); } else { cls = (NBTubesAI) TucilWeka.readModel(); } Evaluation eval = new Evaluation(data); System.out.println("10 fold cross validate or Full train? c/f"); if (scan.next().equals("c")) { int fold = 10; for (int i = 0; i < data.numAttributes(); i++) { System.out.println(i + ". " + data.attribute(i)); } eval.crossValidateModel(cls, data, fold, new Random(1)); } else { for (int i = 0; i < data.numAttributes(); i++) { System.out.println(i + ". " + data.attribute(i)); } data.deleteWithMissingClass(); try { eval.evaluateModel(cls, data); } catch (java.lang.Exception ex) { eval.crossValidateModel(cls, data, 11, new Random(1)); } } // Classifier cls=new NBTubesAI(); // cls.buildClassifier(data); System.out.println("Hasil evaluasi: "); System.out.println(eval.toSummaryString()); System.out.println(eval.toMatrixString()); System.out.println(eval.toClassDetailsString()); }