У меня есть такой массив поплавков:
[1.91, 2.87, 3.61, 10.91, 11.91, 12.82, 100.73, 100.71, 101.89, 200]
Теперь я хочу разбить массив следующим образом:
[[1.91, 2.87, 3.61] , [10.91, 11.91, 12.82] , [100.73, 100.71, 101.89] , [200]]
// [200] будет рассматриваться как выброс из-за меньшей поддержки кластера
Мне нужно найти такой сегмент для нескольких массивов, и я не знаю, какой должен быть размер раздела. Я попытался сделать это с помощью иерархической кластеризации (агломеративной), и это дало мне удовлетворительные результаты. Однако проблема в том, что мне предложили не использовать алгоритмы кластеризации для одномерной задачи, поскольку для этого нет теоретического обоснования (как для многомерных данных).
Я потратил много времени, чтобы найти решение. Однако предложения кажутся совершенно разными, например: ://stackoverflow.com/questions/11513484/1d-number-array-clustering">это VS. это и это и это.
Я нашел другое предложение вместо кластеризации, то есть оптимизация естественных разрывов. Однако для этого также необходимо объявить номер раздела, например K-means (правильно?).
Это довольно запутанно (особенно потому, что я должен выполнять такую сегментацию на нескольких массивах, и невозможно узнать оптимальный номер раздела).
Существуют ли какие-либо способы нахождения разделов (таким образом, мы можем уменьшить дисперсию внутри разделов и максимизировать дисперсию между разделами) с некоторым теоретическим обоснованием?
Любые ссылки на статьи/документы (при наличии реализации на C/C++/Java) с некоторым теоретическим обоснованием будут для меня очень полезны.