Skip to content

Instantly share code, notes, and snippets.

@cohnt
Last active June 23, 2022 14:51
Show Gist options
  • Save cohnt/9eef368f58abd25fb37ddd27902f2315 to your computer and use it in GitHub Desktop.
Save cohnt/9eef368f58abd25fb37ddd27902f2315 to your computer and use it in GitHub Desktop.
Comparison of k-means, k-medians, and k-medoids clustering on a toy dataset with 2 clusters and an outlier.
import numpy as np
from pyclustering.cluster.kmeans import kmeans, kmeans_visualizer
from pyclustering.cluster.kmedians import kmedians
from pyclustering.cluster.kmedoids import kmedoids
from pyclustering.cluster import cluster_visualizer
sample = np.array([
[0, 0],
[0, 1],
[1, 0],
[1, 1],
[5, 0],
[5, 1],
[6, 0],
[6, 1],
[3, 8]
])
initial_centers = [[0.0, 0.0], [5.0, 0.0]]
# Create instance of K-Means algorithm with prepared centers.
kmeans_instance = kmeans(sample, initial_centers)
# Run cluster analysis and obtain results.
kmeans_instance.process()
clusters = kmeans_instance.get_clusters()
final_centers = kmeans_instance.get_centers()
# Visualize obtained results
kmeans_visualizer.show_clusters(sample, clusters, final_centers)
initial_medians = [[0.0, 0.0], [5.0, 0.0]]
kmedians_instance = kmedians(sample, initial_medians)
# Run cluster analysis and obtain results.
kmedians_instance.process()
clusters = kmedians_instance.get_clusters()
medians = kmedians_instance.get_medians()
# Visualize clustering results.
visualizer = cluster_visualizer()
visualizer.append_clusters(clusters, sample)
visualizer.append_cluster(medians, marker='*', markersize=10)
visualizer.show()
# Set random initial medoids.
initial_medoids = [1, 5]
# Create instance of K-Medoids algorithm.
kmedoids_instance = kmedoids(sample, initial_medoids)
# Run cluster analysis and obtain results.
kmedoids_instance.process()
clusters = kmedoids_instance.get_clusters()
medoids = sample[kmedoids_instance.get_medoids()]
# Show allocated clusters.
print(clusters)
# Display clusters.
visualizer = cluster_visualizer()
visualizer.append_clusters(clusters, sample)
visualizer.append_cluster(medoids, marker='*', markersize=10)
visualizer.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment