如何打印字符串以替换无监督学习中的标签值
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
输出? print
ing 到 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 循环退出,并且从这种语法中将其视为常规列表并通过迭代将整数映射到字典中的类别没有任何好处。语法当然不会比您在问题中使用的类别更多。
【讨论】:
以上是关于如何打印字符串以替换无监督学习中的标签值的主要内容,如果未能解决你的问题,请参考以下文章