что precompute_distances делает в методе sklearn kmeans? - PullRequest
0 голосов
/ 24 апреля 2018

Я ищу утилиту атрибута precompute_distances:

    class sklearn.cluster.KMeans(n_clusters=8, init=’k-means++’, n_init=10, 
    max_iter=300, tol=0.0001, precompute_distances=’auto’, verbose=0, 
    random_state=None, copy_x=True, n_jobs=1, algorithm=’auto’)

Какие расстояния он предварительно вычисляет?

1 Ответ

0 голосов
/ 24 апреля 2018

Для каждой итерации kmeans нам нужно найти ближайший кластер для каждого образца, чтобы выполнить маркировку. Если pre_compute == True, это делается через metrics.pairwise_distances_argmin_min(). Если pre_compute == False, это делается через cluster._k_means._assign_labels_array()

https://github.com/scikit-learn/scikit-learn/blob/a24c8b464d094d2c468a16ea9f8bf8d42d949f84/sklearn/cluster/k_means_.py#L618

Первый метод использует матричные операции, в то время как последний вычисляет попарные расстояния по одной паре за раз. Вот почему precompute = True будет быстрее, но будет использовать больше памяти.

Эти минимальные расстояния нельзя кэшировать между итерациями, потому что центры kmeans будут меняться.

...