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

时间:2017-11-09 16:47:59

标签: machine-learning cluster-analysis k-means

我正在尝试根据某个给定数据集对客户进行分组,这些数据集包含DOB,Gender,State,pincode,transaction_id,promocode等属性。

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

km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600)

是否有任何方法可以分配群集或进行优化,以便每次运行程序后,分数是否一致且更好?

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

2 个答案:

答案 0 :(得分:1)

您可以将random_state=修改为常量值。但是,在您喜欢结果之前,请不要调整此值。

如果k-means对起始条件敏感(即,#34;质量"变化很大),这通常表明该算法不能很好地处理这些数据。已经证明如果有一个很好的k-means聚类,那么对于大多数运行来说,很容易得到 close 。因此,对于n_init=25,您几乎每次都应找到一个好的解决方案,如果就有一个。但是有很多数据集,其中k-means 无法找到一个好的解决方案!

答案 1 :(得分:0)

看起来(我猜)就像你在使用scikit-learn

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

km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600, random_state=MYSEED)

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

这意味着:

km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600, random_state=0)

正在诱导确定性结果。

备注:这只会影响k-means随机性。如果您对数据进行了一些拆分/简历,那么您必须确保这些操作具有确定性!