Class: KMeansClustering::Job

Inherits:
Object
  • Object
show all
Defined in:
lib/kmeans-clustering.rb

Overview

job that will be used for parallelization with Cabiri

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(centers, elements) ⇒ Job

Returns a new instance of Job.



78
79
80
81
# File 'lib/kmeans-clustering.rb', line 78

def initialize(centers, elements)
  @centers = centers
  @elements = elements
end

Instance Attribute Details

#centersObject

Returns the value of attribute centers.



75
76
77
# File 'lib/kmeans-clustering.rb', line 75

def centers
  @centers
end

#elementsObject

Returns the value of attribute elements.



76
77
78
# File 'lib/kmeans-clustering.rb', line 76

def elements
  @elements
end

Instance Method Details

#aggregateProximityData(data) ⇒ Object



109
110
111
112
113
114
115
116
# File 'lib/kmeans-clustering.rb', line 109

def aggregateProximityData(data)
  results = {}
  data.each do |center, elements|
    sum = KMeansClustering::calcSum.call(elements)
    results[center] = {:sum => sum, :nb_elements => elements.length}
  end
  results
end

#assignElementsToClosestCenterObject



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/kmeans-clustering.rb', line 89

def assignElementsToClosestCenter
  results = Hash.new { |h,k| h[k] = [] }

  @elements.each do |element|
    best_center = nil
    best_distance = nil

    @centers.each do |center|
      distance = KMeansClustering::calcDistanceSquared.call(center, element)
      if best_distance.nil? or distance < best_distance
        best_center = center
        best_distance = distance
      end
    end
    results[best_center] << element
  end

  results
end

#runObject



83
84
85
86
87
# File 'lib/kmeans-clustering.rb', line 83

def run
  proximity_data = assignElementsToClosestCenter
  aggregated_proximity_data = aggregateProximityData(proximity_data)
  aggregated_proximity_data
end