class Ai4r::Clusterers::WardLinkageHierarchical

Hierarchical version to store classes as merges occur.

Attributes

cluster_tree[R]

Public Class Methods

new(depth = nil) click to toggle source
Calls superclass method Ai4r::Clusterers::SingleLinkage.new
# File lib/ai4r/clusterers/ward_linkage_hierarchical.rb, line 16
def initialize(depth = nil)
  @cluster_tree = []
  @depth = depth
  @merges_so_far = 0
  super()
end

Public Instance Methods

build(data_set, number_of_clusters) click to toggle source
Calls superclass method Ai4r::Clusterers::WardLinkage#build
# File lib/ai4r/clusterers/ward_linkage_hierarchical.rb, line 23
def build(data_set, number_of_clusters)
  data_len = data_set.data_items.length
  @total_merges = data_len - number_of_clusters
  super
  @cluster_tree << self.clusters
  @cluster_tree.reverse!
  return self
end

Protected Instance Methods

merge_clusters(index_a, index_b, index_clusters) click to toggle source
# File lib/ai4r/clusterers/ward_linkage_hierarchical.rb, line 34
def merge_clusters(index_a, index_b, index_clusters)
  # only store if no or above depth
  if @depth.nil? or @merges_so_far > @total_merges - @depth
    # store current clusters
    stored_distance_matrix = @distance_matrix.dup
    @cluster_tree << build_clusters_from_index_clusters(index_clusters)
    @distance_matrix = stored_distance_matrix
  end
  @merges_so_far += 1
  super
end