class_docstr: AdaGrad optimizer.
  
  Parameters
  ----------
  lr
  eps
  
  Attributes
  ----------
  g2 : collections.defaultdict
  
  Examples
  --------
  
  >>> from river import datasets
  >>> from river import evaluate
  >>> from river import linear_model
  >>> from river import metrics
  >>> from river import optim
  >>> from river import preprocessing
  
  >>> dataset = datasets.Phishing()
  >>> optimizer = optim.AdaGrad()
  >>> model = (
  ...     preprocessing.StandardScaler() |
  ...     linear_model.LogisticRegression(optimizer)
  ... )
  >>> metric = metrics.F1()
  
  >>> evaluate.progressive_val_score(dataset, model, metric)
  F1: 88.01%
  
  References
  ----------
  [^1]: [Duchi, J., Hazan, E. and Singer, Y., 2011. Adaptive subgradient methods for online learning and stochastic optimization. Journal of machine learning research, 12(Jul), pp.2121-2159.](http://www.jmlr.org/papers/volume12/duchi11a/duchi11a.pdf)
code: def __init__(self, lr=0.1, eps=1e-8):
      super().__init__(lr)
      self.eps = eps
      self.g2 = collections.defaultdict(float)
  
imports: from __future__ import annotations
  import collections
  from river import optim
label_desc: Use image node_id 1 to create a new AdaGrad object from inherited base classes: optim.base with example: obj = AdaGrad(lr, eps)