如何在 K 均值聚类后获取数据集的子集
How to get subset of dataset after K-means clustering
我有一个数据集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,:])
有没有更好的主意,因为我想得到所有簇中的子集。这太复杂了,尤其是假设有更多的集群?
所以如果我理解正确的话,你上面的行被分类为 0,1,2,3,4(我看到的是 5 个簇)并且你想要将它们全部放在一起。
Pandas 将是一个很好的实用程序。您可以使用此聚类预测并将其设为新列,然后 select 聚类标签为 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_lab
是一个 numpy
数组。那样的话,
val_lab[y_pred == 3, :]
会起作用。
我有一个数据集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,:])
有没有更好的主意,因为我想得到所有簇中的子集。这太复杂了,尤其是假设有更多的集群?
所以如果我理解正确的话,你上面的行被分类为 0,1,2,3,4(我看到的是 5 个簇)并且你想要将它们全部放在一起。
Pandas 将是一个很好的实用程序。您可以使用此聚类预测并将其设为新列,然后 select 聚类标签为 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_lab
是一个 numpy
数组。那样的话,
val_lab[y_pred == 3, :]
会起作用。