class_docstr: Biased matrix factorization for implicit feedback using SciKit-Learn's SVD
  solver (:class:`sklearn.decomposition.TruncatedSVD`).  It operates by first
  computing the bias, then computing the SVD of the bias residuals.
  
  You'll generally want one of the iterative SVD implementations such as
  :class:`lennskit.algorithms.als.BiasedMF`; this is here primarily as an
  example and for cases where you want to evaluate a pure SVD implementation.
code: def predict_for_user(self, user, items, ratings=None):
      items = np.array(items)
      if user not in self.bias.user_offsets_.index:
          return pd.Series(np.nan, index=items)
  
      # Get index for user & usable items
      uidx = self.bias.user_offsets_.index.get_loc(user)
      iidx = self.bias.item_offsets_.index.get_indexer(items)
      good_iidx = iidx[iidx >= 0]
  
      _log.debug("reverse-transforming user %s (idx=%d)", user, uidx)
      Xt = self.user_components_[[uidx], :]
      X = self.factorization.inverse_transform(Xt)
      # restrict to usable desired items
      Xsel = X[0, good_iidx]
      # convert to output format and de-normalize
      scores = pd.Series(Xsel, index=items[iidx >= 0]).reindex(items)
      scores += self.bias.predict_for_user(user, items, ratings)
      return scores
  
file_path: lkpy/lenskit/algorithms/svd.py
imports: import logging
  import pandas
  import numpy
  from .None import Predictor
  from .bias import Bias
  from ..data import sparse_ratings
  from ..util import Stopwatch
label_desc: Use image node_id 3 for calling the BiasedSVD obj's underlying member method code with example usage: obj.predict_for_user(user, items, ratings) and returns: scores, pd