Ejemplo n.º 1
0
        /// <summary>
        ///     Evaluates all given <see cref="ClusterSet{TInstance}" />s according to the given
        ///     <see cref="IExternalEvaluationCriterion{TInstance, TClass}" />.
        /// </summary>
        /// <param name="clustering">The cluster-sets to be evaluated.</param>
        /// <param name="criterion">The criterion used to evaluate the cluster-sets.</param>
        /// <param name="instanceClasses">The instances' classes.</param>
        /// <param name="maxClusters">The maximum number of clusters allowed for a cluster-set for it to be evaluated.</param>
        /// <returns>A list containing the evaluations for each cluster-set.</returns>
        /// <typeparam name="TInstance">The type of instance considered.</typeparam>
        /// <typeparam name="TClass">The type of class considered.</typeparam>
        public static ICollection <ClusterSetEvaluation <TInstance> > EvaluateClustering <TInstance, TClass>(
            this ClusteringResult <TInstance> clustering, IExternalEvaluationCriterion <TInstance, TClass> criterion,
            IDictionary <TInstance, TClass> instanceClasses, uint maxClusters) where TInstance : IComparable <TInstance>
        {
            var evals = new List <ClusterSetEvaluation <TInstance> >();

            // checks only one cluster allowed
            if (maxClusters == 1)
            {
                evals.Add(new ClusterSetEvaluation <TInstance>(clustering[0], double.NaN));
                return(evals);
            }

            // evaluates all cluster-sets
            foreach (var clusterSet in clustering.Reverse())
            {
                if (clusterSet.Count < 2 || clusterSet.Count > maxClusters)
                {
                    continue;
                }
                var eval = criterion.Evaluate(clusterSet, instanceClasses);
                evals.Add(new ClusterSetEvaluation <TInstance>(clusterSet, eval));
            }

            return(evals);
        }
Ejemplo n.º 2
0
 /// <summary>
 ///     Evaluates all given <see cref="ClusterSet{TInstance}" />s according to the given
 ///     <see cref="IExternalEvaluationCriterion{TInstance,TClass}" />. The maximum number of clusters allowed in a
 ///     cluster-set for it to be evaluated corresponds to sqrt(N/2), where N is the total number of instances clustered.
 /// </summary>
 /// <param name="clustering">The cluster-sets to be evaluated.</param>
 /// <param name="criterion">The criterion used to evaluate the cluster-sets.</param>
 /// <param name="instanceClasses">The instances' classes.</param>
 /// <returns>A list containing the evaluations for each cluster-set.</returns>
 /// <typeparam name="TInstance">The type of instance considered.</typeparam>
 /// <typeparam name="TClass">The type of class considered.</typeparam>
 public static ICollection <ClusterSetEvaluation <TInstance> > EvaluateClustering <TInstance, TClass>(
     this ClusteringResult <TInstance> clustering, IExternalEvaluationCriterion <TInstance, TClass> criterion,
     IDictionary <TInstance, TClass> instanceClasses) where TInstance : IComparable <TInstance> =>
 EvaluateClustering(clustering, criterion, instanceClasses, (uint)Math.Sqrt(clustering.Count / 2d));