private void applyClassificationModelToolStripMenuItem_Click(object sender, EventArgs e) { return; Instances ListInstancesTOClassify = GlobalInfo.CurrentScreen.CellBasedClassification.CreateInstancesWithoutClass(dt); FastVector attVals = new FastVector(); for (int i = 0; i < GlobalInfo.CurrentScreen.CellBasedClassification.NumClasses; i++) attVals.addElement(i.ToString()); ListInstancesTOClassify.insertAttributeAt(new weka.core.Attribute("Class", attVals), ListInstancesTOClassify.numAttributes()); ListInstancesTOClassify.setClassIndex(ListInstancesTOClassify.numAttributes() - 1); List<int> ListIdx = new List<int>(); int Max = int.MinValue; int Min = int.MaxValue; for (int i = 0; i < ListInstancesTOClassify.numInstances(); i++) { Instance InstToProcess = ListInstancesTOClassify.instance(i); int Value =(int)GlobalInfo.CurrentScreen.CellBasedClassification.J48Model.classifyInstance(InstToProcess); if (Value > Max) Max = Value; if (Value < Min) Min = Value; ListIdx.Add(Value); } byte[][] LUT = GlobalInfo.LUT; for (int j = 0; j < this.chartForPoints.Series[0].Points.Count; j++) { int ConvertedValue = (int)(((ListIdx[j] - Min) * (LUT[0].Length - 1)) / (Max - Min)); this.chartForPoints.Series[0].Points[j].MarkerColor = Color.FromArgb(LUT[0][ConvertedValue], LUT[1][ConvertedValue], LUT[2][ConvertedValue]); } }
public Identifier(Boolean isAnnotated, WhatWhyTrainer wwt) { this.isAnnotated = isAnnotated; this.wwt = wwt; listWhoCandidates = new List<Candidate>(); listWhenCandidates = new List<Candidate>(); listWhereCandidates = new List<Candidate>(); listWhatCandidates = new List<List<Token>>(); listWhyCandidates = new List<List<Token>>(); listSecondaryWhatCandidates = new List<Candidate>(); listSecondaryWhyCandidates = new List<Candidate>(); fvPOS = new FastVector(Token.PartOfSpeechTags.Length); foreach (String POS in Token.PartOfSpeechTags) { fvPOS.addElement(POS); } whoClassifier = (Classifier)SerializationHelper.read(@"..\..\IdentifierModels\who.model"); whenClassifier = (Classifier)SerializationHelper.read(@"..\..\IdentifierModels\when.model"); whereClassifier = (Classifier)SerializationHelper.read(@"..\..\IdentifierModels\where.model"); //whatClassifier = (Classifier)SerializationHelper.read(@"..\..\IdentifierModels\what.model"); //whyClassifier = (Classifier)SerializationHelper.read(@"..\..\IdentifierModels\why.model"); initializeAnnotations(); }
//@ private invariant -1 <= m_SpecialXmlElement; //@ private invariant m_SpecialXmlElement < m_Vector.size(); //@ private invariant m_SpecialXmlElement>=0 ==> m_Counter!=m_SpecialXmlElement; /// <summary> Constructs an enumeration. /// /// </summary> /// <param name="vector">the vector which is to be enumerated /// </param> public FastVectorEnumeration(FastVector vector) { m_Counter = 0; m_Vector = vector; m_SpecialXmlElement = -1; }
/// <summary> Constructs an enumeration with a special element. /// The special element is skipped during the enumeration. /// /// </summary> /// <param name="vector">the vector which is to be enumerated /// </param> /// <param name="special">the index of the special element /// </param> //@ requires 0 <= special && special < vector.size(); public FastVectorEnumeration(FastVector vector, int special) { m_Vector = vector; m_SpecialXmlElement = special; if (special == 0) { m_Counter = 1; } else { m_Counter = 0; } }
public Instances CreateInstancesWithoutClass(cExtendedTable Input) { weka.core.FastVector atts = new FastVector(); int columnNo = 0; // Descriptors loop for (int i = 0; i < Input.Count; i++) { //if (ParentScreening.ListDescriptors[i].IsActive() == false) continue; atts.addElement(new weka.core.Attribute(Input[i].Name)); columnNo++; } // weka.core.FastVector attVals = new FastVector(); Instances data1 = new Instances("MyRelation", atts, 0); for (int IdxRow = 0; IdxRow < Input[0].Count; IdxRow++) { double[] vals = new double[data1.numAttributes()]; for (int Col = 0; Col < columnNo; Col++) { // if (Glo .ListDescriptors[Col].IsActive() == false) continue; vals[Col] = Input[Col][IdxRow];// double.Parse(dt.Rows[IdxRow][Col].ToString()); } data1.add(new DenseInstance(1.0, vals)); } return data1; }
/// <summary> Constructor creating an empty set of instances. Copies references /// to the header information from the given set of instances. Sets /// the capacity of the set of instances to 0 if its negative. /// /// </summary> /// <param name="instances">the instances from which the header /// information is to be taken /// </param> /// <param name="capacity">the capacity of the new dataset /// </param> public Instances(Instances dataset, int capacity) { if (capacity < 0) { capacity = 0; } // Strings only have to be "shallow" copied because // they can't be modified. m_ClassIndex = dataset.m_ClassIndex; m_RelationName = dataset.m_RelationName; m_Attributes = dataset.m_Attributes; m_Instances = new FastVector(capacity); }
/// <summary> /// Create a single instance for WEKA /// </summary> /// <param name="NClasses">Number of classes</param> /// <returns>the weka instances</returns> public Instances CreateInstanceForNClasses(cInfoClass InfoClass) { List<double> AverageList = new List<double>(); for (int i = 0; i < Parent.ListDescriptors.Count; i++) if (Parent.ListDescriptors[i].IsActive()) AverageList.Add(GetAverageValuesList()[i]); weka.core.FastVector atts = new FastVector(); List<string> NameList = Parent.ListDescriptors.GetListNameActives(); for (int i = 0; i < NameList.Count; i++) atts.addElement(new weka.core.Attribute(NameList[i])); weka.core.FastVector attVals = new FastVector(); for (int i = 0; i < InfoClass.NumberOfClass; i++) attVals.addElement("Class" + i); atts.addElement(new weka.core.Attribute("Class__", attVals)); Instances data1 = new Instances("SingleInstance", atts, 0); double[] newTable = new double[AverageList.Count + 1]; Array.Copy(AverageList.ToArray(), 0, newTable, 0, AverageList.Count); //newTable[AverageList.Count] = 1; data1.add(new DenseInstance(1.0, newTable)); data1.setClassIndex((data1.numAttributes() - 1)); return data1; }
/// <summary> Appends all elements of the supplied vector to this vector. /// /// </summary> /// <param name="toAppend">the FastVector containing elements to append. /// </param> public void appendXmlElements(FastVector toAppend) { Capacity = size() + toAppend.size(); Array.Copy(toAppend.m_Objects, 0, m_Objects, size(), toAppend.size()); m_Size = m_Objects.Length; }
/// <summary> Produces a shallow copy of this vector. /// /// </summary> /// <returns> the new vector /// </returns> public System.Object copy() { FastVector copy = new FastVector(m_Objects.Length); copy.m_Size = m_Size; copy.m_CapacityIncrement = m_CapacityIncrement; copy.m_CapacityMultiplier = m_CapacityMultiplier; Array.Copy(m_Objects, 0, copy.m_Objects, 0, m_Size); return copy; }
/// <summary> Split up a string containing options into an array of strings, /// one for each option. /// /// </summary> /// <param name="optionString">the string containing the options /// </param> /// <returns> the array of options /// </returns> public static System.String[] splitOptions(System.String quotedOptionString) { FastVector optionsVec = new FastVector(); System.String str = new System.Text.StringBuilder(quotedOptionString).ToString(); int i; while (true) { //trimLeft i = 0; while ((i < str.Length) && (System.Char.IsWhiteSpace(str[i]))) i++; str = str.Substring(i); //stop when str is empty if (str.Length == 0) break; //if str start with a double quote if (str[0] == '"') { //find the first not anti-slached double quote i = 1; while (i < str.Length) { if (str[i] == str[0]) break; if (str[i] == '\\') { i += 1; if (i >= str.Length) throw new System.Exception("String should not finish with \\"); if (str[i] != '\\' && str[i] != '"') throw new System.Exception("Unknow character \\" + str[i]); } i += 1; } if (i >= str.Length) throw new System.Exception("Quote parse error."); //add the founded string to the option vector (without quotes) System.String optStr = str.Substring(1, (i) - (1)); optStr = unbackQuoteChars(optStr); optionsVec.addElement(optStr); str = str.Substring(i + 1); } else { //find first whiteSpace i = 0; while ((i < str.Length) && (!System.Char.IsWhiteSpace(str[i]))) i++; //add the founded string to the option vector System.String optStr = str.Substring(0, (i) - (0)); optionsVec.addElement(optStr); str = str.Substring(i); } } //convert optionsVec to an array of String System.String[] options = new System.String[optionsVec.size()]; for (i = 0; i < optionsVec.size(); i++) { options[i] = ((System.String) optionsVec.elementAt(i)); } return options; }
/// <summary> Removes all instances with missing values for a particular /// attribute from the dataset. /// /// </summary> /// <param name="attIndex">the attribute's index /// </param> //@ requires 0 <= attIndex && attIndex < numAttributes(); public virtual void deleteWithMissing(int attIndex) { FastVector newInstances = new FastVector(numInstances()); for (int i = 0; i < numInstances(); i++) { if (!instance(i).isMissing(attIndex)) { newInstances.addElement(instance(i)); } } m_Instances = newInstances; }
/// <summary> Removes all instances from the set.</summary> public virtual void delete() { m_Instances = new FastVector(); }
/// <summary> Creates an empty set of instances. Uses the given /// attribute information. Sets the capacity of the set of /// instances to 0 if its negative. Given attribute information /// must not be changed after this constructor has been used. /// /// </summary> /// <param name="name">the name of the relation /// </param> /// <param name="attInfo">the attribute information /// </param> /// <param name="capacity">the capacity of the set /// </param> public Instances(System.String name, FastVector attInfo, int capacity) { m_RelationName = name; m_ClassIndex = - 1; m_Attributes = attInfo; for (int i = 0; i < numAttributes(); i++) { attribute(i).Index = i; } m_Instances = new FastVector(capacity); }
/// <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> Merges two sets of Instances together. The resulting set will have /// all the attributes of the first set plus all the attributes of the /// second set. The number of instances in both sets must be the same. /// /// </summary> /// <param name="first">the first set of Instances /// </param> /// <param name="second">the second set of Instances /// </param> /// <returns> the merged set of Instances /// </returns> /// <exception cref="IllegalArgumentException">if the datasets are not the same size /// </exception> public static Instances mergeInstances(Instances first, Instances second) { if (first.numInstances() != second.numInstances()) { throw new System.ArgumentException("Instance sets must be of the same size"); } // Create the vector of merged attributes FastVector newAttributes = new FastVector(); for (int i = 0; i < first.numAttributes(); i++) { newAttributes.addElement(first.attribute(i)); } for (int i = 0; i < second.numAttributes(); i++) { newAttributes.addElement(second.attribute(i)); } // Create the set of Instances Instances merged = new Instances(first.relationName() + '_' + second.relationName(), newAttributes, first.numInstances()); // Merge each instance for (int i = 0; i < first.numInstances(); i++) { merged.add(first.instance(i).mergeInstance(second.instance(i))); } return merged; }
/// <summary> Help function needed for stratification of set. /// /// </summary> /// <param name="numFolds">the number of folds for the stratification /// </param> protected internal virtual void stratStep(int numFolds) { FastVector newVec = new FastVector(m_Instances.capacity()); int start = 0, j; // create stratified batch while (newVec.size() < numInstances()) { j = start; while (j < numInstances()) { newVec.addElement(instance(j)); j = j + numFolds; } start++; } m_Instances = newVec; }
/// <summary> Replaces the attribute information by a clone of /// itself. /// </summary> protected internal virtual void freshAttributeInfo() { m_Attributes = (FastVector) m_Attributes.copyXmlElements(); }
public void PerformClassification() { FormForSingleCellClassifOptions FFSC = new FormForSingleCellClassifOptions(); //cGUI_ListClasses GLC = new cGUI_ListClasses(); //GLC.ClassType = eClassType.PHENOTYPE; //GLC.IsCheckBoxes = true; //GLC.IsSelectAll = true; //GLC.Run(GlobalInfo); PanelForClassSelection PhenotypeSelectionPanel = new PanelForClassSelection( true, eClassType.PHENOTYPE); PhenotypeSelectionPanel.Height = FFSC.panelPhenoToBeClassified.Height; FFSC.panelPhenoToBeClassified.Controls.Add(PhenotypeSelectionPanel); PanelForClassSelection WellClassSelectionPanel = new PanelForClassSelection( true, eClassType.WELL); WellClassSelectionPanel.Height = FFSC.panelWellToBeClassified.Height; FFSC.panelWellToBeClassified.Controls.Add(WellClassSelectionPanel); PanelForPlatesSelection PlatesSelectionPanel = new PanelForPlatesSelection( true, null, true); PlatesSelectionPanel.Height = FFSC.panelWellToBeClassified.Height; FFSC.tabPagePlates.Controls.Add(PlatesSelectionPanel); if (FFSC.ShowDialog() != DialogResult.OK) return; // ----------------------- Classification ------------------------------ int DescrCount = cGlobalInfo.CurrentScreening.ListDescriptors.Count; this.UpDateNumberOfCluster(); if (NumberOfClusters == 0) { System.Windows.Forms.MessageBox.Show("Number of cluster is null", "Error !", MessageBoxButtons.OK, MessageBoxIcon.Hand); return; } //if (FFSC.checkBoxGenerationRatio.Checked) //{ // // first we update the descriptor // for (int i = 0; i < this.NumberOfClusters; i++) // GlobalInfo.CurrentScreening.ListDescriptors.AddNew(new cDescriptorType("Ratio_" + GlobalInfo.ListCellularPhenotypes[i].Name, true, 1, GlobalInfo)); //} FormForProgress ProgressWindow = new FormForProgress(); ProgressWindow.Show(); int IdxProgress = 0; int MaxProgress = 0; #region Confusion Matrix init cListExtendedTable LT = new cListExtendedTable(); cExtendedTable ConfusionMatrix = new cExtendedTable(cGlobalInfo.ListCellularPhenotypes.Count, cGlobalInfo.ListCellularPhenotypes.Count, 0); ConfusionMatrix.Name = "Confusion Matrix (global)"; ConfusionMatrix.ListRowNames = new List<string>(); for (int i = 0; i < cGlobalInfo.ListCellularPhenotypes.Count; i++) { ConfusionMatrix.ListRowNames.Add(cGlobalInfo.ListCellularPhenotypes[i].Name + "*"); ConfusionMatrix[i].Name = cGlobalInfo.ListCellularPhenotypes[i].Name; } LT.Add(ConfusionMatrix); for (int i = 0; i < cGlobalInfo.ListWellClasses.Count; i++) { cExtendedTable ConfusionMatrixTmp = new cExtendedTable(cGlobalInfo.ListCellularPhenotypes.Count, cGlobalInfo.ListCellularPhenotypes.Count, 0); ConfusionMatrixTmp.Name = "Confusion Matrix - " + cGlobalInfo.ListWellClasses[i].Name; ConfusionMatrixTmp.ListRowNames = new List<string>(); for (int j = 0; j < cGlobalInfo.ListCellularPhenotypes.Count; j++) { ConfusionMatrixTmp.ListRowNames.Add(cGlobalInfo.ListCellularPhenotypes[j].Name + "*"); ConfusionMatrixTmp[j].Name =cGlobalInfo.ListCellularPhenotypes[j].Name; } LT.Add(ConfusionMatrixTmp); } #endregion cListPlates LP = PlatesSelectionPanel.GetListSelectedPlates(); foreach (cPlate CurrentPlateToProcess in LP /*GlobalInfo.CurrentScreening.ListPlatesAvailable*/) MaxProgress += (int)CurrentPlateToProcess.ListActiveWells.Count; ProgressWindow.progressBar.Maximum = MaxProgress; FastVector attVals = new FastVector(); for (int i = 0; i < this.NumberOfClusters; i++) attVals.addElement(i.ToString()); cPlate CurrentDispPlate = cGlobalInfo.CurrentScreening.GetCurrentDisplayPlate(); foreach (cPlate CurrentPlateToProcess in LP/* GlobalInfo.CurrentScreening.ListPlatesAvailable*/) { foreach (cWell TmpWell in CurrentPlateToProcess.ListActiveWells) { ProgressWindow.progressBar.Value = IdxProgress++; if (TmpWell.GetCurrentClassIdx() == -1) continue; if (WellClassSelectionPanel.ListCheckBoxes[TmpWell.GetCurrentClassIdx()].Checked == false) continue; DataTable FinalDataTable = new DataTable(); TmpWell.AssociatedPlate.DBConnection = new cDBConnection(TmpWell.AssociatedPlate, TmpWell.SQLTableName); TmpWell.AssociatedPlate.DBConnection.AddWellToDataTable(TmpWell, FinalDataTable, this.GlobalInfo); cListSingleBiologicalObjects LSBO = TmpWell.AssociatedPlate.DBConnection.GetBiologicalPhenotypes(TmpWell); //TmpWell.AssociatedPlate.DBConnection.AddWellToDataTable(TmpWell, FinalDataTable, checkBoxIncludeWellClassAsDesc.Checked, GlobalInfo); Instances ListInstancesTOClassify = this.CreateInstancesWithoutClass(FinalDataTable); ListInstancesTOClassify.insertAttributeAt(new weka.core.Attribute("Class", attVals), ListInstancesTOClassify.numAttributes()); ListInstancesTOClassify.setClassIndex(ListInstancesTOClassify.numAttributes() - 1); cExtendedList ListNewClasses = new cExtendedList(); int NumInstances = ListInstancesTOClassify.numInstances(); for (int i = 0; i < NumInstances; i++) { // ClassId contains the new class Instance CurrentInst = ListInstancesTOClassify.instance(i); double classId = this.CurrentClassifier.classifyInstance(CurrentInst); double[] ClassConfidence = this.CurrentClassifier.distributionForInstance(CurrentInst); LSBO[i].ClassificationConfidence = ClassConfidence[(int)classId]; ListNewClasses.Add(classId); if (CurrentPlateToProcess == CurrentDispPlate) { LT[0][LSBO[i].GetAssociatedPhenotype().Idx][(int)classId]++; if (TmpWell.GetCurrentClassIdx() >= 0) LT[TmpWell.GetCurrentClassIdx() + 1][LSBO[i].GetAssociatedPhenotype().Idx][(int)classId]++; } } ProgressWindow.richTextBoxForComment.AppendText(TmpWell.GetShortInfo().Remove(TmpWell.GetShortInfo().Length - 2) + " : " + NumInstances + " objects\n"); ProgressWindow.Refresh(); // ------------- update class within the database ----------------------------- TmpWell.AssociatedPlate.DBConnection.ChangePhenotypeClass(TmpWell, ListNewClasses); //if (FFSC.checkBoxGenerationRatio.Checked) //{ // List<double[]> Histo = ListNewClasses.CreateHistogram(0, ListInstancesTOClassify.numClasses(), ListInstancesTOClassify.numClasses()); // cListSignature LDesc = new cListSignature(); // for (int IdxHisto = 0; IdxHisto < Histo[1].Length - 1; IdxHisto++) // { // Histo[1][IdxHisto] = (100.0 * Histo[1][IdxHisto]) / (double)ListInstancesTOClassify.numInstances(); // cSignature NewDesc = new cSignature(Histo[1][IdxHisto], GlobalInfo.CurrentScreening.ListDescriptors[IdxHisto + DescrCount], GlobalInfo.CurrentScreening); // LDesc.Add(NewDesc); // } // TmpWell.AddSignatures(LDesc); //} TmpWell.AssociatedPlate.DBConnection.CloseConnection(); } } #region Display Report cDesignerSplitter DS = new cDesignerSplitter(); DS.Orientation = Orientation.Vertical; cViewertext VTEXT = new cViewertext(); VTEXT.SetInputData(ProgressWindow.richTextBoxForComment.Text); VTEXT.Run(); cDesignerTab DT = new cDesignerTab(); DT.IsMultiline = false; foreach (var item in LT) { cViewerTable VT = new cViewerTable(); VT.SetInputData(item); VT.DigitNumber = 0; VT.Run(); DT.SetInputData(VT.GetOutPut()); } DT.Run(); cExtendedControl TextEC = DT.GetOutPut(); TextEC.Width = 0; TextEC.Height = 0; TextEC.Anchor = (System.Windows.Forms.AnchorStyles)(System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right); DS.SetInputData(VTEXT.GetOutPut()); DS.SetInputData(TextEC); DS.Run(); ProgressWindow.Close(); cDisplayToWindow CDT = new cDisplayToWindow(); CDT.SetInputData(DS.GetOutPut()); CDT.IsModal = true; CDT.Title = "Phenotypic Classificaton Report"; CDT.Run(); CDT.Display(); #endregion //if (IsKeepOriginalDesc == System.Windows.Forms.DialogResult.No) //{ // // int DescNumToRemove = GlobalInfo.CurrentScreen.ListDescriptors.Count - // for (int IdxDesc = 0; IdxDesc < DescrCount; IdxDesc++) // GlobalInfo.CurrentScreening.ListDescriptors.RemoveDesc(GlobalInfo.CurrentScreening.ListDescriptors[0], GlobalInfo.CurrentScreening); //} cGlobalInfo.CurrentScreening.ListDescriptors.UpDateDisplay(); cGlobalInfo.CurrentScreening.UpDatePlateListWithFullAvailablePlate(); for (int idxP = 0; idxP < cGlobalInfo.CurrentScreening.ListPlatesActive.Count; idxP++) cGlobalInfo.CurrentScreening.ListPlatesActive[idxP].UpDataMinMax(); //WindowFormForCellbyCellClassif.Close(); //WindowClusteringInfo.Close(); }
/// <summary> /// Build the learning model for classification /// </summary> /// <param name="InstancesList">list of instances </param> /// <param name="NumberofClusters">Number of Clusters</param> /// <param name="TextBoxForFeedback">Text box for the results (can be NULL)</param> /// <param name="PanelForVisualFeedback">Panel to display visual results if avalaible (can be NULL)</param> public Classifier PerformTraining(FormForClassificationInfo WindowForClassificationParam, Instances InstancesList, /*int NumberofClusters,*/ RichTextBox TextBoxForFeedback, Panel PanelForVisualFeedback, out weka.classifiers.Evaluation ModelEvaluation, bool IsCellular) { // weka.classifiers.Evaluation ModelEvaluation = null; // FormForClassificationInfo WindowForClassificationParam = new FormForClassificationInfo(GlobalInfo); ModelEvaluation = null; // if (WindowForClassificationParam.ShowDialog() != System.Windows.Forms.DialogResult.OK) return null; // weka.classifiers.Evaluation ModelEvaluation = new Evaluation( cParamAlgo ClassifAlgoParams = WindowForClassificationParam.GetSelectedAlgoAndParameters(); if (ClassifAlgoParams == null) return null; //this.Cursor = Cursors.WaitCursor; // cParamAlgo ClassificationAlgo = WindowForClassificationParam.GetSelectedAlgoAndParameters(); cListValuesParam Parameters = ClassifAlgoParams.GetListValuesParam(); //Classifier this.CurrentClassifier = null; // -------------------------- Classification ------------------------------- // create the instances // InstancesList = this.ListInstances; this.attValsWithoutClasses = new FastVector(); if (IsCellular) for (int i = 0; i < cGlobalInfo.ListCellularPhenotypes.Count; i++) this.attValsWithoutClasses.addElement(cGlobalInfo.ListCellularPhenotypes[i].Name); else for (int i = 0; i < cGlobalInfo.ListWellClasses.Count; i++) this.attValsWithoutClasses.addElement(cGlobalInfo.ListWellClasses[i].Name); InstancesList.insertAttributeAt(new weka.core.Attribute("Class", this.attValsWithoutClasses), InstancesList.numAttributes()); //int A = Classes.Count; for (int i = 0; i < Classes.Count; i++) InstancesList.get(i).setValue(InstancesList.numAttributes() - 1, Classes[i]); InstancesList.setClassIndex(InstancesList.numAttributes() - 1); weka.core.Instances train = new weka.core.Instances(InstancesList, 0, InstancesList.numInstances()); if (PanelForVisualFeedback != null) PanelForVisualFeedback.Controls.Clear(); #region List classifiers #region J48 if (ClassifAlgoParams.Name == "J48") { this.CurrentClassifier = new weka.classifiers.trees.J48(); ((J48)this.CurrentClassifier).setMinNumObj((int)Parameters.ListDoubleValues.Get("numericUpDownMinInstLeaf").Value); ((J48)this.CurrentClassifier).setConfidenceFactor((float)Parameters.ListDoubleValues.Get("numericUpDownConfFactor").Value); ((J48)this.CurrentClassifier).setNumFolds((int)Parameters.ListDoubleValues.Get("numericUpDownNumFolds").Value); ((J48)this.CurrentClassifier).setUnpruned((bool)Parameters.ListCheckValues.Get("checkBoxUnPruned").Value); ((J48)this.CurrentClassifier).setUseLaplace((bool)Parameters.ListCheckValues.Get("checkBoxLaplacianSmoothing").Value); ((J48)this.CurrentClassifier).setSeed((int)Parameters.ListDoubleValues.Get("numericUpDownSeedNumber").Value); ((J48)this.CurrentClassifier).setSubtreeRaising((bool)Parameters.ListCheckValues.Get("checkBoxSubTreeRaising").Value); // CurrentClassif.SetJ48Tree((J48)this.CurrentClassifier, Classes.Length); this.CurrentClassifier.buildClassifier(train); // display results training // display tree if (PanelForVisualFeedback != null) { GViewer GraphView = DisplayTree(GlobalInfo, ((J48)this.CurrentClassifier), IsCellular).gViewerForTreeClassif; GraphView.Size = new System.Drawing.Size(PanelForVisualFeedback.Width, PanelForVisualFeedback.Height); GraphView.Anchor = (AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right); PanelForVisualFeedback.Controls.Clear(); PanelForVisualFeedback.Controls.Add(GraphView); } } #endregion #region Random Tree else if (ClassifAlgoParams.Name == "RandomTree") { this.CurrentClassifier = new weka.classifiers.trees.RandomTree(); if ((bool)Parameters.ListCheckValues.Get("checkBoxMaxDepthUnlimited").Value) ((RandomTree)this.CurrentClassifier).setMaxDepth(0); else ((RandomTree)this.CurrentClassifier).setMaxDepth((int)Parameters.ListDoubleValues.Get("numericUpDownMaxDepth").Value); ((RandomTree)this.CurrentClassifier).setSeed((int)Parameters.ListDoubleValues.Get("numericUpDownSeed").Value); ((RandomTree)this.CurrentClassifier).setMinNum((double)Parameters.ListDoubleValues.Get("numericUpDownMinWeight").Value); if ((bool)Parameters.ListCheckValues.Get("checkBoxIsBackfitting").Value) { ((RandomTree)this.CurrentClassifier).setNumFolds((int)Parameters.ListDoubleValues.Get("numericUpDownBackFittingFolds").Value); } else { ((RandomTree)this.CurrentClassifier).setNumFolds(0); } this.CurrentClassifier.buildClassifier(train); //string StringForTree = ((RandomTree)this.CurrentClassifier).graph().Remove(0, ((RandomTree)this.CurrentClassifier).graph().IndexOf("{") + 2); //Microsoft.Msagl.GraphViewerGdi.GViewer GraphView = new GViewer(); //GraphView.Graph = GlobalInfo.WindowHCSAnalyzer.ComputeAndDisplayGraph(StringForTree);//.Remove(StringForTree.Length - 3, 3)); //GraphView.Size = new System.Drawing.Size(panelForGraphicalResults.Width, panelForGraphicalResults.Height); //GraphView.Anchor = (AnchorStyles.Bottom | AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right); //this.panelForGraphicalResults.Controls.Clear(); //this.panelForGraphicalResults.Controls.Add(GraphView); } #endregion #region Random Forest else if (ClassifAlgoParams.Name == "RandomForest") { this.CurrentClassifier = new weka.classifiers.trees.RandomForest(); if ((bool)Parameters.ListCheckValues.Get("checkBoxMaxDepthUnlimited").Value) ((RandomForest)this.CurrentClassifier).setMaxDepth(0); else ((RandomForest)this.CurrentClassifier).setMaxDepth((int)Parameters.ListDoubleValues.Get("numericUpDownMaxDepth").Value); ((RandomForest)this.CurrentClassifier).setNumTrees((int)Parameters.ListDoubleValues.Get("numericUpDownNumTrees").Value); ((RandomForest)this.CurrentClassifier).setSeed((int)Parameters.ListDoubleValues.Get("numericUpDownSeed").Value); this.CurrentClassifier.buildClassifier(train); } #endregion #region KStar else if (ClassifAlgoParams.Name == "KStar") { this.CurrentClassifier = new weka.classifiers.lazy.KStar(); ((KStar)this.CurrentClassifier).setGlobalBlend((int)Parameters.ListDoubleValues.Get("numericUpDownGlobalBlend").Value); ((KStar)this.CurrentClassifier).setEntropicAutoBlend((bool)Parameters.ListCheckValues.Get("checkBoxBlendAuto").Value); this.CurrentClassifier.buildClassifier(train); } #endregion #region SVM else if (ClassifAlgoParams.Name == "SVM") { this.CurrentClassifier = new weka.classifiers.functions.SMO(); ((SMO)this.CurrentClassifier).setC((double)Parameters.ListDoubleValues.Get("numericUpDownC").Value); ((SMO)this.CurrentClassifier).setKernel(WindowForClassificationParam.GeneratedKernel); ((SMO)this.CurrentClassifier).setRandomSeed((int)Parameters.ListDoubleValues.Get("numericUpDownSeed").Value); this.CurrentClassifier.buildClassifier(train); } #endregion #region KNN else if (ClassifAlgoParams.Name == "KNN") { this.CurrentClassifier = new weka.classifiers.lazy.IBk(); string OptionDistance = " -K " + (int)Parameters.ListDoubleValues.Get("numericUpDownKNN").Value + " -W 0 "; string WeightType = (string)Parameters.ListTextValues.Get("comboBoxDistanceWeight").Value; switch (WeightType) { case "No Weighting": OptionDistance += ""; break; case "1/Distance": OptionDistance += "-I"; break; case "1-Distance": OptionDistance += "-F"; break; default: break; } OptionDistance += " -A \"weka.core.neighboursearch.LinearNNSearch -A \\\"weka.core."; string DistanceType = (string)Parameters.ListTextValues.Get("comboBoxDistance").Value; // OptionDistance += " -A \"weka.core."; switch (DistanceType) { case "Euclidean": OptionDistance += "EuclideanDistance"; break; case "Manhattan": OptionDistance += "ManhattanDistance"; break; case "Chebyshev": OptionDistance += "ChebyshevDistance"; break; default: break; } if (!(bool)Parameters.ListCheckValues.Get("checkBoxNormalize").Value) OptionDistance += " -D"; OptionDistance += " -R "; OptionDistance += "first-last\\\"\""; ((IBk)this.CurrentClassifier).setOptions(weka.core.Utils.splitOptions(OptionDistance)); //((IBk)this.CurrentClassifier).setKNN((int)Parameters.ListDoubleValues.Get("numericUpDownKNN").Value); this.CurrentClassifier.buildClassifier(train); } #endregion #region Multilayer Perceptron else if (ClassifAlgoParams.Name == "Perceptron") { this.CurrentClassifier = new weka.classifiers.functions.MultilayerPerceptron(); ((MultilayerPerceptron)this.CurrentClassifier).setMomentum((double)Parameters.ListDoubleValues.Get("numericUpDownMomentum").Value); ((MultilayerPerceptron)this.CurrentClassifier).setLearningRate((double)Parameters.ListDoubleValues.Get("numericUpDownLearningRate").Value); ((MultilayerPerceptron)this.CurrentClassifier).setSeed((int)Parameters.ListDoubleValues.Get("numericUpDownSeed").Value); ((MultilayerPerceptron)this.CurrentClassifier).setTrainingTime((int)Parameters.ListDoubleValues.Get("numericUpDownTrainingTime").Value); ((MultilayerPerceptron)this.CurrentClassifier).setNormalizeAttributes((bool)Parameters.ListCheckValues.Get("checkBoxNormAttribute").Value); ((MultilayerPerceptron)this.CurrentClassifier).setNormalizeNumericClass((bool)Parameters.ListCheckValues.Get("checkBoxNormNumericClasses").Value); this.CurrentClassifier.buildClassifier(train); } #endregion #region ZeroR else if (ClassifAlgoParams.Name == "ZeroR") { this.CurrentClassifier = new weka.classifiers.rules.OneR(); this.CurrentClassifier.buildClassifier(train); } #endregion #region OneR else if (ClassifAlgoParams.Name == "OneR") { this.CurrentClassifier = new weka.classifiers.rules.OneR(); ((OneR)this.CurrentClassifier).setMinBucketSize((int)Parameters.ListDoubleValues.Get("numericUpDownMinBucketSize").Value); this.CurrentClassifier.buildClassifier(train); } #endregion #region Naive Bayes else if (ClassifAlgoParams.Name == "NaiveBayes") { this.CurrentClassifier = new weka.classifiers.bayes.NaiveBayes(); ((NaiveBayes)this.CurrentClassifier).setUseKernelEstimator((bool)Parameters.ListCheckValues.Get("checkBoxKernelEstimator").Value); this.CurrentClassifier.buildClassifier(train); } #endregion #region Logistic else if (ClassifAlgoParams.Name == "Logistic") { this.CurrentClassifier = new weka.classifiers.functions.Logistic(); ((Logistic)this.CurrentClassifier).setUseConjugateGradientDescent((bool)Parameters.ListCheckValues.Get("checkBoxUseConjugateGradientDescent").Value); ((Logistic)this.CurrentClassifier).setRidge((double)Parameters.ListDoubleValues.Get("numericUpDownRidge").Value); this.CurrentClassifier.buildClassifier(train); } #endregion //weka.classifiers.functions.SMO //BayesNet #endregion if (TextBoxForFeedback != null) { TextBoxForFeedback.Clear(); TextBoxForFeedback.AppendText(this.CurrentClassifier.ToString()); } TextBoxForFeedback.AppendText("\n" + (InstancesList.numAttributes() - 1) + " attributes:\n\n"); for (int IdxAttributes = 0; IdxAttributes < InstancesList.numAttributes() - 1; IdxAttributes++) { TextBoxForFeedback.AppendText(IdxAttributes + "\t: " + InstancesList.attribute(IdxAttributes).name() + "\n"); } #region evaluation of the model and results display if ((WindowForClassificationParam.numericUpDownFoldNumber.Enabled) && (TextBoxForFeedback != null)) { TextBoxForFeedback.AppendText("\n-----------------------------\nModel validation\n-----------------------------\n"); ModelEvaluation = new weka.classifiers.Evaluation(InstancesList); ModelEvaluation.crossValidateModel(this.CurrentClassifier, InstancesList, (int)WindowForClassificationParam.numericUpDownFoldNumber.Value, new java.util.Random(1)); TextBoxForFeedback.AppendText(ModelEvaluation.toSummaryString()); TextBoxForFeedback.AppendText("\n-----------------------------\nConfusion Matrix:\n-----------------------------\n"); double[][] ConfusionMatrix = ModelEvaluation.confusionMatrix(); string NewLine = ""; for (int i = 0; i < ConfusionMatrix[0].Length; i++) { NewLine += "c" + i + "\t"; } TextBoxForFeedback.AppendText(NewLine + "\n\n"); for (int j = 0; j < ConfusionMatrix.Length; j++) { NewLine = ""; for (int i = 0; i < ConfusionMatrix[0].Length; i++) { NewLine += ConfusionMatrix[j][i] + "\t"; } // if TextBoxForFeedback.AppendText(NewLine + "| c" + j + " <=> " + cGlobalInfo.ListCellularPhenotypes[j].Name + "\n"); } } #endregion return this.CurrentClassifier; }
/// <summary> /// Create an instances structure with classes for supervised methods /// </summary> /// <param name="NumClass"></param> /// <returns></returns> public Instances CreateInstancesWithClasses(cInfoClass InfoClass, int NeutralClass) { weka.core.FastVector atts = new FastVector(); int columnNo = 0; for (int i = 0; i < ParentScreening.ListDescriptors.Count; i++) { if (ParentScreening.ListDescriptors[i].IsActive() == false) continue; atts.addElement(new weka.core.Attribute(ParentScreening.ListDescriptors[i].GetName())); columnNo++; } weka.core.FastVector attVals = new FastVector(); for (int i = 0; i < InfoClass.NumberOfClass; i++) attVals.addElement("Class__" + (i).ToString()); atts.addElement(new weka.core.Attribute("Class__", attVals)); Instances data1 = new Instances("MyRelation", atts, 0); int IdxWell = 0; foreach (cWell CurrentWell in this.ListActiveWells) { if (CurrentWell.GetCurrentClassIdx() == NeutralClass) continue; double[] vals = new double[data1.numAttributes()]; int IdxCol = 0; for (int Col = 0; Col < ParentScreening.ListDescriptors.Count; Col++) { if (ParentScreening.ListDescriptors[Col].IsActive() == false) continue; vals[IdxCol++] = CurrentWell.ListSignatures[Col].GetValue(); } vals[columnNo] = InfoClass.CorrespondanceTable[CurrentWell.GetCurrentClassIdx()]; data1.add(new DenseInstance(1.0, vals)); IdxWell++; } data1.setClassIndex((data1.numAttributes() - 1)); return data1; }
/// <summary> /// Create an instances structure with classes for supervised methods /// </summary> /// <param name="NumClass"></param> /// <returns></returns> public Instances CreateInstancesWithClasses(List<bool> ListClassSelected) { weka.core.FastVector atts = new FastVector(); int columnNo = 0; for (int i = 0; i < ParentScreening.ListDescriptors.Count; i++) { if (ParentScreening.ListDescriptors[i].IsActive() == false) continue; atts.addElement(new weka.core.Attribute(ParentScreening.ListDescriptors[i].GetName())); columnNo++; } weka.core.FastVector attVals = new FastVector(); foreach (var item in cGlobalInfo.ListWellClasses) { attVals.addElement(item.Name); } atts.addElement(new weka.core.Attribute("ClassAttribute", attVals)); Instances data1 = new Instances("MyRelation", atts, 0); int IdxWell = 0; foreach (cWell CurrentWell in this.ListActiveWells) { if (!ListClassSelected[CurrentWell.GetCurrentClassIdx()]) continue; double[] vals = new double[data1.numAttributes()]; int IdxCol = 0; for (int Col = 0; Col < ParentScreening.ListDescriptors.Count; Col++) { if (ParentScreening.ListDescriptors[Col].IsActive() == false) continue; vals[IdxCol++] = CurrentWell.ListSignatures[Col].GetValue(); } vals[columnNo] = CurrentWell.GetCurrentClassIdx(); data1.add(new DenseInstance(1.0, vals)); IdxWell++; } data1.setClassIndex((data1.numAttributes() - 1)); return data1; }
/// <summary> /// Create an instances structure with classes for supervised methods /// </summary> /// <param name="NumClass"></param> /// <returns></returns> public Instances CreateInstancesWithClassesWithPlateBasedDescriptor(int NumberOfClass) { weka.core.FastVector atts = new FastVector(); int columnNo = 0; for (int i = 0; i < ParentScreening.ListPlateBaseddescriptorNames.Count; i++) { atts.addElement(new weka.core.Attribute(ParentScreening.ListPlateBaseddescriptorNames[i])); columnNo++; } weka.core.FastVector attVals = new FastVector(); for (int i = 0; i < NumberOfClass; i++) attVals.addElement("Class" + (i).ToString()); atts.addElement(new weka.core.Attribute("Class", attVals)); Instances data1 = new Instances("MyRelation", atts, 0); int IdxWell = 0; foreach (cWell CurrentWell in this.ListActiveWells) { if (CurrentWell.GetCurrentClassIdx() == -1) continue; double[] vals = new double[data1.numAttributes()]; int IdxCol = 0; for (int Col = 0; Col < ParentScreening.ListPlateBaseddescriptorNames.Count; Col++) { vals[IdxCol++] = CurrentWell.ListPlateBasedDescriptors[Col].GetValue(); } vals[columnNo] = CurrentWell.GetCurrentClassIdx(); data1.add(new DenseInstance(1.0, vals)); IdxWell++; } data1.setClassIndex((data1.numAttributes() - 1)); return data1; }
/// <summary> Set the output format if the class is nominal.</summary> private void setOutputFormat() { FastVector newAtts; int newClassIndex; System.Text.StringBuilder attributeName; Instances outputFormat; FastVector vals; // Compute new attributes newClassIndex = getInputFormat().classIndex(); newAtts = new FastVector(); for (int j = 0; j < getInputFormat().numAttributes(); j++) { weka.core.Attribute att = getInputFormat().attribute(j); if (!att.Nominal || (j == getInputFormat().classIndex()) || !m_Columns.isInRange(j)) { newAtts.addElement(att.copy()); } else { if (att.numValues() <= 2) { if (m_Numeric) { newAtts.addElement(new weka.core.Attribute(att.name())); } else { newAtts.addElement(att.copy()); } } else { if (newClassIndex >= 0 && j < getInputFormat().classIndex()) { newClassIndex += att.numValues() - 1; } // Compute values for new attributes for (int k = 0; k < att.numValues(); k++) { attributeName = new System.Text.StringBuilder(att.name() + "="); attributeName.Append(att.value_Renamed(k)); if (m_Numeric) { newAtts.addElement(new weka.core.Attribute(attributeName.ToString())); } else { vals = new FastVector(2); vals.addElement("f"); vals.addElement("t"); newAtts.addElement(new weka.core.Attribute(attributeName.ToString(), vals)); } } } } } outputFormat = new Instances(getInputFormat().relationName(), newAtts, 0); outputFormat.ClassIndex = newClassIndex; setOutputFormat(outputFormat); }
/// <summary> /// Create an instances structure without classes for unsupervised methods /// </summary> /// <returns>a weka Instances object</returns> public Instances CreateInstancesWithoutClass() { weka.core.FastVector atts = new FastVector(); int columnNo = 0; // Descriptors loop for (int i = 0; i < ParentScreening.ListDescriptors.Count; i++) { if (ParentScreening.ListDescriptors[i].IsActive() == false) continue; atts.addElement(new weka.core.Attribute(ParentScreening.ListDescriptors[i].GetName())); columnNo++; } weka.core.FastVector attVals = new FastVector(); Instances data1 = new Instances("MyRelation", atts, 0); foreach (cWell CurrentWell in this.ListActiveWells) { double[] vals = new double[data1.numAttributes()]; int IdxRealCol = 0; for (int Col = 0; Col < ParentScreening.ListDescriptors.Count; Col++) { if (ParentScreening.ListDescriptors[Col].IsActive() == false) continue; vals[IdxRealCol++] = CurrentWell.ListSignatures[Col].GetValue(); } data1.add(new DenseInstance(1.0, vals)); } return data1; }
/// <summary> Clones the vector and shallow copies all its elements. /// The elements have to implement the Copyable interface. /// /// </summary> /// <returns> the new vector /// </returns> public System.Object copyXmlElements() { FastVector copy = new FastVector(m_Objects.Length); copy.m_Size = m_Size; copy.m_CapacityIncrement = m_CapacityIncrement; copy.m_CapacityMultiplier = m_CapacityMultiplier; for (int i = 0; i < m_Size; i++) { copy.m_Objects[i] = ((Copyable) m_Objects[i]).copy(); } return copy; }
/// <summary> Reads the header of an ARFF file from a reader and /// reserves space for the given number of instances. Lets /// the class index be undefined (negative). /// /// </summary> /// <param name="reader">the reader /// </param> /// <param name="capacity">the capacity /// </param> /// <exception cref="IllegalArgumentException">if the header is not read successfully /// or the capacity is negative. /// </exception> /// <exception cref="IOException">if there is a problem with the reader. /// </exception> //@ requires capacity >= 0; //@ ensures classIndex() == -1; //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'" public Instances(System.IO.StreamReader reader, int capacity) { StreamTokenizer tokenizer; if (capacity < 0) { throw new System.ArgumentException("Capacity has to be positive!"); } tokenizer = new StreamTokenizer(reader); initTokenizer(tokenizer); readHeader(tokenizer); m_ClassIndex = - 1; m_Instances = new FastVector(capacity); }
private static Instances CreateInstanceOnFly(double[] a, double[] b) { FastVector atts; Instances data; double[] vals; // 1. set up attributes atts = new FastVector(); // - numeric atts.addElement(new Attribute("att1")); atts.addElement(new Attribute("att2")); // 2. create Instances object data = new Instances("MyRelation", atts, 0); for (int i = 0; i < a.Length; ++i) { // 3. fill with data // first instance vals = new double[data.numAttributes()]; // - numeric vals[0] = a[i]; // - nominal vals[1] = b[i]; data.add(new weka.core.DenseInstance(1.0, vals)); } return data; }
/// /// <summary> * Sets the format of output instances. </summary> /// private void setOutputFormat() { // give names to the new attributes FastVector newAtts = new FastVector(); string foName = null; for (int i = 0; i < getInputFormat().numAttributes(); i++) { string attName = getInputFormat().attribute(i).name(); foName = "'FT " + attName.Replace('\'', ' ').Trim() + " (re)\'"; Attribute newAttribX = new Attribute(foName); newAtts.addElement(newAttribX); foName = "'FT " + attName.Replace('\'', ' ').Trim() + " (im)\'"; Attribute newAttribY = new Attribute(foName); newAtts.addElement(newAttribY); } setOutputFormat(new Instances(getInputFormat().relationName(), newAtts, getNumCoeffs())); }
public cInfoForHierarchical CreateInstancesWithUniqueClasse() { cInfoForHierarchical InfoForHierarchical = new cInfoForHierarchical(); weka.core.FastVector atts = new FastVector(); int columnNo = 0; for (int i = 0; i < this.ParentScreening.ListDescriptors.Count; i++) { if (this.ParentScreening.ListDescriptors[i].IsActive() == false) continue; atts.addElement(new weka.core.Attribute(this.ParentScreening.ListDescriptors[i].GetName())); columnNo++; } weka.core.FastVector attVals = new FastVector(); atts.addElement(new weka.core.Attribute("Class_____", attVals)); InfoForHierarchical.ListInstances = new Instances("MyRelation", atts, 0); int IdxWell = 0; foreach (cWell CurrentWell in this.ListActiveWells) { if (CurrentWell.GetCurrentClassIdx() == -1) continue; attVals.addElement("Class_____" + (IdxWell).ToString()); InfoForHierarchical.ListIndexedWells.Add(CurrentWell); double[] vals = new double[InfoForHierarchical.ListInstances.numAttributes()]; int IdxCol = 0; for (int Col = 0; Col < this.ParentScreening.ListDescriptors.Count; Col++) { if (this.ParentScreening.ListDescriptors[Col].IsActive() == false) continue; vals[IdxCol++] = CurrentWell.ListSignatures[Col].GetValue(); } vals[columnNo] = IdxWell; InfoForHierarchical.ListInstances.add(new DenseInstance(1.0, vals)); IdxWell++; } InfoForHierarchical.ListInstances.setClassIndex((InfoForHierarchical.ListInstances.numAttributes() - 1)); return InfoForHierarchical; }
/// <summary> Reads and stores header of an ARFF file. /// /// </summary> /// <param name="tokenizer">the stream tokenizer /// </param> /// <exception cref="IOException">if the information is not read /// successfully /// </exception> protected internal virtual void readHeader(StreamTokenizer tokenizer) { System.String attributeName; FastVector attributeValues; //int i; Token token=null; // Get name of relation. getFirstToken(tokenizer, out token); //if (tokenizer.ttype == SupportClass.StreamTokenizerSupport.TT_EOF) if ((token != null) && (token is EofToken)) { errms(tokenizer, "premature end of file"); } if (ARFF_RELATION.ToUpper().Equals(token.StringValue.ToUpper())) { getNextToken(tokenizer,out token); m_RelationName = token.StringValue; getLastToken(tokenizer,out token, false); } else { errms(tokenizer, "keyword " + ARFF_RELATION + " expected"); } // Create vectors to hold information temporarily. m_Attributes = new FastVector(); // Get attribute declarations. getFirstToken(tokenizer, out token); //if (tokenizer.ttype == SupportClass.StreamTokenizerSupport.TT_EOF) if ((token != null) && (token is EofToken)) { errms(tokenizer, "premature end of file"); } while (Attribute.ARFF_ATTRIBUTE.ToUpper().Equals(token.StringValue.ToUpper())) { // Get attribute name. getNextToken(tokenizer,out token); attributeName = token.StringValue; getNextToken(tokenizer,out token); // Check if attribute is nominal. //if (tokenizer.ttype == SupportClass.StreamTokenizerSupport.TT_WORD) if ((token != null) && (token is WordToken)) { // Attribute is real, integer, or string. if (token.StringValue.ToUpper().Equals(Attribute.ARFF_ATTRIBUTE_REAL.ToUpper()) || token.StringValue.ToUpper().Equals(Attribute.ARFF_ATTRIBUTE_INTEGER.ToUpper()) || token.StringValue.ToUpper().Equals(Attribute.ARFF_ATTRIBUTE_NUMERIC.ToUpper())) { m_Attributes.addElement(new Attribute(attributeName, numAttributes())); readTillEOL(tokenizer); } else if (token.StringValue.ToUpper().Equals(Attribute.ARFF_ATTRIBUTE_STRING.ToUpper())) { m_Attributes.addElement(new Attribute(attributeName, (FastVector) null, numAttributes())); readTillEOL(tokenizer); } else if (token.StringValue.ToUpper().Equals(Attribute.ARFF_ATTRIBUTE_DATE.ToUpper())) { System.String format = null; tokenizer.NextToken(out token); //if (tokenizer.NextToken() != SupportClass.StreamTokenizerSupport.TT_EOL) if ((token != null) && (!(token is EofToken))) { //if ((tokenizer.ttype != SupportClass.StreamTokenizerSupport.TT_WORD) && (tokenizer.ttype != '\'') && (tokenizer.ttype != '\"')) if ((token != null) && (!(token is WordToken)) && (token.StringValue!="'") && (token.StringValue!="\"") ) { errms(tokenizer, "not a valid date format"); } format = token.StringValue; readTillEOL(tokenizer); } else { tokenizer.PushBack(token); } m_Attributes.addElement(new Attribute(attributeName, format, numAttributes())); } else { errms(tokenizer, "no valid attribute type or invalid " + "enumeration"); } } else { // Attribute is nominal. attributeValues = new FastVector(); tokenizer.PushBack(token); // Get values for nominal attribute. tokenizer.NextToken(out token); if ( token.StringValue != "{") { errms(tokenizer, "{ expected at beginning of enumeration"); } tokenizer.NextToken(out token); while ( token.StringValue != "}") { //if (tokenizer.ttype == SupportClass.StreamTokenizerSupport.TT_EOL) if (token is EolToken) { errms(tokenizer, "} expected at end of enumeration"); } else { attributeValues.addElement(token.StringValue); } tokenizer.NextToken(out token); } if (attributeValues.size() == 0) { errms(tokenizer, "no nominal values found"); } m_Attributes.addElement(new Attribute(attributeName, attributeValues, numAttributes())); } getLastToken(tokenizer,out token, false); getFirstToken(tokenizer,out token); //if (tokenizer.ttype == SupportClass.StreamTokenizerSupport.TT_EOF) if (token is EofToken) errms(tokenizer, "premature end of file"); } // Check if data part follows. We can't easily check for EOL. if (!ARFF_DATA.ToUpper().Equals(token.StringValue.ToUpper())) { errms(tokenizer, "keyword " + ARFF_DATA + " expected"); } // Check if any attributes have been declared. if (m_Attributes.size() == 0) { errms(tokenizer, "no attributes declared"); } // Allocate buffers in case sparse instances have to be read m_ValueBuffer = new double[numAttributes()]; m_IndicesBuffer = new int[numAttributes()]; }