K均值仅使用带有scikit-learn的特定数据框列

Jes*_*ers 6 python k-means pandas scikit-learn

我使用的k-means算法从scikit-learn库,我想集群值在大熊猫数据帧3列:IDvalue_1value_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)
Run Code Online (Sandbox Code Playgroud)

DYZ*_*DYZ 7

仅使用感兴趣的列进行聚类(如您的示例)。然后将标签列表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_
Run Code Online (Sandbox Code Playgroud)

由于X_trainX_tests都是的切片X,因此您可能会在此处看到警告:

试图在DataFrame的切片副本上设置一个值。

您可以忽略它。

X_train
#   id  value_1  value_2  labels
#4   5        5        0       0
#0   1        1        0       0
#3   4        4        5       1
Run Code Online (Sandbox Code Playgroud)

  • 从编码的角度来看,问题(+1)和答案(+1)都很好;但是,通常对于kmeans(或总体而言,对于聚类),我们不会拆分为训练和测试子集... (2认同)