code: def predict_proba(self, X):
      X = X.astype(np.float32)
      X = np.ascontiguousarray(X)
      if X.ndim == 1:
          X = X[np.newaxis]
      D, I = self.index.search(X, self.n_neighbors)
      outputs = np.squeeze(self.labels[I])
      weights = _get_weights(D, self.weights)
      if weights is None:
          weights = np.ones_like(I)
  
      probabilities = np.empty(
          (X.shape[0], len(self.classes)), dtype=np.float64
      )
      for k, class_k in enumerate(self.classes):
          proba_k = np.sum(
              np.multiply(outputs == class_k, weights), axis=1
          )
          probabilities[:, k] = proba_k
  
      normalizer = np.sum(probabilities, axis=1)
      normalizer[normalizer == 0.0] = 1.0
      probabilities /= normalizer[:, np.newaxis]
      return probabilities
  
imports: import logging
  import numpy
  from pandas import DataFrame
  from scipy.stats import mode
  from sklearn.utils.extmath import weighted_mode
  from autogluon.common.utils.try_import import try_import_faiss
label_desc: Use image node_id 4 for calling the FAISSNeighborsClassifier obj's underlying member method code with example usage: obj.predict_proba(X) and returns: probabilities