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