Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| import seaborn as sns | |
| class KMeans: | |
| def __init__(self, k,max_iter=100): | |
| self.k = k | |
| self.max_iter = max_iter | |
| #initialize centroids randomly from the data points | |
| def centroid_init(self,X): | |
| random_indices = np.random.choice(X.shape[0], self.k, replace=False) | |
| return X[random_indices] | |
| #initialize centroids using k-means method | |
| def fit(self, X): | |
| self.cluster_centers_ = self.centroid_init(X) | |
| for _ in range(self.max_iter): | |
| distances=[] | |
| for point in X: | |
| d=[] | |
| for center in self.cluster_centers_: | |
| d.append(np.sqrt(np.sum((point-center)**2))) | |
| distances.append(d) | |
| labels=[] | |
| for d in distances: | |
| labels.append(np.argmin(d)) | |
| labels = np.array(labels) | |
| new_centroids=[] | |
| for i in range(self.k): | |
| points = X[labels == i] | |
| if len(points) > 0: | |
| new_centroids.append(np.mean(points, axis=0)) | |
| else: | |
| new_centroids.append(self.cluster_centers_[i]) | |
| new_centroids = np.array(new_centroids) | |
| if np.all(new_centroids == self.cluster_centers_): | |
| break | |
| self.cluster_centers_ = new_centroids | |
| self.labels_= labels | |
| #for predicting the labels of new data points | |
| def predict(self, X): | |
| labels=[] | |
| for point in X: | |
| d=[] | |
| for center in self.cluster_centers_: | |
| d.append(np.sqrt(np.sum((point-center)**2))) | |
| labels.append(np.argmin(d)) | |
| return np.array(labels) | |