python - 聚类重叠椭圆

标签 python machine-learning scikit-learn jupyter-notebook cluster-analysis

我有一个数据集,它由多个数据子集组成。如果我绘制 Y 与 X,我得到的重叠椭圆很少,我想将它们聚类*。

我尝试使用 sklearnmixtureBayesian Gaussian Mixture Model 给出了最好的结果,但是,它无法识别重叠数据:

enter image description here

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

然后按照计算出的比例将它们随机分配给海军和青色分布:

enter image description here

一个问题是,如果我对数据进行直方图绘制,我注意到在两个椭圆的交线处的青色数据中存在过度填充/不连续性,我正在寻找减少过度填充的方法-人口,任何帮助表示赞赏。

jupyter-notebook 可以在这里下载:https://www.dropbox.com/s/z1tdgpx1g1lwtb5/Clustering.ipynb?dl=0

.* 数据点属于两组带电粒子。

最佳答案

也许这会有所帮助。我使用 predict_proba() 而不是 predict() 来获取一个点属于任一组的概率。然后我玩了截止。将截止值设置为 0.5,我得到了与您相同的结果。经过反复试验后,0.933 的截止值似乎可以解决问题。

p1 = X[BaGaMiMo.predict_proba(X)[:,0] > 0.933, :]
p2 = X[BaGaMiMo.predict_proba(X)[:,0] <= 0.933, :]
plt.scatter(p1[:,0], p1[:,1], 0.2, color='m')
plt.scatter(p2[:,0], p2[:,1], 0.2, color='navy')

Scatter plot with 0.933 cutoff between groups

关于python - 聚类重叠椭圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54945970/

相关文章:

python - 在 Python 中展平复杂的目录结构

machine-learning - 逻辑回归用例

machine-learning - SVM 对二进制数据 DNA 进行分类

python - 获取 RandomizedSearchCV 最佳模型的概率

Python,配置解析器 : What is 'magical interpolation'

python - 使用 Python、GAE 和 Tipfy,无法将 db.key 作为参数传递给图像检索

machine-learning - 使用brew 添加新的辅助方法会引发错误

python - 使用 cross_validation.cross_val_score 和 metrics.precision_recall_fscore_support

python - 当我拥有所需的 DLL 时,为什么会出现此导入错误?

python 2.7 : "can' t start new thread"error from "multiprocessing.Pool"