Python 为相同或不同集群中的数据点创建矩阵

Python 为相同或不同集群中的数据点创建矩阵,python,python-3.x,scikit-learn,Python,Python 3.x,Scikit Learn,在使用KMeans对数据点进行集群之后,我希望遍历数据点并检查它们是否在同一个集群中。 然后我需要为所有数据点创建一个矩阵,如果它们属于同一个集群,则为1,如果不属于,则为0。 在使用Kmeans之后,我不确定如何检索每个数据点所属的集群,以便创建这样的矩阵。 我是否使用labels_uu参数来实现这一点 k_means = KMeans(n_clusters=5).fit(X) labels_columns = k_means.labels_ labels_row = k_me

在使用KMeans对数据点进行集群之后,我希望遍历数据点并检查它们是否在同一个集群中。 然后我需要为所有数据点创建一个矩阵,如果它们属于同一个集群,则为1,如果不属于,则为0。 在使用Kmeans之后,我不确定如何检索每个数据点所属的集群,以便创建这样的矩阵。 我是否使用labels_uu参数来实现这一点

  k_means = KMeans(n_clusters=5).fit(X)

  labels_columns = k_means.labels_

  labels_row = k_means.labels_

  for row in labels_row:
      for column in labels_columns:
           if row == columns:
              --add 1 in matrix position
           else:
               --add 0 in matrix position
如何最好地创建此矩阵?或者他们提供的信息与我的理解不同?
感谢您的帮助

你走在正确的轨道上
Kmeans.labels
返回
n
元素的向量,它告诉您 每个点所属的簇:
[3,4,10,…]
告诉您点
0
属于簇
3
,点
1
属于集群
4

您可以通过多种方式构建所需的矩阵。我认为有一种可能性比 2循环的
如下所示:

import numpy as np
import matplotlib.pyplot as plt

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

n_samples, n_features = 10, 2
X, y = make_blobs(n_samples, n_features)

plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()

kmeans = KMeans(n_clusters=3).fit(X)

plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.show()

neighbour_matrix = np.zeros(n_samples)
repeat_labels = np.repeat(kmeans.labels_.T, n_samples, axis=0).reshape(n_samples, n_samples)
print(kmeans.labels_)
print(repeat_labels)
proximity_matrix = (repeat_labels == repeat_labels.T).astype(int)
print(proximity_matrix)
我使用标签向量作为起点。我们可以这样说:
[1 0 1 2 2 2 0]

我用
np将其转换为二维矩阵。重复具有以下形状的

[[1 1 1 1 1 1 1 1 1 1]
[0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0]
[1 1 1 1 1 1 1 1 1 1]
.....
因此,我重复标签的次数与点数相同。然后我可以查一下这个 矩阵及其转置是相等的。只有当两个点属于同一簇时,才会出现这种情况:

[[1 0 0 1 1 0 0 0 0 0]
[0 1 1 0 0 0 0 0 0 1]
[0 1 1 0 0 0 0 0 0 1]
[1 0 0 1 1 0 0 0 0 0]
.....
我将矩阵转换为
int
,但请注意,原始输出实际上是一个布尔数组

我在代码中留下了
打印
语句和绘图,希望能让它更清晰。
希望有帮助