class_docstr: Kernel Density Estimation
  
  Read more in the :ref:`User Guide <kernel_density>`.
  
  Parameters
  ----------
  bandwidth : float
      The bandwidth of the kernel.
  
  algorithm : string
      The tree algorithm to use.  Valid options are
      ['kd_tree'|'ball_tree'|'auto'].  Default is 'auto'.
  
  kernel : string
      The kernel to use.  Valid kernels are
      ['gaussian'|'tophat'|'epanechnikov'|'exponential'|'linear'|'cosine']
      Default is 'gaussian'.
  
  metric : string
      The distance metric to use.  Note that not all metrics are
      valid with all algorithms.  Refer to the documentation of
      :class:`BallTree` and :class:`KDTree` for a description of
      available algorithms.  Note that the normalization of the density
      output is correct only for the Euclidean distance metric. Default
      is 'euclidean'.
  
  atol : float
      The desired absolute tolerance of the result.  A larger tolerance will
      generally lead to faster execution. Default is 0.
  
  rtol : float
      The desired relative tolerance of the result.  A larger tolerance will
      generally lead to faster execution.  Default is 1E-8.
  
  breadth_first : boolean
      If true (default), use a breadth-first approach to the problem.
      Otherwise use a depth-first approach.
  
  leaf_size : int
      Specify the leaf size of the underlying tree.  See :class:`BallTree`
      or :class:`KDTree` for details.  Default is 40.
  
  metric_params : dict
      Additional parameters to be passed to the tree for use with the
      metric.  For more information, see the documentation of
      :class:`BallTree` or :class:`KDTree`.
docstr: Evaluate the density model on the data.
  
  Parameters
  ----------
  X : array_like, shape (n_samples, n_features)
      An array of points to query.  Last dimension should match dimension
      of training data (n_features).
  
  Returns
  -------
  density : ndarray, shape (n_samples,)
      The array of log(density) evaluations.
docstr_tok: ["Evaluate","the","density","model","on","the","data",".","Parameters","--","--","--","--","--","X",":","array_like",",","shape","(","n_samples",",","n_features",")","An","array","of","points","to","query",".","Last","dimension","should","match","dimension","of","training","data","(","n_features",")",".","Returns","--","--","--","-","density",":","ndarray",",","shape","(","n_samples",",",")","The","array","of","log","(","density",")","evaluations","."]
code: def score_samples(self, X):
      """Evaluate the density model on the data.
  
      Parameters
      ----------
      X : array_like, shape (n_samples, n_features)
          An array of points to query.  Last dimension should match dimension
          of training data (n_features).
  
      Returns
      -------
      density : ndarray, shape (n_samples,)
          The array of log(density) evaluations.
      """
      # The returned density is normalized to the number of points.
      # For it to be a probability, we must scale it.  For this reason
      # we'll also scale atol.
      X = check_array(X, order="C", dtype=DTYPE)
      N = self.tree_.data.shape[0]
      atol_N = self.atol * N
      log_density = self.tree_.kernel_density(
          X,
          h=self.bandwidth,
          kernel=self.kernel,
          atol=atol_N,
          rtol=self.rtol,
          breadth_first=self.breadth_first,
          return_log=True,
      )
      log_density -= np.log(N)
      return log_density
  
file_path: catboost/contrib/python/scikit-learn/py2/sklearn/neighbors/kde.py
imports: import numpy
  from scipy.special import gammainc
  from ..base import BaseEstimator
  from ..utils import check_array, check_random_state
  from ..utils.extmath import row_norms
  from .ball_tree import BallTree, DTYPE
  from .kd_tree import KDTree
label_desc: Use image node_id 4 for calling the KernelDensity obj's underlying member method code with example usage: obj.score_samples(X) and returns: log_density