python - K-means 仅使用特定数据框列与 scikit-learn

标签 python pandas scikit-learn k-means

我正在使用 scikit-learn 库中的 k-means 算法,我想要聚类的值位于一个包含 3 列的 pandas 数据框中:IDvalue_1value_2

我想使用 value_1value_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_trainX_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/

相关文章:

php - 接口(interface)只是 "Syntactic Sugar"吗?

python - 使用 sklearn 获取单词的 tf-idf 权重

python - 在 Python 中根据索引值过滤数据框

python - 自定义 sklearn 管道变压器提供 "pickle.PicklingError"

python - scikit-learn 中的弃用警告

python - 计算均方误差返回 y_true 和 y_pred 有不同数量的输出 (1!=10)

python - 如何使用tf.data.Dataset和tf.keras做多输入和多输出?

python - 使用 matplotlib 在同一轴上绘制两个 pandas 时间序列 - 意外行为

python - Pandas groupby fillna 具有第一个有效值(窗口函数)

Pandas Lambda 函数格式月和日