class AgglomerativeClustering::SilhouetteCoefficient

Attributes

main_cluster[R]

Public Class Methods

new(main_cluster) click to toggle source
# File lib/agglomerative_clustering/silhouette_coefficient.rb, line 6
def initialize main_cluster
  @main_cluster = main_cluster
end

Public Instance Methods

calculate_a1(point) click to toggle source

Calculates the a1 value of a cluster

# File lib/agglomerative_clustering/silhouette_coefficient.rb, line 32
def calculate_a1 point
  distances = []
  main_cluster.points.each do |point1|
    distances << euclidean_distance(point, point1).round(2)
  end
  return 0 if distances.size == 1
  (distances.inject(:+)/(distances.size - 1)).round(2)
end
measure(clusters) click to toggle source

Measures the silhouette coefficient of a cluster compared to all other clusters Returns the average silhouette coefficient of a cluster

# File lib/agglomerative_clustering/silhouette_coefficient.rb, line 12
def measure clusters
  silhouettes = []
  average_distances = []
    main_cluster.points.each do |point1|
      a1 = calculate_a1(point1)
      (clusters - [main_cluster]).each do |cluster|
        distances = []
        cluster.points.each do |point2|
          distances << euclidean_distance(point1, point2).round(2)
        end
        average_distances << distances.inject(:+)/distances.size
      end
      b1 = average_distances.min || 0
      s1 = (b1 - a1)/[a1,b1].max
      silhouettes << s1
    end
  (silhouettes.inject(:+) / silhouettes.size).round(2)
end