public static Instances RemoveClassAttribute(Instances origInstances) { var filter = new weka.filters.unsupervised.attribute.Remove(); filter.setOptions(weka.core.Utils.splitOptions(string.Format("-R {0}", origInstances.classIndex() + 1))); filter.setInputFormat(origInstances); Instances newInstances = weka.filters.Filter.useFilter(origInstances, filter); return(newInstances); }
//uses a 'Remove' filter public static Instances useRemoveFilter(Instances data, int[] topIGFeatures, bool invert) { weka.filters.unsupervised.attribute.Remove filter = new weka.filters.unsupervised.attribute.Remove(); filter.setAttributeIndicesArray(topIGFeatures); filter.setInvertSelection(invert); filter.setInputFormat(data); Instances newData = Filter.useFilter(data, filter); return(newData); }
//public object Clone() { // MemoryStream ms = new MemoryStream(500000000); // System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = // new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(null, // new System.Runtime.Serialization.StreamingContext(System.Runtime.Serialization.StreamingContextStates.Clone)); // bf.Serialize(ms, this); // ms.Seek(0, SeekOrigin.Begin); // object obj = bf.Deserialize(ms); // ms.Close(); // return obj; //} public void train(bool LoadingFromFile) { if (!LoadingFromFile) { DisplayMessage("Begin training on Efigi galaxies..."); Console.Write("Begin training on Efigi galaxies..."); } else { DisplayImage(0); DisplayMessage("Load from file..."); Console.Write("Load from file..."); frV = new GeneralMatrix(ReadFVMatrix(0)); fgV = new GeneralMatrix(ReadFVMatrix(1)); fbV = new GeneralMatrix(ReadFVMatrix(2)); } weka.classifiers.trees.M5P tree = new weka.classifiers.trees.M5P(); String[] options = new String[1]; weka.core.converters.ConverterUtils.DataSource source = new weka.core.converters.ConverterUtils.DataSource(OutputDir + "Results/" + "resultsGalaxy.arff"); data = source.getDataSet(); if (data == null) { DisplayMessage("Cannot load from file."); throw new Exception("Arff File not valid"); } data.setClassIndex(0); tree.buildClassifier(data); StreamWriter output = new StreamWriter(OutputDir + "Results/" + "classification.txt"); rmse = 0.0; int classifiedCount = 0; weka.filters.unsupervised.attribute.Remove rm = new weka.filters.unsupervised.attribute.Remove(); rm.setInputFormat(data); fc = new FilteredClassifier(); fc.setFilter(rm); fc.setClassifier(tree); for (int i = 0; i < data.numInstances(); i++) { int classPrediction = (int)Math.Round(fc.classifyInstance(data.instance(i))); if (classPrediction < -6) { classPrediction = -6; } else if (classPrediction > 11) { classPrediction = 11; } int actualClass = (int)Math.Round(data.instance(i).classValue()); int error = Math.Abs(classPrediction - actualClass); rmse += error * error; classifiedCount++; output.WriteLine("\n" + classPrediction + ", " + error); if (i % 10 == 0 && !LoadingFromFile) DisplayImage(i); } rmse = Math.Sqrt(rmse / classifiedCount); output.WriteLine("\nRMSE: " + rmse); DisplayMessage("RMSE: " + rmse); output.Flush(); output.Close(); output.Dispose(); readyToClassify = true; Console.WriteLine("Finished training on Efigi galaxies; RMSE: " + rmse.ToString()); }