如何在K均值聚类后获取数据集的子集

问题描述 投票:0回答:2

我有一个数据集val_lab,如下:

[[ 52.85560436 -23.61958699  34.40273147]
 [ 70.44462451  -2.74272277  80.32988099]
 [ 38.32222473 -11.22753928  24.09593474]
 [ 84.83470029  -7.73898094  28.03636332]
 [ 76.48246093   0.13784934  76.23718213]
 [ 61.21154496   2.24080039   9.38927616]
 [ 39.88027333  37.32959609 -19.0592156 ]...]

[我使用sklearn的K-means聚类并获得了预测值:

from sklearn.cluster import KMeans
y_pred = KMeans(n_clusters= 5 , random_state=0 ).fit_predict(val_lab)
>>>[3 0 1 3 0 3 4 1 4 1 1 1 1 1 1 4 0 3 1 0 3...]

例如,如果y_pred = 3,我现在想获取每个群集中的值我得到:

[[ 52.85560436 -23.61958699  34.40273147] 
 [ 84.83470029  -7.73898094  28.03636332]
  ... ]

(0和3行)

现在,我的想法是:

val_lab_3 = []
for i in range(y_pred.shape[0]):
       if y_pred[i] == 3:
              val_lab_3.append(val_lab[i,:]) 

有更好的主意,因为我想获得所有群集中的子集。这太复杂了,尤其是假设有更多的集群吗?

python scikit-learn cluster-analysis k-means
2个回答
0
投票

因此,如果我正确地理解了这一点,那么上面的行将被归类为0、1、2、3、4(从我看到的结果中可以看到5个簇),并且您希望将所有这些聚集在一起。

熊猫将是一个很好的工具。您可以使用此聚类预测并将其设为新列,然后选择那些聚类标签为3]的行。

例如(假设您调用了新列preds,而原始的numpy数组称为val_lab):

import pandas as pd
df = pd.DataFrame(val_lab)
df['preds'] = y_pred
threes = df[df['preds'] == 3]  # This is what you want
print(threes)
        

我假设val_labnumpy数组。在这种情况下,

val_lab[y_pred == 3, :]

将工作。


0
投票

我假设val_labnumpy数组。在这种情况下,

© www.soinside.com 2019 - 2024. All rights reserved.