Задача: Найти общую часть (более или менее одинаково представленную) БОЛЕЕ 2-х распределений.
Справочная информация и пример кода:
Представьте, что у нас есть четыре разных распределения одной и той же функции. Как найти их общую часть? Это хорошо видно на картинке. Каждый дистрибутив напечатан с 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, если кто-то знает об этом, пожалуйста, дайте мне знать.