Demonstration of k-means clustering algorithm using python

import numpy as np
import matplotlib.pyplot as plt
def compare(a,b):
    if len(a)!=len(b):
        return True
    for i in range(len(a)):
            if a[i]!=b[i]:
                return True
    return False
dataset=list(np.random.normal(12,1,30))
dataset+=list(np.random.normal(12,10,30))
dataset+=list(np.random.normal(12,100,30))
k=int(input('Enter the number of clusters:'))
centroids=[]
newcentroids=dataset[:k]
clusters={}
while (compare(centroids,newcentroids)):    
    p=plt
    for i in range(k):
        clusters[i]=[]
    centroids=newcentroids
    newcentroids=[]
    for i in range(len(dataset)):
        key=0
        min=abs(dataset[i]-centroids[0])
        for j in range(1,len(centroids)):
            d=abs(centroids[j]-dataset[i])
            if min>d:
                min=d
                key=j
        clusters[key].append(dataset[i])
    for key in clusters:
        if len(clusters[key])!=0:
            newcentroids.append(float(sum(clusters[key]))/float(len(clusters[key])))
        else:
            newcentroids.append(0)
    for key in clusters:
        p.plot(clusters[key],'o',color='#'+str(np.random.randint(111111,999999)))
for i in clusters:
    print(i,':',clusters[i])

Comments

Popular Posts