Имеется ряд цифровых значений длиной n. В этом ряду могут быть несколько аномальных значений (по максимальному значению). Подскажите, как использовать критерий Титьена-Мура, для определения этих аномальных значений. Можно использовать критерий Смирнова-Граббса, он очень прост:
import math
def rem_anomalies(l):
alpha = 2.447
avg = sum(l) / len(l)
sig = 0
for i in l:
sig += (i - avg) * (i - avg)
sig = math.sqrt(sig/len(l))
l2 = []
for i in l:
if alpha > (i - avg)/sig:
l2.append(i)
return l2
l = [1, 22, 123, 121, 11, 23, 1223, 11,43 ,12, 123, 142, 11, 2333, 121, 123]
print(l)
print(rem_anomalies(l))
> [1, 22, 123, 121, 11, 23, 1223, 11, 43, 12, 123, 142, 11, 121, 123]
Но как мы видим, он не подходит для нескольких аномалий (в данном примере было две аномалии- 2333, которую алгоритм смог определить, и 1223, которую мы пропустили)
В алгоритмах не силен, так что если кто знает и понимает, как применить критерий Титьена-Мура или знает другие критерии для нахождения нескольких аномальных значений, прошу рассказать как можно проще. Желательно (но не обязательно) на примере псевдокода 8)