Class: Newral::Classifier::KMeansCluster
- Inherits:
-
Object
- Object
- Newral::Classifier::KMeansCluster
- Defined in:
- lib/newral/classifier/k_means_cluster.rb
Instance Method Summary collapse
-
#initialize(points, cluster_labels: [:a,:b], max_iterations: 20) ⇒ KMeansCluster
constructor
input array of points, cluster_labels: how many clusters to find, max_iterations stop after x approximations output hash of clusters where has keys are cluster_labels and value is points(Array) and center(point).
- #process ⇒ Object
Constructor Details
#initialize(points, cluster_labels: [:a,:b], max_iterations: 20) ⇒ KMeansCluster
input array of points, cluster_labels: how many clusters to find, max_iterations stop after x approximations output hash of clusters where has keys are cluster_labels and value is points(Array) and center(point)
9 10 11 12 13 |
# File 'lib/newral/classifier/k_means_cluster.rb', line 9 def initialize( points, cluster_labels: [:a,:b], max_iterations: 20 ) @points = points @cluster_labels = cluster_labels @max_iterations = max_iterations end |
Instance Method Details
#process ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/newral/classifier/k_means_cluster.rb', line 15 def process @cluster_set = Newral::Data::ClusterSet.new( cluster_labels: @cluster_labels ) runs = 0 @points.sample( @cluster_set.cluster_array.length ).each_with_index do |point,idx| @cluster_set.cluster_array[ idx ].center = point end while @cluster_set.cluster_array.collect{ |cluster| cluster.moved }.member?( true ) && runs < @max_iterations @cluster_set.clusters.each do |key,cluster| cluster.points=[] end # iterate over points assign, best cluster @points.each do |point| min_distance = { cluster:'none', distance: 99**99 } @cluster_set.clusters.each do |key,cluster| distance = Newral::Tools::euclidian_distance( cluster.center, point ) min_distance = {cluster: cluster, distance: distance } if distance < min_distance[:distance] end min_distance[:cluster].add_point point end @cluster_set.update_centers runs=runs+1 end @cluster_set end |