Skip to content


Q0 index.

Dom's Q0 measure 2 uses conditional entropy to calculate the goodness of a clustering solution. However, this term only evaluates the homogeneity of a solution. To measure the completeness of the hypothesized clustering, Dom includes a model cost term calculated using a coding theory argument. The overall clustering quality measure presented is the sum of the costs of representing the data's conditional entropy and the model.

The motivation for this approach is an appeal to parsimony: Given identical conditional entropies, H(C|K), the clustering solution with the fewest clusters should be preferred.

The Q0 measure can be calculated using the following formula 1

\[ Q_0(C, K) = H(C|K) + \frac{1}{n} \sum_{k=1}^{|K|} \log \binom{h(c) + |C| - 1}{|C| - 1}. \]

Due to the complexity of the formula, this metric and its associated normalized version (Q2) is one order of magnitude slower than most other implemented metrics.


  • cm – defaults to None

    This parameter allows sharing the same confusion matrix between multiple metrics. Sharing a confusion matrix reduces the amount of storage and computation time.


  • bigger_is_better

    Indicate if a high value is better than a low one or not.

  • requires_labels

    Indicates if labels are required, rather than probabilities.

  • sample_correction

  • works_with_weights

    Indicate whether the model takes into consideration the effect of sample weights


>>> from river import metrics

>>> y_true = [1, 1, 2, 2, 3, 3]
>>> y_pred = [1, 1, 1, 2, 2, 2]

>>> metric = metrics.Q0()

>>> for yt, yp in zip(y_true, y_pred):
...     print(metric.update(yt, yp).get())

>>> metric
Q0: 1.380394



Return a fresh estimator with the same parameters.

The clone has the same parameters but has not been updated with any data. This works by looking at the parameters from the class signature. Each parameter is either - recursively cloned if it's a River classes. - deep-copied via copy.deepcopy if not. If the calling object is stochastic (i.e. it accepts a seed parameter) and has not been seeded, then the clone will not be idempotent. Indeed, this method's purpose if simply to return a new instance with the same input parameters.


Return the current value of the metric.


Revert the metric.


  • y_true
  • y_pred
  • sample_weight – defaults to 1.0
  • correction – defaults to None

Update the metric.


  • y_true
  • y_pred
  • sample_weight – defaults to 1.0

Indicates whether or not a metric can work with a given model.


  • model (river.base.estimator.Estimator)


  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. URL: 

  2. Byron E. Dom. 2001. An information-theoretic external cluster-validity measure. Technical Report RJ10219, IBM, October.