/// <summary> /// Adds teta results of gini results to the list /// Change the attributes of the arff file /// Adds the attributes to arff file /// </summary> /// <param name="insts"></param> /// <param name="result"></param> /// <param name="path"></param> private void CreateNewDataset(weka.core.Instances insts, List <double[]> result, string path) { //Tetaları Listeye Ekle List <List <string> > lst = new List <List <string> >(); for (int i = 0; i < insts.numInstances(); i++) { lst.Add(new List <string>()); for (int j = 0; j < insts.instance(i).numValues() - 1; j++) { string value = insts.instance(i).toString(j); for (int k = 0; k < categories[j].Length; k++) { if (insts.instance(i).toString(j) == categories[j][k]) { lst[lst.Count - 1].Add(String.Format("{0:0.00}", result[j][k])); break; } } } } //Attiribute Değiştir for (int i = 0; i < insts.numAttributes() - 1; i++) { string name = insts.attribute(i).name().ToString(); insts.deleteAttributeAt(i); weka.core.Attribute att = new weka.core.Attribute(name); insts.insertAttributeAt(att, i); } //Attiributeları yaz for (int i = 0; i < insts.numInstances(); i++) { for (int j = 0; j < insts.instance(i).numValues() - 1; j++) { insts.instance(i).setValue(j, Convert.ToDouble(lst[i][j])); } } if (File.Exists(path)) { File.Delete(path); } var saver = new ArffSaver(); saver.setInstances(insts); saver.setFile(new java.io.File(path)); saver.writeBatch(); }
/// <summary> Method for testing this class. /// /// </summary> /// <param name="argv">should contain one element: the name of an ARFF file /// </param> //@ requires argv != null; //@ requires argv.length == 1; //@ requires argv[0] != null; public static void test(System.String[] argv) { Instances instances, secondInstances, train, test, empty; //Instance instance; //UPGRADE_TODO: The differences in the expected value of parameters for constructor 'java.util.Random.Random' may cause compilation errors. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1092'" System.Random random = new System.Random((System.Int32) 2); //UPGRADE_ISSUE: Class hierarchy differences between 'java.io.Reader' and 'System.IO.StreamReader' may cause compilation errors. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1186'" System.IO.StreamReader reader; int start, num; //double newWeight; FastVector testAtts, testVals; int i, j; try { if (argv.Length > 1) { throw (new System.Exception("Usage: Instances [<filename>]")); } // Creating set of instances from scratch testVals = new FastVector(2); testVals.addElement("first_value"); testVals.addElement("second_value"); testAtts = new FastVector(2); testAtts.addElement(new Attribute("nominal_attribute", testVals)); testAtts.addElement(new Attribute("numeric_attribute")); instances = new Instances("test_set", testAtts, 10); instances.add(new Instance(instances.numAttributes())); instances.add(new Instance(instances.numAttributes())); instances.add(new Instance(instances.numAttributes())); instances.ClassIndex = 0; System.Console.Out.WriteLine("\nSet of instances created from scratch:\n"); //UPGRADE_TODO: Method 'java.io.PrintStream.println' was converted to 'System.Console.Out.WriteLine' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javaioPrintStreamprintln_javalangObject'" System.Console.Out.WriteLine(instances); if (argv.Length == 1) { System.String filename = argv[0]; //UPGRADE_TODO: Constructor 'java.io.FileReader.FileReader' was converted to 'System.IO.StreamReader' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073'" reader = new System.IO.StreamReader(filename, System.Text.Encoding.Default); // Read first five instances and print them System.Console.Out.WriteLine("\nFirst five instances from file:\n"); instances = new Instances(reader, 1); instances.ClassIndex = instances.numAttributes() - 1; i = 0; while ((i < 5) && (instances.readInstance(reader))) { i++; } //UPGRADE_TODO: Method 'java.io.PrintStream.println' was converted to 'System.Console.Out.WriteLine' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javaioPrintStreamprintln_javalangObject'" System.Console.Out.WriteLine(instances); // Read all the instances in the file //UPGRADE_TODO: Constructor 'java.io.FileReader.FileReader' was converted to 'System.IO.StreamReader' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073'" reader = new System.IO.StreamReader(filename, System.Text.Encoding.Default); instances = new Instances(reader); // Make the last attribute be the class instances.ClassIndex = instances.numAttributes() - 1; // Print header and instances. System.Console.Out.WriteLine("\nDataset:\n"); //UPGRADE_TODO: Method 'java.io.PrintStream.println' was converted to 'System.Console.Out.WriteLine' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javaioPrintStreamprintln_javalangObject'" System.Console.Out.WriteLine(instances); System.Console.Out.WriteLine("\nClass index: " + instances.classIndex()); } // Test basic methods based on class index. System.Console.Out.WriteLine("\nClass name: " + instances.classAttribute().name()); System.Console.Out.WriteLine("\nClass index: " + instances.classIndex()); System.Console.Out.WriteLine("\nClass is nominal: " + instances.classAttribute().Nominal); System.Console.Out.WriteLine("\nClass is numeric: " + instances.classAttribute().Numeric); System.Console.Out.WriteLine("\nClasses:\n"); for (i = 0; i < instances.numClasses(); i++) { System.Console.Out.WriteLine(instances.classAttribute().value_Renamed(i)); } System.Console.Out.WriteLine("\nClass values and labels of instances:\n"); for (i = 0; i < instances.numInstances(); i++) { Instance inst = instances.instance(i); System.Console.Out.Write(inst.classValue() + "\t"); System.Console.Out.Write(inst.toString(inst.classIndex())); if (instances.instance(i).classIsMissing()) { System.Console.Out.WriteLine("\tis missing"); } else { System.Console.Out.WriteLine(); } } // Create random weights. System.Console.Out.WriteLine("\nCreating random weights for instances."); for (i = 0; i < instances.numInstances(); i++) { instances.instance(i).Weight = random.NextDouble(); } // Print all instances and their weights (and the sum of weights). System.Console.Out.WriteLine("\nInstances and their weights:\n"); System.Console.Out.WriteLine(instances.instancesAndWeights()); System.Console.Out.Write("\nSum of weights: "); System.Console.Out.WriteLine(instances.sumOfWeights()); // Insert an attribute secondInstances = new Instances(instances); Attribute testAtt = new Attribute("Inserted"); secondInstances.insertAttributeAt(testAtt, 0); System.Console.Out.WriteLine("\nSet with inserted attribute:\n"); //UPGRADE_TODO: Method 'java.io.PrintStream.println' was converted to 'System.Console.Out.WriteLine' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javaioPrintStreamprintln_javalangObject'" System.Console.Out.WriteLine(secondInstances); System.Console.Out.WriteLine("\nClass name: " + secondInstances.classAttribute().name()); // Delete the attribute secondInstances.deleteAttributeAt(0); System.Console.Out.WriteLine("\nSet with attribute deleted:\n"); //UPGRADE_TODO: Method 'java.io.PrintStream.println' was converted to 'System.Console.Out.WriteLine' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javaioPrintStreamprintln_javalangObject'" System.Console.Out.WriteLine(secondInstances); System.Console.Out.WriteLine("\nClass name: " + secondInstances.classAttribute().name()); // Test if headers are equal System.Console.Out.WriteLine("\nHeaders equal: " + instances.equalHeaders(secondInstances) + "\n"); // Print data in internal format. System.Console.Out.WriteLine("\nData (internal values):\n"); for (i = 0; i < instances.numInstances(); i++) { for (j = 0; j < instances.numAttributes(); j++) { if (instances.instance(i).isMissing(j)) { System.Console.Out.Write("? "); } else { System.Console.Out.Write(instances.instance(i).value_Renamed(j) + " "); } } System.Console.Out.WriteLine(); } // Just print header System.Console.Out.WriteLine("\nEmpty dataset:\n"); empty = new Instances(instances, 0); //UPGRADE_TODO: Method 'java.io.PrintStream.println' was converted to 'System.Console.Out.WriteLine' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javaioPrintStreamprintln_javalangObject'" System.Console.Out.WriteLine(empty); System.Console.Out.WriteLine("\nClass name: " + empty.classAttribute().name()); // Create copy and rename an attribute and a value (if possible) if (empty.classAttribute().Nominal) { Instances copy = new Instances(empty, 0); copy.renameAttribute(copy.classAttribute(), "new_name"); copy.renameAttributeValue(copy.classAttribute(), copy.classAttribute().value_Renamed(0), "new_val_name"); System.Console.Out.WriteLine("\nDataset with names changed:\n" + copy); System.Console.Out.WriteLine("\nOriginal dataset:\n" + empty); } // Create and prints subset of instances. start = instances.numInstances() / 4; num = instances.numInstances() / 2; System.Console.Out.Write("\nSubset of dataset: "); System.Console.Out.WriteLine(num + " instances from " + (start + 1) + ". instance"); secondInstances = new Instances(instances, start, num); System.Console.Out.WriteLine("\nClass name: " + secondInstances.classAttribute().name()); // Print all instances and their weights (and the sum of weights). System.Console.Out.WriteLine("\nInstances and their weights:\n"); System.Console.Out.WriteLine(secondInstances.instancesAndWeights()); System.Console.Out.Write("\nSum of weights: "); System.Console.Out.WriteLine(secondInstances.sumOfWeights()); // Create and print training and test sets for 3-fold // cross-validation. System.Console.Out.WriteLine("\nTrain and test folds for 3-fold CV:"); if (instances.classAttribute().Nominal) { instances.stratify(3); } for (j = 0; j < 3; j++) { //UPGRADE_TODO: The differences in the expected value of parameters for constructor 'java.util.Random.Random' may cause compilation errors. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1092'" train = instances.trainCV(3, j, new System.Random((System.Int32) 1)); test = instances.testCV(3, j); // Print all instances and their weights (and the sum of weights). System.Console.Out.WriteLine("\nTrain: "); System.Console.Out.WriteLine("\nInstances and their weights:\n"); System.Console.Out.WriteLine(train.instancesAndWeights()); System.Console.Out.Write("\nSum of weights: "); System.Console.Out.WriteLine(train.sumOfWeights()); System.Console.Out.WriteLine("\nClass name: " + train.classAttribute().name()); System.Console.Out.WriteLine("\nTest: "); System.Console.Out.WriteLine("\nInstances and their weights:\n"); System.Console.Out.WriteLine(test.instancesAndWeights()); System.Console.Out.Write("\nSum of weights: "); System.Console.Out.WriteLine(test.sumOfWeights()); System.Console.Out.WriteLine("\nClass name: " + test.classAttribute().name()); } // Randomize instances and print them. System.Console.Out.WriteLine("\nRandomized dataset:"); instances.randomize(random); // Print all instances and their weights (and the sum of weights). System.Console.Out.WriteLine("\nInstances and their weights:\n"); System.Console.Out.WriteLine(instances.instancesAndWeights()); System.Console.Out.Write("\nSum of weights: "); System.Console.Out.WriteLine(instances.sumOfWeights()); // Sort instances according to first attribute and // print them. System.Console.Out.Write("\nInstances sorted according to first attribute:\n "); instances.sort(0); // Print all instances and their weights (and the sum of weights). System.Console.Out.WriteLine("\nInstances and their weights:\n"); System.Console.Out.WriteLine(instances.instancesAndWeights()); System.Console.Out.Write("\nSum of weights: "); System.Console.Out.WriteLine(instances.sumOfWeights()); } catch (System.Exception) { //.WriteStackTrace(e, Console.Error); } }
/// <summary> Builds the boosted classifier</summary> public virtual void buildClassifier(Instances data) { m_RandomInstance = new Random(m_Seed); Instances boostData; int classIndex = data.classIndex(); if (data.classAttribute().Numeric) { throw new Exception("LogitBoost can't handle a numeric class!"); } if (m_Classifier == null) { throw new System.Exception("A base classifier has not been specified!"); } if (!(m_Classifier is WeightedInstancesHandler) && !m_UseResampling) { m_UseResampling = true; } if (data.checkForStringAttributes()) { throw new Exception("Cannot handle string attributes!"); } if (m_Debug) { System.Console.Error.WriteLine("Creating copy of the training data"); } m_NumClasses = data.numClasses(); m_ClassAttribute = data.classAttribute(); // Create a copy of the data data = new Instances(data); data.deleteWithMissingClass(); // Create the base classifiers if (m_Debug) { System.Console.Error.WriteLine("Creating base classifiers"); } m_Classifiers = new Classifier[m_NumClasses][]; for (int j = 0; j < m_NumClasses; j++) { m_Classifiers[j] = Classifier.makeCopies(m_Classifier, this.NumIterations); } // Do we want to select the appropriate number of iterations // using cross-validation? int bestNumIterations = this.NumIterations; if (m_NumFolds > 1) { if (m_Debug) { System.Console.Error.WriteLine("Processing first fold."); } // Array for storing the results double[] results = new double[this.NumIterations]; // Iterate throught the cv-runs for (int r = 0; r < m_NumRuns; r++) { // Stratify the data data.randomize(m_RandomInstance); data.stratify(m_NumFolds); // Perform the cross-validation for (int i = 0; i < m_NumFolds; i++) { // Get train and test folds Instances train = data.trainCV(m_NumFolds, i, m_RandomInstance); Instances test = data.testCV(m_NumFolds, i); // Make class numeric Instances trainN = new Instances(train); trainN.ClassIndex = - 1; trainN.deleteAttributeAt(classIndex); trainN.insertAttributeAt(new weka.core.Attribute("'pseudo class'"), classIndex); trainN.ClassIndex = classIndex; m_NumericClassData = new Instances(trainN, 0); // Get class values int numInstances = train.numInstances(); double[][] tmpArray = new double[numInstances][]; for (int i2 = 0; i2 < numInstances; i2++) { tmpArray[i2] = new double[m_NumClasses]; } double[][] trainFs = tmpArray; double[][] tmpArray2 = new double[numInstances][]; for (int i3 = 0; i3 < numInstances; i3++) { tmpArray2[i3] = new double[m_NumClasses]; } double[][] trainYs = tmpArray2; for (int j = 0; j < m_NumClasses; j++) { for (int k = 0; k < numInstances; k++) { trainYs[k][j] = (train.instance(k).classValue() == j)?1.0 - m_Offset:0.0 + (m_Offset / (double) m_NumClasses); } } // Perform iterations double[][] probs = initialProbs(numInstances); m_NumGenerated = 0; double sumOfWeights = train.sumOfWeights(); for (int j = 0; j < this.NumIterations; j++) { performIteration(trainYs, trainFs, probs, trainN, sumOfWeights); Evaluation eval = new Evaluation(train); eval.evaluateModel(this, test); results[j] += eval.correct(); } } } // Find the number of iterations with the lowest error //UPGRADE_TODO: The equivalent in .NET for field 'java.lang.Double.MAX_VALUE' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'" double bestResult = - System.Double.MaxValue; for (int j = 0; j < this.NumIterations; j++) { if (results[j] > bestResult) { bestResult = results[j]; bestNumIterations = j; } } if (m_Debug) { System.Console.Error.WriteLine("Best result for " + bestNumIterations + " iterations: " + bestResult); } } // Build classifier on all the data int numInstances2 = data.numInstances(); double[][] trainFs2 = new double[numInstances2][]; for (int i4 = 0; i4 < numInstances2; i4++) { trainFs2[i4] = new double[m_NumClasses]; } double[][] trainYs2 = new double[numInstances2][]; for (int i5 = 0; i5 < numInstances2; i5++) { trainYs2[i5] = new double[m_NumClasses]; } for (int j = 0; j < m_NumClasses; j++) { for (int i = 0, k = 0; i < numInstances2; i++, k++) { trainYs2[i][j] = (data.instance(k).classValue() == j)?1.0 - m_Offset:0.0 + (m_Offset / (double) m_NumClasses); } } // Make class numeric data.ClassIndex = - 1; data.deleteAttributeAt(classIndex); data.insertAttributeAt(new weka.core.Attribute("'pseudo class'"), classIndex); data.ClassIndex = classIndex; m_NumericClassData = new Instances(data, 0); // Perform iterations double[][] probs2 = initialProbs(numInstances2); double logLikelihood = CalculateLogLikelihood(trainYs2, probs2); m_NumGenerated = 0; if (m_Debug) { System.Console.Error.WriteLine("Avg. log-likelihood: " + logLikelihood); } double sumOfWeights2 = data.sumOfWeights(); for (int j = 0; j < bestNumIterations; j++) { double previousLoglikelihood = logLikelihood; performIteration(trainYs2, trainFs2, probs2, data, sumOfWeights2); logLikelihood = CalculateLogLikelihood(trainYs2, probs2); if (m_Debug) { System.Console.Error.WriteLine("Avg. log-likelihood: " + logLikelihood); } if (System.Math.Abs(previousLoglikelihood - logLikelihood) < m_Precision) { return ; } } }