Как напечатать строку, чтобы заменить значение меток в обучении без учителя - PullRequest
0 голосов
/ 04 апреля 2019

Я использую 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 = ',')

1 Ответ

1 голос
/ 04 апреля 2019

print просто записывает ваш вывод в stdout, он не меняет базовые данные.Выход одноразовый.Вы используете «печать» несколько раз в своем вопросе, когда я думаю, что вы действительно хотите изменить данные.Один из способов сделать это - использовать 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, и этот синтаксис не дает никакой выгоды по сравнению с обработкой его как обычного списка и отображением целых чисел в категории из словаря путем итерации.Синтаксис определенно не подходит для большего количества категорий, чем вы используете в своем вопросе.

...