Обнаружение выбросов в вероятностно-частотном распределении

У меня есть следующий двухмерный набор данных. Оба (X и Y) являются непрерывными случайными величинами.

Z = (X, y) = {(1, 7), (2, 15), (3, 24), (4, 25), (5, 29), (6, 32), (7, 34), (8, 35), (9, 27), (10, 39)}

Я хочу обнаружить выбросы по отношению к значениям переменной y. Нормальный диапазон для переменной y составляет 10-35. Таким образом, 1-я и последняя пары в вышеупомянутом наборе данных являются выбросами, а другие - нормальным Парижем. Я хочу преобразовать переменную z = (x, y) в распределение вероятностей / частот, значения выбросов (первая и последняя пара) лежат за пределами стандартного отклонения 1. Может ли кто-нибудь помочь мне решить эту проблему.

PS: Я пробовал разные расстояния, такие как расстояния эвклида и махаланобиса, но они не работали.


person mani    schedule 05.12.2013    source источник


Ответы (1)


Я не совсем уверен, какова ваша конечная цель, но я предполагаю, что вы форматируете свои переменные x, y в матрицу nx2, поэтому z = [x, y], где x: = nx1 и y: = nx1 векторы .

Итак, что вы спрашиваете, - это способ отделить точки данных, где y выходит за пределы диапазона 10-35? Для этого вы можете использовать условный оператор, чтобы найти индексы, где это происходит:

index = z(:,2) <= 35 & z(:,2) >= 10;  %This gives vector of 0's & 1's length nx1
z_inliers = z(index,:);      %This has a [x,y] matrix of only inlier data points
z_outliers = z(~index,:);    %This has a [x,y] matrix of outlier data points

Если вы хотите сделать это в соответствии со стандартным отклонением, вместо 10 и 35 выполните:

low_range = mean(z(:,2)) - std(z(:,2));
high_range = mean(z(:,2)) + std(z(:,2));
index = y <= high_range & y >= low_range;

Затем вы можете построить свой PDF-файл или что-то еще с этими точками.

person cjtytler    schedule 06.12.2013
comment
Второй метод более близок к тому, что мне нужно, но если я изменю хотя бы одно значение переменной Y, это приведет к изменению значений для переменных low_range и high_range, что даст неправильный конечный результат. Мне нужен более стабильный метод, с помощью которого я мог бы различать выбросы и выбросы даже при изменении значений в переменной Y. - person mani; 06.12.2013
comment
Одно стандартное отклонение - это относительное значение, основанное на наборе данных, поэтому вам нужно решить, из какого набора данных определяются ваши выбросы. Если вы хотите иметь общую коллекцию данных, из которых определяются выбросы, вам нужно сначала определить low_range и high_range и сохранить эти значения, затем вы можете изменить значения y или создать новый вектор значений y, которые только вставки, как показано выше. Если объем памяти не является проблемой, я бы предложил просто сохранить два разных набора y: один, полный для определения диапазона выбросов, а другой, у которого выбросы отфильтрованы. - person cjtytler; 06.12.2013
comment
В моем случае память - это определенно проблема. А как насчет второго и третьего стандартных отклонений? Думаю, они зависят от первого отклонения. Таким образом, фактически они также зависят от набора данных. Итак, у меня вопрос, как можно обучить и протестировать систему в этом случае? Какой подход лучше? - person mani; 07.12.2013