Предположим, у меня есть вектор из n элементов, состоящий из определенных измерений с шипами, которые необходимо найти (n небольшое, скажем, 5-7). Моя задача — найти в векторе все элементы, которые «намного больше остальных». Метод, основанный на вычислении стандартных отклонений (или z-показателей), работал бы хорошо, если бы n было большим, а количество «больших» элементов было небольшим. Однако n мало, а количество «больших» элементов может даже равняться n. Таким образом, статистический метод не сработает.
Это похоже на поиск ярких пятен на изображении, где все изображение может быть ярким. Например, можно было бы ограничить вектор, но это рискованно, поскольку фактическое содержимое вектора может измениться. На данный момент я использую следующий код:
Код: Выделить всё
pnormalize=p/np.max(p)
pthreshold=np.where(pnormalize>0.6,1,0)
Меня беспокоит то, что выбор 0,6 произволен. На практике с векторами типа [13.45 0.3 1.4 0.8 11.1], которые приводят к [1 0 0 0 1], это работает, это могло легко потерпеть неудачу для [13.45 0.3 1.4 0.8 7.1], где «очевидно», что у меня есть два элемента, которые намного больше остальных, но код дает ложноотрицательный результат. Я не могу произвольно снизить порог, так как шум существует, а также не хочу никаких ложных срабатываний.
Еще более серьезная проблема заключается в том, что если всплесков нет, это даст мне несколько "шипы", в зависимости от шума.
Есть предложения?
Подробнее здесь:
https://stackoverflow.com/questions/784 ... zed-vector