Dootch 0 18 июля, 2022 Опубликовано 18 июля, 2022 · Жалоба Добрый день! Имеется набор данных (одномерный массив). Если построить график этого массива по точкам, то получится приложенная картинка. На графике видны полосы значений, вокруг которых концентрируются значения массива. Никак не могу придумать алгоритм выделения (фильтрации) этих полос на фоне остальных точек. Пробовал строить гистограмму и фильтровать по локальным максимумам, но она не очень эффективна если сначала идет линия, потом прерывается, а потом начинается снова. Может кто подскажет в какую сторону двигаться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
seniorandre 0 18 июля, 2022 Опубликовано 18 июля, 2022 · Жалоба On 7/18/2022 at 9:03 AM, Dootch said: но она не очень эффективна если сначала идет линия, потом прерывается, а потом начинается снова. Вы не озвучили какое вам нужно время анализа (сколько отсчетов). На инфинити накоплении гисторамма была бы наилучшим решением, как вы и написали. так же непонятно ваши линии на фиксированных уровнях или их значение надо замерять? По виду значений на ум приходит только - сколхозить и ввести масштабный коэффициент для гистограммы, чем дальше от нуля, тем больше вес в гистограмме. Хотя бы гистограмма будет с одинаковыми пиками. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 18 июля, 2022 Опубликовано 18 июля, 2022 · Жалоба В 18.07.2022 в 09:03, Dootch сказал: Никак не могу придумать алгоритм выделения (фильтрации) этих полос на фоне остальных точек. Вы так и не сказали - что нужно на выходе? Что такое "выделение"? Нужно построить список уровней, отсортированный по количеству попадающих в них точек (попадающих с некоторой точностью/дискретностью)? Или есть набор дискретных уровней, и нужно посчитать сколько было попаданий в каждый уровень и отсортировать по количеству? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 18 июля, 2022 Опубликовано 18 июля, 2022 · Жалоба В 18.07.2022 в 09:03, Dootch сказал: Добрый день! Имеется набор данных (одномерный массив). Если построить график этого массива по точкам, то получится приложенная картинка. На графике видны полосы значений, вокруг которых концентрируются значения массива. Никак не могу придумать алгоритм выделения (фильтрации) этих полос на фоне остальных точек. Пробовал строить гистограмму и фильтровать по локальным максимумам, но она не очень эффективна если сначала идет линия, потом прерывается, а потом начинается снова. Может кто подскажет в какую сторону двигаться? Это задача кластеризации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dootch 0 18 июля, 2022 Опубликовано 18 июля, 2022 · Жалоба On 7/18/2022 at 6:25 PM, seniorandre said: Вы не озвучили какое вам нужно время анализа (сколько отсчетов). На инфинити накоплении гисторамма была бы наилучшим решением, как вы и написали. так же непонятно ваши линии на фиксированных уровнях или их значение надо замерять? По виду значений на ум приходит только - сколхозить и ввести масштабный коэффициент для гистограммы, чем дальше от нуля, тем больше вес в гистограмме. Хотя бы гистограмма будет с одинаковыми пиками. Число отсчетов примерно такое как на графике (около 13к). Анализ не нужно делать в реальном времени, есть блок данных у него нужно выявить значения этих фиксированных уровней плюс оценить их дисперсию и пометить те точки, которые лежат на этих уровнях. On 7/18/2022 at 6:44 PM, jcxz said: Вы так и не сказали - что нужно на выходе? Что такое "выделение"? Нужно построить список уровней, отсортированный по количеству попадающих в них точек (попадающих с некоторой точностью/дискретностью)? Или есть набор дискретных уровней, и нужно посчитать сколько было попаданий в каждый уровень и отсортировать по количеству? Собственно, точки которые лежат на этих уровнях мне нужно отбросить, это я имел ввиду под словом выделить. В результате нужно что-то вроде того как на картинке. On 7/18/2022 at 7:06 PM, thermit said: Это задача кластеризации. Я пробовал отсортировать массив по возрастанию и пометить точки лежащие на "горизонтальных" участках получившегося массива. Горизонтальность оценивал по скользящей дисперсии или по наклону аппроксимирующей прямой, но как не настраивал параметры, все равно выделяется много лишних, случайных точек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andyp 9 18 июля, 2022 Опубликовано 18 июля, 2022 · Жалоба On 7/18/2022 at 12:09 PM, Dootch said: Я пробовал отсортировать массив по возрастанию и пометить точки лежащие на "горизонтальных" участках получившегося массива. Горизонтальность оценивал по скользящей дисперсии или по наклону аппроксимирующей прямой, но как не настраивал параметры, все равно выделяется много лишних, случайных точек. Разбить данные на несколько вертикальных полос. В каждой полосе строить гистограмму по значениям вертикальной координаты? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mars_208 0 18 июля, 2022 Опубликовано 18 июля, 2022 (изменено) · Жалоба В 18.07.2022 в 12:09, Dootch сказал: Собственно, точки которые лежат на этих уровнях мне нужно отбросить, это я имел ввиду под словом выделить. В результате нужно что-то вроде того как на картинке. Пришло в голову такое: строить гистограмму, выделять один (глобальный) максимум (т.е. некий диапазон значений на вертикальной оси, в который попадает больше всего точек ), удалять точки, соответствующие этому максимуму, и далее возвращаться к следующей итерации. Повторять это можно до тех пор, пока гистограмма не станет достаточно "равномерной", т.е. ее определяемый максимум не будет отличаться от среднего значения более, чем на, например, 20%. (или другой порог, который придется подбирать экспериментально). Т.е., если говорить простыми словами, идея такова: найти плотное место, затем его вычистить (отбросить ненужные точки), в оставшемся найти очередное плотное место - вычистить его, и так далее. В результате должна будет получиться картинка без "кучкующихся" точек. Изменено 18 июля, 2022 пользователем mars_208 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 18 июля, 2022 Опубликовано 18 июля, 2022 · Жалоба В 18.07.2022 в 12:09, Dootch сказал: Число отсчетов примерно такое как на графике (около 13к). Анализ не нужно делать в реальном времени, есть блок данных у него нужно выявить значения этих фиксированных уровней плюс оценить их дисперсию и пометить те точки, которые лежат на этих уровнях. Собственно, точки которые лежат на этих уровнях мне нужно отбросить, это я имел ввиду под словом выделить. В результате нужно что-то вроде того как на картинке. Я пробовал отсортировать массив по возрастанию и пометить точки лежащие на "горизонтальных" участках получившегося массива. Горизонтальность оценивал по скользящей дисперсии или по наклону аппроксимирующей прямой, но как не настраивал параметры, все равно выделяется много лишних, случайных точек. Не надо ничего изобретать. Надо решать задачу стандартными методами. К-средних, например. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dootch 0 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба On 7/19/2022 at 2:16 AM, thermit said: Не надо ничего изобретать. Надо решать задачу стандартными методами. К-средних, например. Просмотрел алгоритм К-средних и даже попробовал его применить с использованием библиотеки alglib. Мне кажется в данной задаче подобный алгоритм кластеризации без глубокой модификации плохо применим. Во-первых, нам неизвестно количество центров. Во-вторых кластеризация хорошо работает с реально локализованными группами, а тут помимо явно видных кластеров, есть еще множество разбросанных по полю точек, которое в один кластер объединено не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба В 19.07.2022 в 08:30, Dootch сказал: Просмотрел алгоритм К-средних и даже попробовал его применить с использованием библиотеки alglib. Мне кажется в данной задаче подобный алгоритм кластеризации без глубокой модификации плохо применим. Во-первых, нам неизвестно количество центров. Во-вторых кластеризация хорошо работает с реально локализованными группами, а тут помимо явно видных кластеров, есть еще множество разбросанных по полю точек, которое в один кластер объединено не будет. Да. модифицировать придется. Легкой жизни никто не обещал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dootch 0 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба On 7/19/2022 at 9:08 PM, thermit said: Да. модифицировать придется. Легкой жизни никто не обещал. К чему тогда фраза "Не надо ничего изобретать. Надо решать задачу стандартными методами."? Если модификация того же K-mean потребует больше времени и сил чем другие методы, то я лучше поизобретаю. Или попробую предложенные тут подходы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 19 июля, 2022 Опубликовано 19 июля, 2022 · Жалоба В 19.07.2022 в 15:20, Dootch сказал: К чему тогда фраза "Не надо ничего изобретать. Надо решать задачу стандартными методами."? Если модификация того же K-mean потребует больше времени и сил чем другие методы, то я лучше поизобретаю. Или попробую предложенные тут подходы. Как угодно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться