我正在进行 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 中的代码是否为簇编号分配了正确的标签?
我在代码中使用的部分数据集:
是的,您从“# 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_})