Class: Topical::Clustering::KMeansAdapter

Inherits:
Adapter
  • Object
show all
Defined in:
lib/topical/clustering/kmeans_adapter.rb

Overview

Adapter for ClusterKit’s K-means implementation

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Adapter

#n_clusters, #n_noise_points

Constructor Details

#initialize(k: 5, random_seed: nil) ⇒ KMeansAdapter

Returns a new instance of KMeansAdapter.



9
10
11
12
13
14
15
16
17
# File 'lib/topical/clustering/kmeans_adapter.rb', line 9

def initialize(k: 5, random_seed: nil)
  @k = k
  @random_seed = random_seed
  
  @clusterer = ClusterKit::Clustering::KMeans.new(
    k: k,
    random_seed: random_seed
  )
end

Instance Attribute Details

#clustererObject (readonly)

Access to underlying ClusterKit object if needed



41
42
43
# File 'lib/topical/clustering/kmeans_adapter.rb', line 41

def clusterer
  @clusterer
end

Instance Method Details

#cluster_centersObject

Access cluster centers



36
37
38
# File 'lib/topical/clustering/kmeans_adapter.rb', line 36

def cluster_centers
  @clusterer.cluster_centers
end

#fit(embeddings) ⇒ Object



26
27
28
29
# File 'lib/topical/clustering/kmeans_adapter.rb', line 26

def fit(embeddings)
  @clusterer.fit(embeddings)
  self
end

#fit_predict(embeddings) ⇒ Object



19
20
21
22
23
24
# File 'lib/topical/clustering/kmeans_adapter.rb', line 19

def fit_predict(embeddings)
  labels = @clusterer.fit_predict(embeddings)
  @n_clusters = @k
  @n_noise_points = 0  # K-means doesn't have noise points
  labels
end

#predict(embeddings) ⇒ Object



31
32
33
# File 'lib/topical/clustering/kmeans_adapter.rb', line 31

def predict(embeddings)
  @clusterer.predict(embeddings)
end