The k-means algorithm, a straightforward and widely used clustering algorithm. Given a set of objects (records), the goal of clustering or segmentation is to divide these objects into groups or “clusters” such that objects within a group tend to be more similar to one another as compared to objects belonging to different groups. In other words, clustering algorithms place similar points in the same cluster while placing dissimilar points in different clusters.Note that,in contrast to supervised tasks such as regression or classiﬁcation where there is a notion of a target value or class label, the objects that form the inputs to a clustering procedure do not come with an associated target. Therefore, clustering is often referred to as unsupervised learning. Because there is no need for labeled data, unsupervised algorithms are suitable for many applications where labeled data is difﬁcult to obtain. Unsupervised tasks such as clustering are also often used to explore and characterize the dataset before running a supervised learning task. Since clustering makes no use of class labels, some notion of similarity must be deﬁned based on the attributes of the objects. The deﬁnition of similarity and the method in which points are clustered differ based on the clustering algorithm being applied. Thus, different clustering algorithms are suited to different types of datasets and different purposes. The “best” clustering algorithm to use therefore depends on the application. It is not uncommon to try several different algorithms and choose depending on which is the most useful.

` 1: Input: Dataset D, number clusters k`

` 2: Output: Set of cluster representatives C, cluster membership vector m`

3: /* Initialize cluster representatives C */

` 4: Randomly choose k data points from D`

5: 5: Use these k points as initial set of cluster representatives C

` 6: repeat`

7: /* Data Assignment */

8: Reassign points in D to closest cluster mean

9: Update m such that mi is cluster ID of ith point in D

10: 10: /* Relocation of means */

11: Update C such that cj is mean of points in jth cluster

` 12: until convergence of objective function summation(i=1 to N)(argminj||xi −cj||2 2)`