提问人:Chutlhu 提问时间:10/27/2023 最后编辑:petezurichChutlhu 更新时间:10/31/2023 访问量:68
在不拟合的情况下使用 sklearn KMean
Using sklearn KMeans without fitting
问:
与这里的问题类似,我想根据预先计算的质心对一些数据进行聚类。与该问题不同的是,这些质心是由其他方法提供的。
我可以自己计算它,但是使用 scikit-learn 的 KMean 的界面对于其他操作(例如,稍后标记点和采样点)非常有用。
基本上,有没有一种解决方法可以将 KMean 与 和 一起使用?max_iter=0
n_init=0
答:
0赞
lejlot
10/28/2023
#1
scikit-learn 中的 KMean 接受可调用对象作为初始值设定项
init{'k-means++', 'random'},可调用或类似数组的形状 (n_clusters, n_features), default='k-means++' 方法 初始化:
'k-means++' : 使用基于采样的初始聚类质心 关于点贡献的经验概率分布 到整体惯性。这种技术加快了收敛速度。这 实现的算法是“贪婪的 k-means++”。它不同于 Vanilla K-means++ 通过在每个采样步骤进行多次试验和 从中选择最好的质心。
“随机”:从数据中随机选择n_clusters观测值(行) 对于初始质心。
如果传递了一个数组,它的形状应该是 (n_clusters, n_features) 并给出初始中心。
如果传递了可调用对象,则应接受参数 X、n_clusters 和 随机状态并返回初始化。
所以你可以做
def custom_fun(X, n_clusters, random_state):
...
kmeans = Kmeans(init=custom_fun)
然后设置max_iters=0
由于 sklearn 进行参数检查和max_iters
import sklearn
sklearn.set_config(
skip_parameter_validation=True,
)
评论
0赞
Chutlhu
10/30/2023
谢谢。我仍然有错误,你能完成你的问题吗?我应该在函数中写什么?The 'max_iter' parameter of KMeans must be an int in the range [1, inf). Got 0 instead.
0赞
lejlot
10/31/2023
查看更新(您需要禁用这些检查)
评论
X
centroids
km = KMeans(n_clusters=centroids.shape[0])
km.cluster_centers_ = centroids
km._n_threads = 1
labels = km.predict(X)