public void SetClassificationPenalty(double correctClassValue, double estimatedClassValue, double penalty)
        {
            int correctClassIndex   = ClassValuesCache.IndexOf(correctClassValue);
            int estimatedClassIndex = ClassValuesCache.IndexOf(estimatedClassValue);

            ClassificationPenaltiesParameter.Value[correctClassIndex, estimatedClassIndex] = penalty;
        }
        public double GetClassificationPenalty(double correctClassValue, double estimatedClassValue)
        {
            int correctClassIndex   = ClassValuesCache.IndexOf(correctClassValue);
            int estimatedClassIndex = ClassValuesCache.IndexOf(estimatedClassValue);

            return(ClassificationPenaltiesParameter.Value[correctClassIndex, estimatedClassIndex]);
        }
        public string GetClassName(double classValue)
        {
            if (!ClassValuesCache.Contains(classValue))
            {
                throw new ArgumentException();
            }
            int index = ClassValuesCache.IndexOf(classValue);

            return(ClassNamesCache[index]);
        }
        public void SetClassName(double classValue, string className)
        {
            if (!ClassValuesCache.Contains(classValue))
            {
                throw new ArgumentException();
            }
            int index = ClassValuesCache.IndexOf(classValue);

            ClassNamesParameter.Value[index, 0] = className;
            // updating of class names cache is not necessary here as the parameter value fires a changed event which updates the cache
        }