如何打印一个字符串来替换无监督学习中标签的值

How to print a string to replace the value of the labels in unsupervised learning

我正在使用 sklearn.cluster.KMeans 对数据进行分类。通过打印我的标签,我可以看到 KMeans 正在工作,但是,标签打印为数值(0、1 或 2)。

在此之后,我想将标签重新打印为字符串,例如 "narrow"、"wide" 和 "normal"。

这是我使用 if-elif 语句的尝试:

csv= "data.csv"
data = pd.read_csv(csv, header = None, low_memory = False)
model = KMeans(n_clusters = 3, random_state = 1)
model.fit(data)
labels = model.predict(data)
print(labels)
for category in lables:
    if category == 0:
        print('narrow')
    elif category == 1:
        print('wide')
    elif category == 2:
        print('normal')
    else:
        print('Unlabeled Data')
np.savetxt("category.csv", category, delimiter = ',')

print 只是将您的输出写入标准输出,它不会更改基础数据。输出是一次性的。当我认为您想实际修改数据时,您在问题中多次使用 "print" 。一种方法是使用 numpy.select.

import numpy as np

labels = np.array([0, 1, 1, 2, 0, 1, 2, 0]) # Fake data

# Now use select to replace the numerical values with categories
replacements = ['narrow', 'wide', 'normal']
new_labels = np.select([labels == 0, labels == 1, labels == 2],
                       replacements)

我不完全确定 numpy 可以在这里提供什么优化,因为我没有为输出数组指定数据类型(就像我可能使用累加器一样)并且我们从数字类型开始到字符串类型。这可能只是作为 python 循环退出,并且与将其视为常规列表并通过迭代将整数映射到字典中的类别相比,这种语法没有任何好处。该语法肯定不会比您在问题中使用的类别更多。