Сейчас я работаю над закрытым пет-проектом, где понадобилась кластеризация данных
Погуглив варианты различных алгоритмов, я пришёл к выводу, что мне подходит класс иерархических кластеризаторов, поскольку они не требуют указания числа кластеров
DBSCAN и HDBSCAN по сути, однако HDBSCAN лучше, так как более устойчив к шуму, и его наличие не влияет на результат
Оказалось, что некий канадец реализовал HDBSCAN в NuGet пакете HdbscanSharp, однако код принуждал использовать тип данных
double для датасета, что было неудобным для меня, поскольку я пользовался float и конвертациями заниматься не хотелосьВзглянув на код, стало понятно, что его можно актуализировать внедрением обобщённой математики, поскольку функции вычисления расстояний отделены от алгоритма, и жёсткой зависимости в виде хранения векторов тоже нет
Открыл PR, подождал какое-то время, однако его не вмержили, поскольку было много breaking change, тогда я решил самостоятельно выпустить новый пакет
Получился HdbscanSharp.GenericMath - https://www.nuget.org/packages/HdbscanSharp.GenericMath
Код можно посмотреть на гитхабе - https://github.com/Stepami/HdbscanSharp-GenericMath