/// <summary> Adds one instance to the end of the set. /// Shallow copies instance before it is added. Increases the /// size of the dataset if it is not large enough. Does not /// check if the instance is compatible with the dataset. /// /// </summary> /// <param name="instance">the instance to be added /// </param> public virtual void add(Instance instance) { Instance newInstance = (Instance) instance.copy(); newInstance.Dataset = this; m_Instances.addElement(newInstance); }
/// <summary> Evaluates the classifier on a single instance. /// /// </summary> /// <param name="classifier">machine learning classifier /// </param> /// <param name="instance">the test instance to be classified /// </param> /// <returns> the prediction made by the clasifier /// </returns> /// <throws> Exception if model could not be evaluated </throws> /// <summary> successfully or the data contains string attributes /// </summary> public virtual double evaluateModelOnce(Classifier classifier, Instance instance) { Instance classMissing = (Instance) instance.copy(); double pred = 0; classMissing.Dataset = instance.dataset(); classMissing.setClassMissing(); if (m_ClassIsNominal) { double[] dist = classifier.distributionForInstance(classMissing); pred = Utils.maxIndex(dist); //UPGRADE_WARNING: Data types in Visual C# might be different. Verify the accuracy of narrowing conversions. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1042'" if (dist[(int) pred] <= 0) { pred = Instance.missingValue(); } updateStatsForClassifier(dist, instance); } else { pred = classifier.classifyInstance(classMissing); updateStatsForPredictor(pred, instance); } return pred; }
/// <summary> Calculates the class membership probabilities for the given test instance. /// /// </summary> /// <param name="instance">the instance to be classified /// </param> /// <returns> predicted class probability distribution /// </returns> /// <exception cref="Exception">if instance could not be classified /// successfully /// </exception> public virtual double[] distributionForInstance(Instance instance) { instance = (Instance) instance.copy(); instance.Dataset = m_NumericClassData; double[] pred = new double[m_NumClasses]; double[] Fs = new double[m_NumClasses]; for (int i = 0; i < m_NumGenerated; i++) { double predSum = 0; for (int j = 0; j < m_NumClasses; j++) { pred[j] = m_Classifiers[j][i].classifyInstance(instance); predSum += pred[j]; } predSum /= m_NumClasses; for (int j = 0; j < m_NumClasses; j++) { Fs[j] += (pred[j] - predSum) * (m_NumClasses - 1) / m_NumClasses; } } return Calculateprobs(Fs); }