Size: a a a

2021 November 20

VV

Vitaly Vasiliev in Haskell Start
да, спасибо, так и есть
источник

I

Ivan in Haskell Start
коллеги, подскажите пожалуйста, как улучшить время работы алгоритма? как не использовать replicate?

у меня есть функция, которая принимает
-> точки на плоскости
-> центры кластеров

выдает
-> индекс принадлежности к кластеру
(kmeans почти в чистом виде)

считает она расстояния от каждой точки до каждого кластера (здесь replicate, map zipWith, map map norm2)
и дальше находить минимум для каждой точки (map minimum)
после вытаскиваю индекс этого минимума для каждой точки

время работы алгоритма ужасное и я вот думаю, как можно уйти от replicate? мне кажется, что проблема по большей части в нем
источник

AA

A64m AL256m qn<co... in Haskell Start
ViewPatterns: Yes (n@(even -> True))

PatternSynonyms:
pattern Even n <- n@(even -> True)
...
Yes (Even n)
источник

JS

Jerzy Syrowiecki in Haskell Start
похоже, что проблема в самом подходе O(n²), и надо менять весь алгоритм
источник

JS

Jerzy Syrowiecki in Haskell Start
вам надо получить все расстояния от каждого до каждого? тогда от O(n²) не уйти
источник

I

Ivan in Haskell Start
вот да, я думал думал и понимаю, что как-то принципиально от этого не избавиться

спасибо за подтверждение моих догадок

но тут все таки есть способы, я сейчас начал кое что дописывать
потом покажу результаты
источник

I

Ivan in Haskell Start
от replicate не уйти точно
источник

JS

Jerzy Syrowiecki in Haskell Start
replicate можно заменить на аналог, но скорость будет та же
источник

AA

A64m AL256m qn<co... in Haskell Start
надо только ближайший к точке центр кластера найти? так можно же kd-дерево использовать
источник

I

Ivan in Haskell Start
да, ближайший
оптимизация через kd - это не канон kmeans, но идея интересная
источник

AA

A64m AL256m qn<co... in Haskell Start
а, нужно апдейтить центры после добавления точки?
источник

I

Ivan in Haskell Start
да, в kmeans их нужно пересчитывать
источник

VV

Vitaly Vasiliev in Haskell Start
спасибо, поизучаю ViewPatterns
источник

AA

A64m AL256m qn<co... in Haskell Start
если надо прост k-means считать, то почему бы готовую либу не использовать типа kmeans-vector?
источник

I

Ivan in Haskell Start
В учебных целях сам пишу
источник

I

Ivan in Haskell Start
Проверю сколько там по времени и как написано
источник

JS

Jerzy Syrowiecki in Haskell Start
но это же хуже гардов
источник

AA

A64m AL256m qn<co... in Haskell Start
в данном случае хуже
источник

VV

Vitaly Vasiliev in Haskell Start
а чем хуже?
источник

JS

Jerzy Syrowiecki in Haskell Start
синтаксически сложнее
источник