class_docstr: :class:`CandidateSelector` that selects items a user has not rated as
  candidates.  When this selector is fit, it memorizes the rated items.
  
  Attributes:
      items_(pandas.Index): All known items.
      users_(pandas.Index): All known users.
      user_items_(CSR):
          Items rated by each known user, as positions in the ``items`` index.
class_docstr_tok: [":","class",":","`","CandidateSelector","`","that","selects","items","a","user","has","not","rated","as","candidates",".","When","this","selector","is","fit",",","it","memorizes","the","rated","items",".","Attributes",":","items_","(","pandas.Index",")",":","All","known","items",".","users_","(","pandas.Index",")",":","All","known","users",".","user_items_","(","CSR",")",":","Items","rated","by","each","known","user",",","as","positions","in","the","``","items","``","index","."]
code: def fit(self, ratings, **kwargs):
      r2 = ratings[["user", "item"]]
      sparse = sparse_ratings(r2)
      _logger.info(
          "trained unrated candidate selector for %d ratings",
          sparse.matrix.nnz,
      )
      self.items_ = sparse.items
      self.users_ = sparse.users
      self.user_items_ = sparse.matrix
  
      return self
  
imports: import logging
  from collections.abc import Iterable, Sequence
  import pandas
  import numpy
  from ..data import sparse_ratings
  from .None import Predictor, Recommender, CandidateSelector
  from ..util import derivable_rng
  from .bias import Bias
  from .ranking import TopN
label_desc: Use image node_id 1 for calling the UnratedItemCandidateSelector obj's underlying member method code with example usage: obj.fit(ratings) and returns: self