From d7ac6104eb6900af5bacb8c4d626274b0067586f Mon Sep 17 00:00:00 2001 From: anquetil Date: Mon, 25 Dec 2023 20:20:13 +0100 Subject: [PATCH] Adding some explanation for hierarchical clustering --- README.md | 1 + wiki/Tutorials/clustering-simple-example.md | 123 ++++++++++---------- wiki/Tutorials/img/complete-linkage.png | Bin 0 -> 22847 bytes wiki/Tutorials/img/dendrogram-viz.png | Bin 0 -> 23436 bytes wiki/Tutorials/img/single-linkage.png | Bin 0 -> 19253 bytes 5 files changed, 63 insertions(+), 61 deletions(-) create mode 100644 wiki/Tutorials/img/complete-linkage.png create mode 100644 wiki/Tutorials/img/dendrogram-viz.png create mode 100644 wiki/Tutorials/img/single-linkage.png diff --git a/README.md b/README.md index 964a730..8b520e9 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ Keep in mind that the wiki and pharo-ai is right now under construction version - [Using K-Means Clustering Machine Learning Algorithm - Simple Example](./wiki/Tutorials/clustering-simple-example.md) - [Clustering Users of a Credit Card Company using the K-Means Algorithm](./wiki/Tutorials/clustering-credit-card-kmeans.md) - [Image segmentation using K-Kmeans](./wiki/Tutorials/image-segmentation-using-kmeans.md) +- [Hierarchical clustering](./wiki/Tutorials/hierarchical-clustering.md) ##### Data Mining diff --git a/wiki/Tutorials/clustering-simple-example.md b/wiki/Tutorials/clustering-simple-example.md index 2f6a306..bbd07f8 100644 --- a/wiki/Tutorials/clustering-simple-example.md +++ b/wiki/Tutorials/clustering-simple-example.md @@ -1,92 +1,93 @@ -# Using K-Means Clustering Machine Learning Algorithm - Simple Example +# Using Agglomerative Hierarchical Clustering Algorithm - Simple Example -_If you don't have the library installed, you can refer to: [Getting Started page](../GettingStarted/GettingStarted.md)_ - -In this example, we are going to cluster data using the k-means algorithm, using the iris dataset (yes, we know... but this dataset is well-suited for this example.) - -As a first step, we will load the iris dataset: - -```st -iris := AIDatasets loadIris. -``` - -If we inspect the variable (open the Pharo Inspector) you will see that you have 4 column names. - - - -For plotting the data, we will use Roassal. In this tutorial we will not show the code, for simplicity purpous. You can see [their webpage](https://github.com/ObjectProfile/Roassal3). +## Overview -For this example, we will use only two features of the flower: `petal length (cm)` and `petal width (cm)`. +_If you don't have the library installed, you can refer to: [Getting Started page](../GettingStarted/GettingStarted.md)_ - +In this example, we are going to cluster data using the hierarchical clustering algorithm on a dummy example. -With the data plotted in this way, we can see, it seems the data can be clustered in two or three groups. So, we will keep only those. +Hierarchical clustering works on a collection of vectors representing *elements* to cluster. +Each element is represented by an `AIVectorItem`. -```st -data := iris columns: #('petal length (cm)' 'petal width (cm)'). -``` +The agglomerative hierarchical clustering algorithm will recursively group together the two closest elements of the collection into one new cluster. -For the moment, the algorithm expects to receive a Collection. The variables `iris` and `data` are [DataFrame](https://github.com/PolyMathOrg/DataFrame) objects. So, we need to convert them to an Array. +1. Each elements can be seen as an atomic cluster; +1. Group two closest clusters (atomic or not) into one; +1. Thus at each iteration, there is one less cluster in the collection (replacing two clusters by their new parent); +1. Recompute the distance from new cluster to all remaining ones +1. Go back to step 2. until there is only one cluster left (the "root") containing all the initial elements. -```st -dataAsArray := data asArrayOfRows. -``` +## Example -Now, we will create the K-Means clustering model with two clusters. That means, that the algorithm will automatically cluster the data into 2 groups. +We will use a dummy example of 12 elements. +We make an **Array** of `AIVectorItem`: ```st -kMeans := AIKMeans numberOfClusters: 2. -kMeans fit: dataAsArray. +elts := { + AIVectorItem with: #a and: #(1 0). + AIVectorItem with: #b and: #(1 0). + AIVectorItem with: #c and: #(2 0). + AIVectorItem with: #d and: #(3 0). + AIVectorItem with: #e and: #(4 0). + AIVectorItem with: #f and: #(5 0). + AIVectorItem with: #g and: #(6 0). + AIVectorItem with: #h and: #(7 0). + AIVectorItem with: #i and: #(8 0). + AIVectorItem with: #j and: #(9 0). + AIVectorItem with: #k and: #(0 10). + AIVectorItem with: #l and: #(0 10). +}. ``` -Finally, to see how to algorithm is clustering the data, we can inspect the clusters. +Note that #a is equal to #b and #k is equal to #l. therefore they will be the first elements to be grouped in clusters in iteration 1 and 2 of the algorithm. +To compute the hierarchy of clusters (called a *Dendrogram*) we use: ```st -clusters := kMeans clusters. +engine := AIClusterEngine with: elts. +engine hierarchicalClusteringUsing: #averageLinkage. ``` -For better understanding the data, we can plot each data point with its corresponding group. +The dendrogram can be found in `engine dendrogram` it's a binary three with a `#left` and `#right` children. - +Note: The dendrogram may be visualized with Roassal extension: [https://github.com/pharo-ai/viz](https://github.com/pharo-ai/viz). +For this, just execute `engine plotDendrogram` -There is one point that it looks likat it is misplaced. We can try cluster the data into three groups. + -```st -kMeans := AIKMeans numberOfClusters: 3. -kMeans fit: dataAsArray. -``` +## Configuration -Now, if we plot again the data with each point belonging to its corresponding cluster, it will look like this: +The argument `#averageLinkage` in the code above is used to compute the distance of new clusters to the other ones. +There are 3 values possible: +- `#singleLinkage`: Distance between two clusters is the distance between their two closest (more similar) objects. +- `#averageLinkage`: Distance between two clusters is the arithmetic mean of all the distances between the objects of one and the objects of the other. +- `#completeLinkage`: Distance between two clusters is the distance between their two most dissimilar objects. -We already know, by looking the dataset, that there is only three different groups of iris flowers. But, the k-means algorithm classified the data automatically. +Single Linkage can result in clusters formed of a "chain of elements" but the first and last elements quite far from one another. -This is the result of the cluster. + - +Complete linkage results in clusters with "compact contours", but elements not necessarily compact inside. +Notice that the left branch of the big cluster (ie. top branch on the plot) is better balanced with Complete linkage than with Average linkage (first figure above) -If we look at the real data plotted, we can see that there is five points that were assigned to the wrong cluster. + - +## Distance matrix -## All the code: - -```st -"Load the dataset" -iris := AIDatasets loadIris. +In the code above, the distance matrix is a default one computed from the elements. +In this case the distance is the sum of the square differences between two vectors. -"Inspect the data set (open the Pharo Inspector)" -iris columnNames. "('sepal length (cm)' 'sepal width (cm)' 'petal length (cm)' 'petal width (cm)' 'species')" +One can provide a different matrix using any other possible metrics. +This must be a **distance** matrix (higher value means more different), not a similarity matrix (higher value mean more similar). -"Use only two features of the data" -data := iris columns: #('petal length (cm)' 'petal width (cm)'). +## Threshold -"Convert the data from DataFrame to Array" -dataAsArray := data asArrayOfRows. +In the plots, the horizontal bar are not always at the same position. +This depends on the `threshold` of each cluster. +The threshold of a cluster can be seen as the distance between its two elements. -"Train the clustering algorithm" -kMeans := AIKMeans numberOfClusters: 3. -kMeans fit: dataAsArray. +With less elements, the threshold is typically small (elements close one to the other). +With more elements, the difference start to be bigger and the threshold augment. -"Gettting the clusters" -clusters := kMeans clusters. -``` \ No newline at end of file +If you compare the first plot (average linkage) and the last one (complete linkage), you might see that the threshold of the first left node is smaller with average linkage. +The two clusters contain the same elements (10 elements with a 0 as second part). +But because complete linkage computes the distance between two clusters as the distance between their two most dissimilar objects, the threshold ends up being higher. \ No newline at end of file diff --git a/wiki/Tutorials/img/complete-linkage.png b/wiki/Tutorials/img/complete-linkage.png new file mode 100644 index 0000000000000000000000000000000000000000..85e122d33a6d49464812133718748a3c6f29979e GIT binary patch literal 22847 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 literal 0 HcmV?d00001 diff --git a/wiki/Tutorials/img/dendrogram-viz.png b/wiki/Tutorials/img/dendrogram-viz.png new file mode 100644 index 0000000000000000000000000000000000000000..ccc832d7b71407bfed41a3c2244f6409221f8eae GIT binary patch literal 23436 zcmce;bx_w`^e&1LN`o{KB2v=bAT15j-QC?G-JmqmNK1D&DBa!N-FY_p{?5!jbLakd zkHg4(;S+nWz1Fjywf3_KmXQ)cgu{h{fPg?0{Veze0^%hM1jLKH*WiB$?l$Ty@D0k2 zUsV1z_~-swKL~uru@_Rdm$Ndocha#nfH1POvM`{w)3Y@&u(UI_vOj`s;Q<$sKVKwZ zYoKFqVrBVG-o(NH!rZ}<<{bm`JN+F!@STo<@f|%o2O~QN0~_1d2XhFBcMzh2eDco8 z`wLFm=mw8HCs*c6lF}?qFJYrz!lL-3+oQ@-=<;p+n(lLPlqz$J<9zE(?h^#}ewPBS zJ>yF@MN`hJFQ1RN8)g=69=;aa+C%v~HkY($ZzU!kA$&NSF-mn2POK~DznGXTyXjp{u9FQ>sMd z@oUc@`+jklZs&C9$l;HWvb~3Ueup~pg{C*TO^6j%bj&xLu%g&OPR^`Sf->STq|w2b zmyY-M_rrS^WR(Q1azB=S))z(WK&G*~5>NbT4i8mM$XKDB3QOO9cy&XxD|?8K#<${Q zTK}6Nco#?W(Gk`n4)TR_RK~}-_S&*<{c18@ z+>wz6S0ZC&BukwbkXgq4>a8tU)iwjMsQpQa9YsS+LP`~i#zJH%Aw(yLZeWGlV5L4i4Q zH+O|KZ`A9)lWEO$XyvF2TsAt5ESs9JxNV4G}-9J41`ST}3 zI*mtAL?msvh0nx2K zzw0woD=QHr#ABk59}BX~P{GdxUzwSk3ue_gJK5tuU&1D0%ux?PNX!= z)inlUWH&`fhVrZ*xb%@b-HdtdhfCC(Vxum)CSM9Wy5FHzYl1ylSA`;h0L>SOG`_uSfc6CeM$T1 zC8t0}Eh#yTSBzAcQDu$)lw9R+bG0aJTPhMbVMA3=5evio&1jQb=zDdXM&IV~5JkzG zn-RNfE3M9CD`dJ|tEYF1>I2ATm*r%%!NW1y3~^0em9)J$_wj$`u?&qmYACNwqY)WNbr0L1BL|dl5C% ze0Rv1EVYHRP=aC^!QuF8CXDez!tFhmX^Q5DbHdM8pCB)1`Kv7#MQwbez4H!#e&||} zt?|cjt5P0th*4zHdmWbb>c77?dq@Jm}Q*Pdd7kd-Pu-_=7ilkrWV1(�Q0_qY%I$R3Ns}dQf*2`5al5D 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 literal 0 HcmV?d00001 diff --git a/wiki/Tutorials/img/single-linkage.png b/wiki/Tutorials/img/single-linkage.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3ab4cc51af3f967fe6fbf5aa5a9778eee53db5 GIT binary patch literal 19253 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�ZLNW6% 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 Q3N)F))78&qol`;+09M7%V*mgE literal 0 HcmV?d00001