class_docstr: Homogeneity Score.
  
  Homogeneity metric [^1] of a cluster labeling given a ground truth.
  
  In order to satisfy the homogeneity criteria, a clustering must assign only
  those data points that are members of a single class to a single cluster. That
  is, the class distribution within each cluster should be skewed to a single
  class, that is, zero entropy. We determine how close a given clustering is to
  this ideal by examining the conditional entropy of the class distribution given
  the proposed clustering.
  
  However, in an imperfect situation, the size of this value is dependent on the
  size of the dataset and the distribution of class sizes. Therefore, instead of
  taking the raw conditional entropy, we normalize by the maximum reduction in
  entropy the clustering information could provide.
  
  As such, we define homogeneity as:
  
  $$
  h = \begin{cases}
  1 if H(C) = 0, \\
  1 - \frac{H(C|K)}{H(C)} otherwise.
  \end{cases}.
  $$
  
  Parameters
  ----------
  cm
      This parameter allows sharing the same confusion
      matrix between multiple metrics. Sharing a confusion matrix reduces the amount of storage
      and computation time.
  
  Examples
  --------
  
  >>> from river import metrics
  
  >>> y_true = [1, 1, 2, 2, 3, 3]
  >>> y_pred = [1, 1, 1, 2, 2, 2]
  
  >>> metric = metrics.Homogeneity()
  >>> for yt, yp in zip(y_true, y_pred):
  ...     metric.update(yt, yp)
  ...     print(metric.get())
  1.0
  1.0
  0.0
  0.311278
  0.37515
  0.42062
  
  >>> metric
  Homogeneity: 42.06%
  
  References
  ----------
  [^1]: Andrew Rosenberg and Julia Hirschberg (2007).
        V-Measure: A conditional entropy-based external cluster evaluation measure.
        Proceedings of the 2007 Joing Conference on Empirical Methods in Natural Language
        Processing and Computational Natural Language Learning, pp. 410 - 420,
        Prague, June 2007.
class_docstr_tok: ["Homogeneity","Score",".","Homogeneity","metric","[","^1","]","of","a","cluster","labeling","given","a","ground","truth",".","In","order","to","satisfy","the","homogeneity","criteria",",","a","clustering","must","assign","only","those","data","points","that","are","members","of","a","single","class","to","a","single","cluster",".","That","is",",","the","class","distribution","within","each","cluster","should","be","skewed","to","a","single","class",",","that","is",",","zero","entropy",".","We","determine","how","close","a","given","clustering","is","to","this","ideal","by","examining","the","conditional","entropy","of","the","class","distribution","given","the","proposed","clustering",".","However",",","in","an","imperfect","situation",",","the","size","of","this","value","is","dependent","on","the","size","of","the","dataset","and","the","distribution","of","class","sizes",".","Therefore",",","instead","of","taking","the","raw","conditional","entropy",",","we","normalize","by","the","maximum","reduction","in","entropy","the","clustering","information","could","provide",".","As","such",",","we","define","homogeneity","as",":","$","$","h","=","\\begin","{","cases","}","1","if","H","(","C",")","=","0",",","\\\\","1","-","\\frac","{","H","(","C|K",")","}","{","H","(","C",")","}","otherwise",".","\\end","{","cases","}",".","$","$","Parameters","--","--","--","--","--","cm","This","parameter","allows","sharing","the","same","confusion","matrix","between","multiple","metrics",".","Sharing","a","confusion","matrix","reduces","the","amount","of","storage","and","computation","time",".","Examples","--","--","--","--",">",">",">","from","river","import","metrics",">",">",">","y_true","=","[","1",",","1",",","2",",","2",",","3",",","3","]",">",">",">","y_pred","=","[","1",",","1",",","1",",","2",",","2",",","2","]",">",">",">","metric","=","metrics.Homogeneity","(",")",">",">",">","for","yt",",","yp","in","zip","(","y_true",",","y_pred",")",":","...","metric.update","(","yt",",","yp",")","...","print","(","metric.get","(",")",")","1.0","1.0","0.0","0.311278","0.37515","0.42062",">",">",">","metric","Homogeneity",":","42.06","%","References","--","--","--","--","--","[","^1","]",":","Andrew","Rosenberg","and","Julia","Hirschberg","(","2007",")",".","V-Measure",":","A","conditional","entropy-based","external","cluster","evaluation","measure",".","Proceedings","of","the","2007","Joing","Conference","on","Empirical","Methods","in","Natural","Language","Processing","and","Computational","Natural","Language","Learning",",","pp",".","410","-","420",",","Prague",",","June","2007","."]
code: def get(self):
      raw_conditional_entropy = 0.0
      max_reduction_entropy = 0.0
  
      for i in self.cm.classes:
          for j in self.cm.classes:
              try:
                  raw_conditional_entropy -= (
                      self.cm[j][i]
                      / self.cm.n_samples
                      * math.log(self.cm[j][i] / self.cm.sum_col[i], 2)
                  )
              except (ValueError, ZeroDivisionError):
                  continue
  
          try:
              max_reduction_entropy -= (
                  self.cm.sum_row[i]
                  / self.cm.n_samples
                  * math.log(self.cm.sum_row[i] / self.cm.n_samples, 2)
              )
          except (ValueError, ZeroDivisionError):
              continue
  
      try:
          return 1.0 - raw_conditional_entropy / max_reduction_entropy
      except ZeroDivisionError:
          return 1.0
  
file_path: river/river/metrics/vbeta.py
imports: from __future__ import annotations
  import math
  from river import metrics
label_desc: Use image node_id 2 for calling the Homogeneity obj's underlying member method code with example usage: obj.get() and returns: unknown, int