K-means算法的种子值如何放置?

Aka*_*mar 3 python cluster-analysis machine-learning k-means scikit-learn

我试图根据某个给定的数据集对客户进行分组,其中包含出生日期、性别、州、pincode、transaction_id、promocode 等属性。

每次运行该算法时,聚类的轮廓分数与前一个聚类的轮廓分数都会有巨大差异,即结果不一致。这可能是因为数据集的随机种子。这是将属性传递给算法的行。

km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600)
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以分配集群或优化,以便每次运行程序后,分数都一致且更好?

我正在使用 Python 3 和 scikit-learn。

sas*_*cha 7

它看起来(我猜)就像您正在使用scikit-learn

在这种情况下,只需使用:

km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600, random_state=MYSEED)
Run Code Online (Sandbox Code Playgroud)

其中MYSEED可以是整数、RandomState 对象或 None(默认),如上面链接中所述。

这意味着:

km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600, random_state=0)
Run Code Online (Sandbox Code Playgroud)

正在引发确定性结果。

备注:这仅影响 k 均值随机性质。如果您对数据进行了一些分割/CV,则也必须使这些操作具有确定性!