JaxxDexx
@JaxxDexx

Как использовать критерий Титьена-Мура?

Имеется ряд цифровых значений длиной 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)
  • Вопрос задан
  • 1296 просмотров
Решения вопроса 1
Ni55aN
@Ni55aN
Описание алгоритма и функцию критического значения по логарифму брал отсюда

Пример на JS: https://jsfiddle.net/cs0m7r5h/11/
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AlexSku
не буду отвечать из-за модератора
Для избавления от выбросов есть медианный фильтр.

Точнее, аномалии не удаляются из серии, а заменяются на средние значения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы