K-means算法的种子值怎么设置?
How to put the seed values of K-means algorithm?
我正在尝试根据特定的给定数据集对客户进行分组,这些数据集具有出生日期、性别、州、密码、transaction_id、促销代码等属性
每次我 运行 算法的聚类轮廓分数与前一个算法有很大差异,即结果不一致。
可能是因为数据集的随机种子。这是将属性传递给算法的行。
km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600)
是否有任何方法可以分配集群或优化,以便每次我 运行 程序后,分数都一致且更好?
我正在使用 Python 3 和 scikit-learn。
看起来(我猜)您正在使用 scikit-learn。
在这种情况下,只需使用:
km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600, random_state=MYSEED)
其中 MYSEED
可以是整数、RandomState 对象或 None(默认值),如上文所述 link。
这意味着:
km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600, random_state=0)
正在产生确定性结果。
备注: 这只影响 k 均值随机性。如果您对数据进行了一些拆分/CV,您也必须使这些操作具有确定性!
您可以将 random_state=
固定为一个常数值。但是在你喜欢结果之前不要调整这个值。
如果 k-means 对起始条件敏感(即 "quality" 变化很大),这通常表明该算法不能很好地处理此数据。已经表明 if 有一个很好的 k 均值聚类,那么在大多数运行中至少 close 很容易。所以使用 n_init=25
你几乎每次都应该找到一个好的解决方案,if 有一个。但是有很多数据集k-means无法找到好的解法!
我正在尝试根据特定的给定数据集对客户进行分组,这些数据集具有出生日期、性别、州、密码、transaction_id、促销代码等属性
每次我 运行 算法的聚类轮廓分数与前一个算法有很大差异,即结果不一致。 可能是因为数据集的随机种子。这是将属性传递给算法的行。
km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600)
是否有任何方法可以分配集群或优化,以便每次我 运行 程序后,分数都一致且更好?
我正在使用 Python 3 和 scikit-learn。
看起来(我猜)您正在使用 scikit-learn。
在这种情况下,只需使用:
km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600, random_state=MYSEED)
其中 MYSEED
可以是整数、RandomState 对象或 None(默认值),如上文所述 link。
这意味着:
km1 = KMeans(n_clusters=6, n_init=25, max_iter = 600, random_state=0)
正在产生确定性结果。
备注: 这只影响 k 均值随机性。如果您对数据进行了一些拆分/CV,您也必须使这些操作具有确定性!
您可以将 random_state=
固定为一个常数值。但是在你喜欢结果之前不要调整这个值。
如果 k-means 对起始条件敏感(即 "quality" 变化很大),这通常表明该算法不能很好地处理此数据。已经表明 if 有一个很好的 k 均值聚类,那么在大多数运行中至少 close 很容易。所以使用 n_init=25
你几乎每次都应该找到一个好的解决方案,if 有一个。但是有很多数据集k-means无法找到好的解法!