У меня есть набор данных, который состоит из более чем одного подмножества данных.Если я нанесу Y на X, я получу несколько перекрывающихся эллипсов и хочу их сгруппировать *.
Я пробовал с mixture
из sklearn
, Bayesian Gaussian Mixture Model
дает лучший результат, однако он не распознает перекрывающиеся данные:
![enter image description here](https://i.stack.imgur.com/Ohto1.png)
import itertools
import numpy as np
import pylab as plt
from sklearn import mixture
from matplotlib.patches import Ellipse
field_File_1 = './dummy_distrib_3.txt'
'''
link to data:
https://www.dropbox.com/s/jd3wx1ee8r1mj8p/dummy_distrib_3.txt?dl=0
'''
my_dis_1 = np.loadtxt(field_File_1)
X = my_dis_1[:50000,:2]
BaGaMiMo = mixture.BayesianGaussianMixture(n_components=2, covariance_type='full',
weight_concentration_prior_type='dirichlet_distribution').fit(X)
X1 = X[BaGaMiMo.predict(X) == 0, :]
X2 = X[BaGaMiMo.predict(X) == 1, :]
plt.figure(figsize=(18.0, 6.0))
plt.subplot(1,3,1)
plt.scatter(X[:,0], X[:,1], 0.2, color='m')
plt.subplot(1,3,2)
plt.scatter(X[BaGaMiMo.predict(X) == 0, 0], X[BaGaMiMo.predict(X) == 0, 1], .2, color='navy')
plt.subplot(1,3,3)
plt.scatter(X[BaGaMiMo.predict(X) == 1, 0], X[BaGaMiMo.predict(X) == 1, 1], .2, color='c')
plt.show()
Далее я подгоняю два эллипса к распределению голубого и темно-синего цветов и удаляю частицы в поперечном сечении из распределения голубого,
![enter image description here](https://i.stack.imgur.com/k6iq8.png)
затем случайным образом назначьте их военно-морским и голубым распределениям с вычисленным соотношением:
Одна из проблем заключается в том, что если я делаю гистограмму данных, я замечаю, что в голубых данных на линии пересечения двух эллипсов имеется переполнение / разрыв, и я ищу способы уменьшить это переполнение, любоепомощь приветствуется.
jupyter-notebook
можно скачать здесь: https://www.dropbox.com/s/z1tdgpx1g1lwtb5/Clustering.ipynb?dl=0
. * Точки данных принадлежат двум наборам заряженных частиц.