added k means clustering