class_docstr: Base class for Item-Item Nearest Neighbour recommender models
  here.
  
  Parameters
  ----------
  K : int, optional
      The number of neighbours to include when calculating the item-item
      similarity matrix
  num_threads : int, optional
      The number of threads to use for fitting the model. Specifying 0
      means to default to the number of cores on the machine.
code: def load(cls, fileobj_or_path):
      # numpy.save automatically appends a npz suffic, numpy.load doesn't apparently
      if isinstance(
          fileobj_or_path, str
      ) and not fileobj_or_path.endswith(".npz"):
          fileobj_or_path = fileobj_or_path + ".npz"
  
      with np.load(fileobj_or_path, allow_pickle=False) as data:
          ret = cls()
          if data.get("data") is not None:
              similarity = csr_matrix(
                  (data["data"], data["indices"], data["indptr"]),
                  shape=data["shape"],
              )
              ret.similarity = similarity
              ret.scorer = NearestNeighboursScorer(similarity)
          ret.K = data["K"]
          return ret
  
imports: import numpy
  from numpy import bincount, log, log1p, sqrt
  from scipy.sparse import coo_matrix, csr_matrix
  from ._nearest_neighbours import NearestNeighboursScorer, all_pairs_knn
  from .recommender_base import RecommenderBase
  from .utils import _batch_call
label_desc: Use image node_id 9 for calling the ItemItemRecommender obj's underlying member method code with example usage: obj.load(cls, fileobj_or_path) and returns: ret