如何匹配k-means聚类中的标签及其聚类点?

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

我正在进行 k 均值聚类,我想确保标签与正确的聚类编号匹配。以下是我使用的代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import pairwise_distances_argmin_min

dataset = pd.read_csv('ratio.csv', index_col=0).T
dataset_copy = dataset
dataset_copy = dataset_copy.dropna()

X = dataset_copy.iloc[:, [0, 1, 2, 3]].values

kmeans = KMeans(n_clusters=4, init='k-means++', random_state=42)
y_kmeans = kmeans.fit_predict(X)

# From here
Company = pd.DataFrame(dataset_copy.index)
cluster_labels = pd.DataFrame(kmeans.labels_)

labels_df = pd.concat([Company, cluster_labels],axis = 1)

#Fromhere 中的代码是否为簇编号分配了正确的标签?

我在代码中使用的部分数据集:

python-3.x pandas scikit-learn k-means
1个回答
0
投票

是的,您从“# From here”注释中提供的代码片段确实正确地将集群标签分配给每个公司。

相关代码行:

Company = pd.DataFrame(dataset_copy.index)
:此行根据
DataFrame
的索引创建
dataset_copy
,这可能是公司名称或标识符。

cluster_labels = pd.DataFrame(kmeans.labels_)
:在这里,您将 k-means 算法分配的标签转换为
DataFrame
kmeans.labels_
数组包含分配给
X
中每个样本的簇编号。

labels_df = pd.concat([Company, cluster_labels], axis=1)
:此行沿着列 (
axis=1
) 连接公司名称及其相应的集群标签。这会产生一个新的
DataFrame
labels_df
,其中每行包含一个公司名称及其关联的集群标签。

因此,

labels_df
中的每个公司都与k-means算法分配的集群编号相匹配。

但是,还有一种更优雅的方式。

dataset_copy.index
kmeans.labels_
都是一维数组,因此您可以以更优雅的方式创建
DataFrame
进行映射:

labels_df = pd.DataFrame({'Company': dataset_copy.index, 'Cluster': kmeans.labels_})
© www.soinside.com 2019 - 2024. All rights reserved.