Python 为相同或不同集群中的数据点创建矩阵
在使用KMeans对数据点进行集群之后,我希望遍历数据点并检查它们是否在同一个集群中。 然后我需要为所有数据点创建一个矩阵,如果它们属于同一个集群,则为1,如果不属于,则为0。 在使用Kmeans之后,我不确定如何检索每个数据点所属的集群,以便创建这样的矩阵。 我是否使用labels_uu参数来实现这一点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
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
,但请注意,原始输出实际上是一个布尔数组
我在代码中留下了打印
语句和绘图,希望能让它更清晰。
希望有帮助