chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import random
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from sklearn import datasets
|
||||
from mla.kmeans import KMeans
|
||||
from mla.gaussian_mixture import GaussianMixture
|
||||
|
||||
random.seed(1)
|
||||
np.random.seed(6)
|
||||
|
||||
|
||||
def make_clusters(skew=True, *arg, **kwargs):
|
||||
X, y = datasets.make_blobs(*arg, **kwargs)
|
||||
if skew:
|
||||
nrow = X.shape[1]
|
||||
for i in np.unique(y):
|
||||
X[y == i] = X[y == i].dot(np.random.random((nrow, nrow)) - 0.5)
|
||||
return X, y
|
||||
|
||||
|
||||
def KMeans_and_GMM(K):
|
||||
COLOR = "bgrcmyk"
|
||||
|
||||
X, y = make_clusters(skew=True, n_samples=1500, centers=K)
|
||||
_, axes = plt.subplots(1, 3)
|
||||
|
||||
# Ground Truth
|
||||
axes[0].scatter(X[:, 0], X[:, 1], c=[COLOR[int(assignment)] for assignment in y])
|
||||
axes[0].set_title("Ground Truth")
|
||||
|
||||
# KMeans
|
||||
kmeans = KMeans(K=K, init="++")
|
||||
kmeans.fit(X)
|
||||
kmeans.predict()
|
||||
axes[1].set_title("KMeans")
|
||||
kmeans.plot(ax=axes[1], holdon=True)
|
||||
|
||||
# Gaussian Mixture
|
||||
gmm = GaussianMixture(K=K, init="kmeans")
|
||||
gmm.fit(X)
|
||||
axes[2].set_title("Gaussian Mixture")
|
||||
gmm.plot(ax=axes[2])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
KMeans_and_GMM(4)
|
||||
Reference in New Issue
Block a user