Class: Broadlistening::HierarchicalClustering
- Inherits:
-
Object
- Object
- Broadlistening::HierarchicalClustering
- Defined in:
- lib/broadlistening/hierarchical_clustering.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(centroids, labels, target_clusters) ⇒ HierarchicalClustering
constructor
A new instance of HierarchicalClustering.
- #merge ⇒ Object
Constructor Details
#initialize(centroids, labels, target_clusters) ⇒ HierarchicalClustering
14 15 16 17 18 19 |
# File 'lib/broadlistening/hierarchical_clustering.rb', line 14 def initialize(centroids, labels, target_clusters) @centroids = to_numo_array(centroids) @labels = labels.dup @target_clusters = target_clusters @n_original_clusters = @centroids.shape[0] end |
Class Method Details
.merge(centroids, labels, target_clusters) ⇒ Object
9 10 11 |
# File 'lib/broadlistening/hierarchical_clustering.rb', line 9 def merge(centroids, labels, target_clusters) new(centroids, labels, target_clusters).merge end |
Instance Method Details
#merge ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/broadlistening/hierarchical_clustering.rb', line 21 def merge return @labels if current_cluster_count <= @target_clusters # クラスタ情報を初期化 # 各クラスタ: {centroid: 重心, size: サイズ, members: 元のクラスタID} clusters = initialize_clusters # Ward法で階層的にマージ while clusters.size > @target_clusters c1_id, c2_id = find_ward_closest_pair(clusters) break if c1_id.nil? merge_ward_clusters!(clusters, c1_id, c2_id) end # 元のラベルを新しいクラスタIDにマッピング build_final_labels(clusters) end |