将点分配给 3 个维度的聚类中心
Assign points to cluster centers in 3 dimensions
我有一个 600x3 数据框如下:
X1 X2 X3
0 0.049150 0.270032 0.577858
1 0.602387 0.065492 0.555747
2 0.598355 0.235002 0.482744
3 0.522151 0.253991 0.402630
4 0.402601 0.206630 0.553987
...
其中每一行表示一个三维点。我已经编写了一个聚类算法来找到三个聚类中心,它们在数组中使用 np.vstack.
迭代 "stacked" 彼此重叠
accepted_centroids:
[[ 0.5143811 0.41417482 0.5457288 ]
[ 0.8176921 0.80723679 0.19689465]
[ 0.12582636 0.65756533 0.80770862]]
我还保存了每个中心的索引:
accepted_indices:
[ 26 420 241]
我现在想根据最小 "l2 norm" 距离将数据框中的每个点分配给这些集群之一。我使用以下方法计算了这些簇与其余点之间的距离:
diffy1 = df.iloc[0:].apply(lambda x: np.sqrt(sum((df.iloc[accepted_indices[0]]-x)**2)), axis=1).values
diffy2 = df.iloc[0:].apply(lambda x: np.sqrt(sum((df.iloc[accepted_indices[1]]-x)**2)), axis=1).values
diffy3 = df.iloc[0:].apply(lambda x: np.sqrt(sum((df.iloc[accepted_indices[2]]-x)**2)), axis=1).values
每个输出一个 600x1 的距离向量。我现在的目标是取这三个向量中每一个的第一个值,找到这三个向量中的最小值,然后将数据点分配给相应的集群。可以说,这就是我 运行 没有想法的地方。希望这里的 objective 是清楚的!
注意:我没有使用 K-means 算法,所以那些包不适用。我基本上是想做 kmeans 的 "labelling" 部分,然后绘制点,根据它们的标签着色。
听起来你想做类似的事情
df.apply(lambda row: np.argmin(np.linalg.norm(accepted_centroids - row.values, axis=1)), axis=1)
我有一个 600x3 数据框如下:
X1 X2 X3
0 0.049150 0.270032 0.577858
1 0.602387 0.065492 0.555747
2 0.598355 0.235002 0.482744
3 0.522151 0.253991 0.402630
4 0.402601 0.206630 0.553987
...
其中每一行表示一个三维点。我已经编写了一个聚类算法来找到三个聚类中心,它们在数组中使用 np.vstack.
迭代 "stacked" 彼此重叠accepted_centroids:
[[ 0.5143811 0.41417482 0.5457288 ]
[ 0.8176921 0.80723679 0.19689465]
[ 0.12582636 0.65756533 0.80770862]]
我还保存了每个中心的索引: accepted_indices:
[ 26 420 241]
我现在想根据最小 "l2 norm" 距离将数据框中的每个点分配给这些集群之一。我使用以下方法计算了这些簇与其余点之间的距离:
diffy1 = df.iloc[0:].apply(lambda x: np.sqrt(sum((df.iloc[accepted_indices[0]]-x)**2)), axis=1).values
diffy2 = df.iloc[0:].apply(lambda x: np.sqrt(sum((df.iloc[accepted_indices[1]]-x)**2)), axis=1).values
diffy3 = df.iloc[0:].apply(lambda x: np.sqrt(sum((df.iloc[accepted_indices[2]]-x)**2)), axis=1).values
每个输出一个 600x1 的距离向量。我现在的目标是取这三个向量中每一个的第一个值,找到这三个向量中的最小值,然后将数据点分配给相应的集群。可以说,这就是我 运行 没有想法的地方。希望这里的 objective 是清楚的!
注意:我没有使用 K-means 算法,所以那些包不适用。我基本上是想做 kmeans 的 "labelling" 部分,然后绘制点,根据它们的标签着色。
听起来你想做类似的事情
df.apply(lambda row: np.argmin(np.linalg.norm(accepted_centroids - row.values, axis=1)), axis=1)