Class: Rumale::EvaluationMeasure::NormalizedMutualInformation

Inherits:
Object
  • Object
show all
Includes:
Base::Evaluator
Defined in:
lib/rumale/evaluation_measure/normalized_mutual_information.rb

Overview

NormalizedMutualInformation is a class that calculates the normalized mutual information.

Reference

  • C D. Manning, P. Raghavan, and H. Schutze, “Introduction to Information Retrieval,” Cambridge University Press., 2008.

  • N X. Vinh, J. Epps, and J. Bailey, “Information Theoretic Measures for Clusterings Comparison: Variants, Properties, Normalization and Correction for Chance,” J. Machine Learning Research, vol. 11, pp. 2837–1854, 2010.

Examples:

evaluator = Rumale::EvaluationMeasure::NormalizedMutualInformation.new
puts evaluator.score(ground_truth, predicted)

Instance Method Summary collapse

Instance Method Details

#score(y_true, y_pred) ⇒ Float

Calculate noramlzied mutual information

Parameters:

  • y_true (Numo::Int32)

    (shape: [n_samples]) Ground truth labels.

  • y_pred (Numo::Int32)

    (shape: [n_samples]) Predicted cluster labels.

Returns:

  • (Float)

    Normalized mutual information



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/rumale/evaluation_measure/normalized_mutual_information.rb', line 25

def score(y_true, y_pred)
  check_label_array(y_true)
  check_label_array(y_pred)
  # calculate entropies.
  class_entropy = entropy(y_true)
  return 0.0 if class_entropy.zero?
  cluster_entropy = entropy(y_pred)
  return 0.0 if cluster_entropy.zero?
  # calculate mutual information.
  mi = MutualInformation.new
  mi.score(y_true, y_pred) / Math.sqrt(class_entropy * cluster_entropy)
end