class_docstr: A density based clustering method that expands clusters from 
  samples that have more neighbors within a radius specified by eps
  than the value min_samples.
  
  Parameters:
  -----------
  eps: float
      The radius within which samples are considered neighbors
  min_samples: int
      The number of neighbors required for the sample to be a core point. 
docstr: Recursive method which expands the cluster until we have reached the border
  of the dense area (density determined by eps and min_samples) 
docstr_tok: ["Recursive","method","which","expands","the","cluster","until","we","have","reached","the","border","of","the","dense","area","(","density","determined","by","eps","and","min_samples",")"]
code: def _expand_cluster(self, sample_i, neighbors):
      """Recursive method which expands the cluster until we have reached the border
      of the dense area (density determined by eps and min_samples)"""
      cluster = [sample_i]
      # Iterate through neighbors
      for neighbor_i in neighbors:
          if not neighbor_i in self.visited_samples:
              self.visited_samples.append(neighbor_i)
              # Fetch the sample's distant neighbors (neighbors of neighbor)
              self.neighbors[neighbor_i] = self._get_neighbors(
                  neighbor_i
              )
              # Make sure the neighbor's neighbors are more than min_samples
              # (If this is true the neighbor is a core point)
              if len(self.neighbors[neighbor_i]) >= self.min_samples:
                  # Expand the cluster from the neighbor
                  expanded_cluster = self._expand_cluster(
                      neighbor_i, self.neighbors[neighbor_i]
                  )
                  # Add expanded cluster to this cluster
                  cluster = cluster + expanded_cluster
              else:
                  # If the neighbor is not a core point we only add the neighbor point
                  cluster.append(neighbor_i)
      return cluster
  
file_path: ML-From-Scratch/mlfromscratch/unsupervised_learning/dbscan.py
imports: from __future__ import print_function, division
  import numpy
  from mlfromscratch.utils import Plot, euclidean_distance, normalize
label_desc: Use image node_id 3 for calling the DBSCAN obj's underlying member method code with example usage: obj._expand_cluster(sample_i, neighbors) and returns: cluster