Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def quality(x, y):
- """
- Инерция
- """
- # сколько всего кластеров
- clusters_n = 0
- # ответ
- res = 0
- # сколько точек в каждом кластере
- points_in_cluster = {}
- # посчитаем сколько у нас всего кластеров и посчитаем сколько точек в каждом кластере
- for cluster_id in y:
- # пропускаем шумы
- if (cluster_id == -1):
- continue
- clusters_n = max(clusters_n, cluster_id)
- if (cluster_id in points_in_cluster):
- points_in_cluster[cluster_id] += 1
- else:
- points_in_cluster[cluster_id] = 1
- clusters_n += 1
- centroids = np.zeros(clusters_n, dtype=object)
- for index in range(len(x)):
- # пропускаем шумы
- if (y[index] == -1):
- continue
- centroids[y[index]] += np.array(x[index])
- for cluster_id in points_in_cluster:
- centroids[cluster_id] /= points_in_cluster[cluster_id]
- res = 0
- centroids = centroids.tolist()
- if (len(centroids) == 1):
- return -1
- for c in centroids:
- c = c.tolist()
- for index in range(len(x)):
- if (y[index] == -1):
- continue
- dist = cdist([x[index]], centroids, 'sqeuclidean')[0]
- mini_dist = 1e100
- for d in dist:
- mini_dist = min(mini_dist, d)
- res += mini_dist
- return res
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement