如何在k均值聚类中为每个聚类设置最小观察数?

时间:2019-05-01 00:51:49

标签: pandas machine-learning scikit-learn data-science k-means

我正在尝试根据用户的行为对某些产品进行集群。我最后看到的是具有不同观察值的聚类。

我检查了k均值聚类参数,但找不到控制每个聚类的最小(或最大)观测值的参数。

例如,这里是观察数量在不同聚类中的分布方式。

if profit_value>200 and profit_value<1000:
   cntr+=1
else:
   cntr=0

有关如何处理此问题的任何帮助?还有其他可以解决此问题的聚类算法吗?

2 个答案:

答案 0 :(得分:1)

对于那些仍在寻找答案的人。我发现有good modulethis module处理此类问题

使用pip install size-constrained-clusteringpip install git+https://github.com/jingw2/size_constrained_clustering.git并使用MinMaxKMeansMinCostFlow,您可以在其中选择size_minsize_max

n_samples = 2000
n_clusters = 3
X = np.random.rand(n_samples, 2)
model = minmax.MinMaxKMeansMinCostFlow(n_clusters, size_min=400,   size_max=800)
model.fit(X)
centers = model.cluster_centers_
labels = model.labels_

答案 1 :(得分:0)

这将通过 k-means-constrained pip 库解决.. check here

示例:

>>> from k_means_constrained import KMeansConstrained
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
...                [4, 2], [4, 4], [4, 0]])
>>> clf = KMeansConstrained(
...     n_clusters=2,
...     size_min=2,
...     size_max=5,
...     random_state=0
... )
>>> clf.fit_predict(X)
array([0, 0, 0, 1, 1, 1], dtype=int32)
>>> clf.cluster_centers_
array([[ 1.,  2.],
       [ 4.,  2.]])
>>> clf.labels_
array([0, 0, 0, 1, 1, 1], dtype=int32)