【问题标题】:Assign points to cluster centers in 3 dimensions将点分配给 3 维聚类中心
【发布时间】:2018-04-24 02:13:46
【问题描述】:

我有一个 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 在一个数组中迭代地“堆叠”在一起。

accepted_centroids:

[[ 0.5143811   0.41417482  0.5457288 ]
 [ 0.8176921   0.80723679  0.19689465]
 [ 0.12582636  0.65756533  0.80770862]]

我还保存了每个中心的索引: 接受的索引:

[ 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 的距离向量。我现在的目标是在这三个向量中取第一个值,找到这三个向量中的最小值,然后将数据点分配给相应的集群。可以这么说,这就是我没有想法的地方。希望这里的目标很明确!

注意:我没有使用 K-means 算法,所以这些包不适用。我基本上是在做kmeans的“标签”部分,然后绘制点,根据它们的标签着色。

【问题讨论】:

    标签: python pandas cluster-analysis


    【解决方案1】:

    听起来你想做类似的事情

    df.apply(lambda row: np.argmin(np.linalg.norm(accepted_centroids - row.values, axis=1)), axis=1)
    

    【讨论】:

      猜你喜欢
      • 2020-09-10
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      相关资源
      最近更新 更多