Class: DataMining::DBScan

Inherits:
Object
  • Object
show all
Defined in:
lib/data_mining/dbscan.rb

Overview

Density-Based clustering / Outlier-Detection Algorithm

Instance Method Summary collapse

Constructor Details

#initialize(data, radius, min_points) ⇒ DBScan

Find clusters and outliers

Example:

>> input      = [[:p1, [1,1]], [:p2, [2,1]], [:p3, [10,11]]]
>> radius     = 3
>> min_points = 2
>> dbscan     = DataMining::DBScan.cluster(input, radius, min_points)
>> dbscan.build!
>>
>> dbscan.clusters # gives array of clusters found (:p1, :p2)
>>
>> dbscan.outliers # gives array of outliers found (:p3)

Arguments:

data: (array of arrays, like [[:id, value], [:id2, value2]]
radius: (integer)
min_points: (integer)


21
22
23
24
25
26
27
28
# File 'lib/data_mining/dbscan.rb', line 21

def initialize(data, radius, min_points)
  @data               = data.map { |i, v| DataMining::Point.new(i, v) }
  @radius             = radius
  @min_points         = min_points
  @current_cluster_id = 0
  @clusters           = {}
  @unvisited_points   = @data.shuffle
end

Instance Method Details

#cluster!Object



30
31
32
33
# File 'lib/data_mining/dbscan.rb', line 30

def cluster!
  dbscan
  clusters
end

#clustersObject



39
40
41
# File 'lib/data_mining/dbscan.rb', line 39

def clusters
  @clusters.map { |cluster, points| { cluster => points.each(&:id) } }
end

#outliersObject



35
36
37
# File 'lib/data_mining/dbscan.rb', line 35

def outliers
  @data.select { |p| !p.assigned_to_cluster? }
end