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

Posted

技术标签:

【中文标题】如何打印字符串以替换无监督学习中的标签值【英文标题】:How to print a string to replace the value of the labels in unsupervised learning 【发布时间】:2019-08-25 14:07:04 【问题描述】:

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

在此之后,我想将标签重新打印为字符串,例如“窄”、“宽”和“正常”。

这是我使用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 输出? printing 到 stdout 不会更改基础数据(它只是丢弃的输出);我假设您实际上想将 map 类别添加到包含数值(或您正在迭代的任何结构)的 DataFrame 列中 请显示来自print(labels) 的一些输出的sn-p。是 numpy 数组、pandas DataSeries 还是其他? 我的标签在打印时看起来像这样 [1 1 1 1 1 1 1 1 1 0 0 2 ... 0 2 2 2 0 2 2 2 2 0 2 0 2 0 0 2 2 0] 【参考方案1】:

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 可以在这里提供哪些优化,因为我没有为输出数组指定 dtype(就像我可能使用累加器一样),我们正在从数字类型转换为字符串类型.有可能这只是作为一个 python 循环退出,并且从这种语法中将其视为常规列表并通过迭代将整数映射到字典中的类别没有任何好处。语法当然不会比您在问题中使用的类别更多。

【讨论】:

以上是关于如何打印字符串以替换无监督学习中的标签值的主要内容,如果未能解决你的问题,请参考以下文章

机器学习中的标签数据和无标签数据

三 机器学习中的有标签数据和无标签数据

3.无监督学习简介

半监督深度学习

机器学习有监督无监督自监督半监督弱监督的区别

有监督学习和无监督学习算法怎么理解?