X-means menggunakan pola split-and-test: mulai dari cluster kasar, lalu membelah hanya jika skor statistik membaik. Pendekatan ini mengurangi trial-and-error manual untuk memilih k sekaligus menjaga kompleksitas tetap terkendali.
<p>X-means adalah jenis algoritma pengelompokan yang secara otomatis menentukan jumlah cluster saat pengelompokan berlangsung. Halaman ini membandingkan hasil dari k-means++ dan X-means.</p>
defplot_by_kmeans(X,k=5):y_pred=KMeans(n_clusters=k,random_state=random_state,init="random").fit_predict(X)plt.scatter(X[:,0],X[:,1],c=y_pred,marker="x")plt.title(f"k-means, n_clusters={k}")# Membuat data sampeln_samples=1000random_state=117117X,_=make_blobs(n_samples=n_samples,random_state=random_state,cluster_std=1,centers=10)# Jalankan k-means++.plot_by_kmeans(X)
Jalankan tanpa menentukan jumlah cluster dalam x-mean
#
frompyclustering.cluster.xmeansimportxmeansfrompyclustering.cluster.center_initializerimportkmeans_plusplus_initializerBAYESIAN_INFORMATION_CRITERION=0MINIMUM_NOISELESS_DESCRIPTION_LENGTH=1defplot_by_xmeans(X,c_min=3,c_max=10,criterion=BAYESIAN_INFORMATION_CRITERION,tolerance=0.025):initial_centers=kmeans_plusplus_initializer(X,c_min).initialize()xmeans_instance=xmeans(X,initial_centers,c_max,criterion=criterion,tolerance=tolerance)xmeans_instance.process()# Membuat data untuk plotclusters=xmeans_instance.get_clusters()n_samples=X.shape[0]c=[]fori,cluster_iinenumerate(clusters):X_ci=X[cluster_i]color_ci=[ifor_incluster_i]plt.scatter(X_ci[:,0],X_ci[:,1],marker="x")plt.title("x-means")# Jalankan x-meansplot_by_xmeans(X,c_min=3,c_max=10,criterion=BAYESIAN_INFORMATION_CRITERION)