我正在使用 scikit-learn
库中的 k-means
算法,我想要聚类的值位于一个包含 3 列的 pandas 数据框中:ID
、value_1
和 value_2
。
我想使用 value_1
和 value_2
对信息进行聚类,但我也想保持与其关联的 ID
(这样我就可以在每个集群中创建一个 ID
列表)。
执行此操作的最佳方法是什么?目前它也使用 ID
编号进行聚类,但这不是本意。
我当前的代码(X
是 pandas 数据框):
kmeans = KMeans(n_clusters=2, n_init=3, max_iter=3000, random_state=1)
(X_train, X_test) = train_test_split(X[['value_1','value_2']],test_size=0.30)
kmeans = kmeans.fit(X_train)
最佳答案
仅使用感兴趣的列进行聚类(如您的示例所示)。然后将标签列表 kmeans.labels_
作为另一列添加到 X_train
(或 X_test
)。标签的顺序与原始行的顺序相同。
# A toy DF
X = pd.DataFrame({'id': [1,2,3,4,5],
'value_1': [1,3,1,4,5],
'value_2': [0,0,1,5,0]})
# Split ALL columns
(X_train, X_test) = train_test_split(X,test_size=0.30)
# Cluster using SOME columns
kmeans = kmeans.fit(X_train[['value_1','value_2']])
# Save the labels
X_train.loc[:,'labels'] = kmeans.labels_
由于 X_train
和 X_tests
都是 X
的切片,您可能会在此处看到警告:
A value is trying to be set on a copy of a slice from a DataFrame.
你可以忽略它。
X_train
# id value_1 value_2 labels
#4 5 5 0 0
#0 1 1 0 0
#3 4 4 5 1
关于python - K-means 仅使用特定数据框列与 scikit-learn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51850206/