class Newral::Classifier::Dendogram
Attributes
distances[R]
max_distance[R]
nodes[R]
Public Class Methods
new( points, max_runs: 100, abort_at_distance: 0.5 )
click to toggle source
# File lib/newral/classifier/dendogram.rb, line 8 def initialize( points, max_runs: 100, abort_at_distance: 0.5 ) @distances = [] @abort_at_distance = abort_at_distance @max_runs = max_runs @nodes = points.collect{ |point| Node.new( point, from_point: true ) } end
Public Instance Methods
calculate_distances( node )
click to toggle source
# File lib/newral/classifier/dendogram.rb, line 29 def calculate_distances( node ) @nodes.each do |other_node| @distances << NodeDistance.new( node, other_node ) unless node==other_node end end
combine_nodes( node1, node2 )
click to toggle source
# File lib/newral/classifier/dendogram.rb, line 35 def combine_nodes( node1, node2 ) new_node = Node.new([node1,node2]) node1.parent_node = new_node node2.parent_node = new_node # remove node1 and node2 @nodes = @nodes.collect do |node| node unless node == node1 || node == node2 end.compact # remove distances for these 2 nodes @distances = @distances.collect do |distance| distance unless distance.node1 == node1 || distance.node1 == node2 || distance.node2 == node2 || distance.node2 == node1 end.compact # insert new node @nodes << new_node # calculate_distances for new node calculate_distances( new_node ) @distances.sort! end
process()
click to toggle source
# File lib/newral/classifier/dendogram.rb, line 15 def process runs = 0 @nodes.each do |node| calculate_distances( node ) end @distances.sort! @max_distance = @distances.last.distance while @distances.size > 2 && @distances.first.distance/@max_distance < @abort_at_distance && runs < @max_runs combine_nodes( @distances.first.node1, @distances.first.node2 ) runs = runs+1 end self end
to_cluster_set()
click to toggle source
# File lib/newral/classifier/dendogram.rb, line 62 def to_cluster_set clusters = @nodes.collect{|node| node.to_cluster } Data::ClusterSet.new( clusters: clusters ) end
to_s()
click to toggle source
# File lib/newral/classifier/dendogram.rb, line 56 def to_s @nodes.collect do |node| node.to_s end.join(" / ") end