如何手动设置K-means聚类中心?
How to manually set K-means cluster's centers?
我不想预测中心,而是将每个对象分配给一个已经定义的中心。我该怎么办?
一种方法是使用 sklearn.cluster.KMeans
模块的 n_init
和 random_state
参数,如下所示:
from sklearn.cluster import KMeans
c = KMeans(n_init=1, random_state=1)
这有两件事:
1) random_state=1
将质心种子设置为 1。这与具体 select 设置您想要的质心坐标并不完全相同,但它确实允许您控制和重现种子。
2) n_init=1
将迭代次数设置为 1,这意味着您将集群尝试限制为您在 random_state
步骤中自己 select 的种子。
您还可以使用 n_clusters
参数 select 您想要创建的质心数。
从这里开始,拟合和预测会将点分配给您预先建立的不同集群。
您可能还想查看 Scipy 中的 KMeans 实现。参数 minit
接受一个矩阵并且
interpret[s] the k parameter as a k by M (or length k array for one-dimensional data) array of initial centroids.
您必须定义一个包含所需中心的数组(我们称它为 X),并在 kmean 算法中放入 'init= X'
看一下 sklearn 中的以下示例:
class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init=10, max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='auto')
>>> from sklearn.cluster import KMeans
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
... [10, 2], [10, 4], [10, 0]])
>>> kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
>>> kmeans.labels_
array([1, 1, 1, 0, 0, 0], dtype=int32)
>>> kmeans.predict([[0, 0], [12, 3]])
array([1, 0], dtype=int32)
>>> kmeans.cluster_centers_
array([[10., 2.],
[ 1., 2.]])
了解更多信息:
https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
您可以 fit
您的 KMeans 到所需的聚类中心,然后使用此模型来预测您的数据。
from sklearn.cluster import KMeans
cluster_centers = [[1, 1], [0, 0]]
data = [[1, 2], [1, 1], [3, 1], [10, -1]]
kmeans = KMeans(n_clusters=2)
kmeans.fit(cluster_centers)
kmeans.cluster_centers_
> array([[0., 0.],
[1., 1.]])
kmeans.predict(data)
> array([1, 1, 1, 1])
注意:n_clusters
必须与您的聚类中心数相匹配
我不想预测中心,而是将每个对象分配给一个已经定义的中心。我该怎么办?
一种方法是使用 sklearn.cluster.KMeans
模块的 n_init
和 random_state
参数,如下所示:
from sklearn.cluster import KMeans
c = KMeans(n_init=1, random_state=1)
这有两件事:
1) random_state=1
将质心种子设置为 1。这与具体 select 设置您想要的质心坐标并不完全相同,但它确实允许您控制和重现种子。
2) n_init=1
将迭代次数设置为 1,这意味着您将集群尝试限制为您在 random_state
步骤中自己 select 的种子。
您还可以使用 n_clusters
参数 select 您想要创建的质心数。
从这里开始,拟合和预测会将点分配给您预先建立的不同集群。
您可能还想查看 Scipy 中的 KMeans 实现。参数 minit
接受一个矩阵并且
interpret[s] the k parameter as a k by M (or length k array for one-dimensional data) array of initial centroids.
您必须定义一个包含所需中心的数组(我们称它为 X),并在 kmean 算法中放入 'init= X' 看一下 sklearn 中的以下示例:
class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init=10, max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='auto')
>>> from sklearn.cluster import KMeans
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
... [10, 2], [10, 4], [10, 0]])
>>> kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
>>> kmeans.labels_
array([1, 1, 1, 0, 0, 0], dtype=int32)
>>> kmeans.predict([[0, 0], [12, 3]])
array([1, 0], dtype=int32)
>>> kmeans.cluster_centers_
array([[10., 2.],
[ 1., 2.]])
了解更多信息: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
您可以 fit
您的 KMeans 到所需的聚类中心,然后使用此模型来预测您的数据。
from sklearn.cluster import KMeans
cluster_centers = [[1, 1], [0, 0]]
data = [[1, 2], [1, 1], [3, 1], [10, -1]]
kmeans = KMeans(n_clusters=2)
kmeans.fit(cluster_centers)
kmeans.cluster_centers_
> array([[0., 0.],
[1., 1.]])
kmeans.predict(data)
> array([1, 1, 1, 1])
注意:n_clusters
必须与您的聚类中心数相匹配