Vectra AI can group similar network-security alerts by feature vectors to support downstream investigation. Implement one-dimensional-independent k-means clustering for a small batch of alert vectors.
Given points, an initial list of k centroids, and a maximum iteration count, repeatedly assign every point to its nearest centroid and recompute each centroid as the coordinate-wise mean of its assigned points.
Implement kmeans(points, initial_centroids, max_iterations). points is a non-empty list of equal-length numeric vectors. initial_centroids contains k equal-length numeric vectors, where 1 <= k <= len(points). Return a dictionary with:
labels: a list of length len(points), where each value is the assigned centroid index.centroids: the final list of k coordinate-wise mean vectors.Use squared Euclidean distance. If a point is equally close to multiple centroids, assign it to the lowest index. If a centroid receives no points during an iteration, leave it unchanged. Stop early when no centroid coordinate changes, or after max_iterations iterations.
def kmeans(points, initial_centroids, max_iterations):