class_docstr: Fill in missing each missing row/column value by averaging across the
  k-nearest neighbors columns (taking into account missing data when
  computing column similarities and choosing which neighbors to inspect).
  
  Currently does not inherit from Solver since it expects sparse inputs in
  the form of nested dictionaries.
docstr: Compute the continuous Jacard similarity between all pairs
  of keys in dictionary-of-dictionaries given as an input.
  
  Returns three element tuple:
      - similarity dictionary: (key, key) -> float
      - overlap count dictionary: key -> key -> int
      - weight dictionary: key -> key -> float
docstr_tok: ["Compute","the","continuous","Jacard","similarity","between","all","pairs","of","keys","in","dictionary-of-dictionaries","given","as","an","input",".","Returns","three","element","tuple",":","-","similarity","dictionary",":","(","key",",","key",")","-",">","float","-","overlap","count","dictionary",":","key","-",">","key","-",">","int","-","weight","dictionary",":","key","-",">","key","-",">","float"]
code: def jacard_similarity_from_nested_dicts(self, nested_dictionaries):
      """
      Compute the continuous Jacard similarity between all pairs
      of keys in dictionary-of-dictionaries given as an input.
  
      Returns three element tuple:
          - similarity dictionary: (key, key) -> float
          - overlap count dictionary: key -> key -> int
          - weight dictionary: key -> key -> float
      """
      sims = {}
      overlaps = {}
      weights = {}
      for a, column_dict_a in nested_dictionaries.items():
          row_set_a = set(column_dict_a.keys())
          for b, column_dict_b in nested_dictionaries.items():
              row_set_b = set(column_dict_b.keys())
              common_rows = row_set_a.intersection(row_set_b)
              n_overlap = len(common_rows)
              overlaps[(a, b)] = n_overlap
              total = 0.0
              weight = 0.0
              for row_name in common_rows:
                  value_a = column_dict_a[row_name]
                  value_b = column_dict_b[row_name]
                  minval = min(value_a, value_b)
                  maxval = max(value_a, value_b)
                  total += minval
                  weight += maxval
              weights[(a, b)] = weight
              if weight < self.min_weight_for_similarity:
                  continue
              if n_overlap < self.min_count_for_similarity:
                  continue
              sims[(a, b)] = total / weight
      return sims, overlaps, weights
  
file_path: fancyimpute/fancyimpute/similarity_weighted_averaging.py
imports: from collections import defaultdict
  from sklearn.utils import check_array
  import numpy
  from .dictionary_helpers import collect_nested_keys, reverse_lookup_from_nested_dict, matrix_to_nested_dictionary, transpose_nested_dictionary
label_desc: Use image node_id 2 for calling the SimilarityWeightedAveraging obj's underlying member method code with example usage: obj.jacard_similarity_from_nested_dicts(nested_dictionaries) and returns: sims,  overlaps,  weights