Class: DataMining::DBScan
- Inherits:
-
Object
- Object
- DataMining::DBScan
- Defined in:
- lib/data_mining/dbscan.rb
Overview
Density-Based clustering / Outlier-Detection Algorithm
Instance Method Summary collapse
- #cluster! ⇒ Object
- #clusters ⇒ Object
-
#initialize(data, radius, min_points) ⇒ DBScan
constructor
Find clusters and outliers.
- #outliers ⇒ Object
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 |
#clusters ⇒ Object
39 40 41 |
# File 'lib/data_mining/dbscan.rb', line 39 def clusters @clusters.map { |cluster, points| { cluster => points.each(&:id) } } end |
#outliers ⇒ Object
35 36 37 |
# File 'lib/data_mining/dbscan.rb', line 35 def outliers @data.select { |p| !p.assigned_to_cluster? } end |