pyclustering.cluster.elbow.elbow Class Reference

Class represents Elbow method that is used to find out appropriate amount of clusters in a dataset. More...

Public Member Functions

def __init__ (self, data, kmin, kmax, kwargs)
 Construct Elbow method. More...
 
def process (self)
 Performs analysis to find out appropriate amount of clusters.
 
def get_amount (self)
 Returns appropriate amount of clusters.
 
def get_wce (self)
 Returns list of total within cluster errors for each K-value (kmin, kmin + 1, ..., kmax - 1).
 

Detailed Description

Class represents Elbow method that is used to find out appropriate amount of clusters in a dataset.

Elbow method performs clustering using K-Means algorithm for each K and estimate clustering results using sum of square erros. By default K-Means++ algorithm is used to calculate initial centers that are used by K-Means algorithm.

The Elbow is determined by max distance from each point (x, y) to segment from kmin-point (x0, y0) to kmax-point (x1, y1), where 'x' is K (amount of clusters), and 'y' is within-cluster error. Following expression is used to calculate Elbow length:

\[Elbow_{k} = \frac{\left ( y_{0} - y_{1} \right )x_{k} + \left ( x_{1} - x_{0} \right )y_{k} + \left ( x_{0}y_{1} - x_{1}y_{0} \right )}{\sqrt{\left ( x_{1} - x_{0} \right )^{2} + \left ( y_{1} - y_{0} \right )^{2}}}\]

Usage example of Elbow method for cluster analysis:

# read sample 'Simple3' from file (sample contains four clusters)
sample = read_sample(SIMPLE_SAMPLES.SAMPLE_SIMPLE3)
# create instance of Elbow method using K value from 1 to 10.
kmin, kmax = 1, 10
elbow_instance = elbow(sample, kmin, kmax)
# process input data and obtain results of analysis
elbow_instance.process()
amount_clusters = elbow_instance.get_amount() # most probable amount of clusters
wce = elbow_instance.get_wce() # total within-cluster errors for each K
# perform cluster analysis using K-Means algorithm
centers = kmeans_plusplus_initializer(sample, amount_clusters).initialize()
kmeans_instance = kmeans(sample, centers)
kmeans_instance.process()
# obtain clustering results and visualize them
clusters = kmeans_instance.get_clusters()
centers = kmeans_instance.get_centers()
kmeans_visualizer.show_clusters(sample, clusters, centers)

By default Elbow uses K-Means++ initializer to calculate initial centers for K-Means algorithm, it can be changed using argument 'initializer':

# perform analysis using Elbow method with random center initializer for K-Means algorithm inside of the method.
kmin, kmax = 1, 10
elbow_instance = elbow(sample, kmin, kmax, initializer=random_center_initializer)
elbow_instance.process()
elbow_example_simple_03.png
Elbows analysis with further K-Means clustering.

Definition at line 37 of file elbow.py.

Constructor & Destructor Documentation

◆ __init__()

def pyclustering.cluster.elbow.elbow.__init__ (   self,
  data,
  kmin,
  kmax,
  kwargs 
)

Construct Elbow method.

Parameters
[in]data(array_like): Input data that is presented as array of points (objects), each point should be represented by array_like data structure.
[in]kmin(int): Minimum amount of clusters that should be considered.
[in]kmax(int): Maximum amount of clusters that should be considered.
[in]**kwargsArbitrary keyword arguments (available arguments: 'ccore', 'initializer').

Keyword Args:

  • ccore (bool): If True then CCORE (C++ implementation of pyclustering library) is used (be default True).
  • initializer (callable): Center initializer that is used by K-Means algorithm (by default K-Means++).

Definition at line 87 of file elbow.py.


The documentation for this class was generated from the following file: