Алгоритм / функция для проверки общей части более 2 распределений - PullRequest
1 голос
/ 23 октября 2019

Задача: Найти общую часть (более или менее одинаково представленную) БОЛЕЕ 2-х распределений.

Справочная информация и пример кода:

Plot of 4 different distributions of some feature

Представьте, что у нас есть четыре разных распределения одной и той же функции. Как найти их общую часть? Это хорошо видно на картинке. Каждый дистрибутив напечатан с 25% альфа-прозрачностью. Самая «красная» часть является общей частью всех четырех дистрибутивов. Но как найти два числа, которые будут описывать эту общую часть (~ 5.5-10 на картинке)?

Код [Python]:

import numpy as np
import matplotlib.pyplot as plt
mu_1 = 5 #mean of the first distribution
mu_2 = 7 #mean of the second distribution
mu_3 = 9 #mean of the second distribution
mu_4 = 11 #mean of the second distribution

data_1 = np.random.normal(mu_1, 2.0, 1000)
data_2 = np.random.normal(mu_2, 2.0, 1000)
data_3 = np.random.normal(mu_3, 2.0, 1000)
data_4 = np.random.normal(mu_4, 2.0, 1000)

plt.hist(data_1,bins=50,alpha = 0.25, color= 'r')
plt.hist(data_2,bins=50,alpha = 0.25, color= 'r')
plt.hist(data_3,bins=50,alpha = 0.25, color= 'r')
plt.hist(data_4,bins=50,alpha = 0.25, color= 'r')
plt.show()

Подходы и решения:

  • Пересечение: Мы можем найти пересечения двух распределений и тем самым найти общую часть / интервал. Мы могли бы использовать:

def return_intersection(hist_1, hist_2):
    minima = np.minimum(hist_1, hist_2)
    intersection = np.true_divide(np.sum(minima), np.sum(hist_2))
    return intersection</p>

<code>hist_1 = np.histogram(data_1, bins=100, range=[-15, 15])    
hist_2 = np.histogram(data_2, bins=100, range=[-15, 15])    
int = return_intersection(hist_1, hist_2);
</code>

Это позволяет нам найти общую часть между двумя дистрибутивами. Еще одним недостатком является то, что он не учитывает расстояния между лотками. Я хотел бы найти сильные результаты, не все числа, которые пересекаются, но часть, которая равна (больше или меньше) в каждом наборе.

Вопрос: Я уверен, что есть функция или алгоритм, который поможет надежно определить эту общую часть для нескольких распределений / наборов данных, но я не смог найти их. Это также может быть написано на MATLAB, если кто-то знает об этом, пожалуйста, дайте мне знать.

...