Re: Add low-memory special case for Euclidean single-linkage clustering
Julien Jerphanion <[email protected]> Fri, 07 Jul 2023 06:20:40 +0000
| Newsgroups | gmane.comp.python.scientific.devel |
|---|---|
| Message-ID | <A9P4qSx_rEpP4O8kucreL886eoJtLoUGii0t2lkNTyYXXkfwJbN4-AQWLLKR8KiWtOUJIHGVnQDPvJZwCRpVxhYtQ8sHPZOyVhVSdKmOY2Q=@jjerphan.xyz> |
After profiling some runs on this `AgglomerativeClustering(linkage='single')`, the bottleneck is present in `mst_linkage_core` [1]. This computes a distance matrice and performs operations on it suboptimally [2]. Fortunately, this implementation can be optimized as part of some current efforts on improving some patterns of computations [3]. I will add an item indicating that `mst_linkage_core` can be optimized. Best Regards, Julien. 1: https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/cluster/_agglomerative.py#L559C33-L559C49 2: https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/cluster/_hierarchical_fast.pyx#L428-L506 3: https://github.com/scikit-learn/scikit-learn/issues/25888 ------- Original Message ------- On Thursday, July 6th, 2023 at 2:16 PM, Julien Jerphanion <[email protected]> wrote: > Hi, > > OK, thank you for reporting that. I do not think `AgglomerativeClustering` would be suitable for now. > > The implementation uses a UnionFind, but it seems that other parts of the > implementations are costly. > > I can look into that when I get time one day. > > Julien. > > > ------- Original Message ------- > On Wednesday, July 5th, 2023 at 11:50 PM, Mathias Rav [email protected] wrote: > > > > > On Wed, 05 Jul 2023 20:39:37 +0000 > > Julien Jerphanion [email protected] wrote: > > > > I think that `sklearn.cluster.AgglomerativeClustering`ยน implements > > > what you propose. > > > > This implementation also supports other dissimilarities such as the > > > cosine dissimilarity and the Manhattan distance. > > > Hi Julien > > > Thanks for the pointer! I just tried to run AgglomerativeClustering with > > linkage="single" on 10k, 20k, 40k, 80k 2-d points and the runtimes > > indicate a super-quadratic time complexity: 0.33, 1.45, 5.96, 24.2 s. > > > Given that my use case involves around 200k points in 3-d, > > I'd like something closer to O(N log N) time - is that possible with > > AgglomerativeClustering? > > > Cheers, > > Mathias > > _______________________________________________ > > SciPy-Dev mailing list -- [email protected] > > To unsubscribe send an email to [email protected] > > https://mail.python.org/mailman3/lists/scipy-dev.python.org/ > > Member address: [email protected]_______________________________________________ > > SciPy-Dev mailing list -- [email protected] > To unsubscribe send an email to [email protected] > https://mail.python.org/mailman3/lists/scipy-dev.python.org/ > Member address: [email protected] _______________________________________________ SciPy-Dev mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3/lists/scipy-dev.python.org/ Member address: [email protected]
publickey - [email protected] - 0xDEDBF4EA.asc
(application/pgp-keys, 3 KB)
-----BEGIN PGP PUBLIC KEY BLOCK----- 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 WFaaDg== =/cO6 -----END PGP PUBLIC KEY BLOCK-----
signature.asc
(application/pgp-signature, 855 B)
-----BEGIN PGP SIGNATURE----- Version: ProtonMail wsFzBAEBCAAnBYJkp66qCZBWtpCpfC41uBYhBN7b9Or9ieiZmPAnSVa2kKl8 LjW4AACoqxAAqq/2HgTeQysZnabX+Ry13FHmyyQNby4PeTk1IbHH4XYFXa9/ 0jmOWSXp8Y+l5eNdgoaYaTBoW5WbGKl6G2NDsM4z94Sn0a6Vzb/JltuYxQhN i3b8JtPVuy6ThIGzZS4uNVGe2cbF6RUl8zyENMoiZRPr/K9bZP7/YBxD52Zf uNdarEd+aX0YJONd/RQumg0pRwEEuH7CVJqt5yuRq9HfQ8Qvm+cPevvUUsTK 03Mojf5/oD6J7LAEze4G7ihEt8J+tJ4IerMvFCcACn14bbzYV9EMWL4sucdG LTYzpr1GlOpAOwVB5CgfUmnw7Z588xIvLiKIm0e6qYeAmPmkObeGIzcBI0YD kobyimp1ZlCKDDJPX/qk9WGV4pEAZjc6N/jZZmCZtg3dS1v1nzs0Qrea0Xhc nBmGoGSlcqp+2TJlVEZizqzp+5eRXMuqR6lekoJU91U+jhWAiyQ+H5zP1U+X ShvjxHJ2nrlPg+1arrx2VfA2vVVKVstUhh1UkAsH0Jq1NMNpOjTQfZRaafZ9 /ptUAfaOGd1Ab5Yc3uaH0WbX2v9ChEE6qJGiFlWi0IFT7mXQkIBCW6Gjf/Lr 6tNZUUMDPWehpgnv2b4s2KHXlfy+Fnv7t1+kFeIB/NTZsGy0+GxQcULCRTEy 2tK/V1cudbDkd59p2WPL4vgIPvbT4Kh8jwQ= =gJkd -----END PGP SIGNATURE-----