Как использовать критерий Титьена-Мура? Имеется ряд цифровых значений длиной 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)

21 Авг 2019 в 06:07
232 +1
0
Ответы
1

Для использования критерия Титьена-Мура для определения аномальных значений в ряду, нужно выполнить следующие шаги:

Вычислить среднее значение (Xavg) и стандартное отклонение (Xstd) для всех значений в ряду.

Вычислить расстояние между каждым значением и средним значением в стандартных отклонениях (Z-оценка), используя формулу Z = (Xi - Xavg) / Xstd.

Найдите максимальное значение Z. Если это значение больше критического значения для выбранного уровня значимости, тогда это значение является аномальным.

Повторите этот процесс для каждого аномального значения, удаляя аномалии из ряда и вычисляя новое среднее значение и стандартное отклонение.

Повторяйте шаги до тех пор, пока больше не будут найдены аномальные значения.

Пример псевдокода:

function remove_anomalies(data):
is_anomaly = true
while is_anomaly:
Xavg = mean(data)
Xstd = std_dev(data)
Z_scores = []
for value in data:
Z_scores.append((value - Xavg) / Xstd)
max_Z = max(Z_scores)
if max_Z > critical_value:
index = Z_scores.index(max_Z)
data.remove(data[index])
else:
is_anomaly = false
return data
data = [1, 22, 123, 121, 11, 23, 1223, 11, 43, 12, 123, 142, 11, 2333, 121, 123]
print(data)
result = remove_anomalies(data)
print(result)

Это примерный псевдокод для использования критерия Титьена-Мура для определения аномальных значений в ряду. Здесь critical_value - это критическое значение для уровня значимости аномалий.

20 Апр в 13:23
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир