Ошибка при подсчете количества этикеток для задачи классификации с несколькими этикетками - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь подсчитать распределение меток для задачи классификации с несколькими метками. Пожалуйста, найдите включенные образцы данных из файла CSV.

filenames   labels
tt3302594.jpg   ['deer']
tt2377194.jpg   ['deer']
tt2309762.jpg   ['dog', 'deer']
tt2870808.jpg   ['cat', 'deer']
tt2551396.jpg   ['cat', 'dog', 'deer']
tt4008652.jpg   ['dog']
tt2926810.jpg   ['deer']
tt3531604.jpg   ['dog', 'deer']
tt2290739.jpg   ['cat', 'deer']

Я собираюсь нарисовать график морского дна, который берет отдельные метки по оси X и их значения счетчика по оси Y.

Ниже приведен код:

import numpy as np
import pandas as pd
import seaborn as sns
from collections import Counter

train = pd.read_csv('example.csv')    # reading the csv file
meta = pd.DataFrame(train, columns=['filenames', 'labels'])
print(f'Found {len(meta)} images')
meta.sample(9)
all_labels = [label for lbs in meta['labels'] for label in lbs]
labels_count = Counter(all_labels)
ax = sns.countplot(all_labels, order=[k for k, _ in labels_count.most_common()], log=True)
ax.set_title('Number of images with a class label')
ax.set_ylim(1E2, 1E4)
ax.set_xticklabels(ax.get_xticklabels(), rotation=90);

Приведенный выше код вместо подсчета количества изображений с метками классов при подсчете каждого символа в метке, например '' ',' d ',' e ',' r 'и т. д.

1 Ответ

1 голос
/ 06 августа 2020

Вам необходимо преобразовать сформированную строку списка в реальные списки с помощью literal_eval (кроме того, для опубликованного образца y lims сделает столбцы vani sh, так прокомментировано), вот:

import numpy as np
import pandas as pd
import seaborn as sns
from collections import Counter
import ast

train = pd.read_csv('example.csv')    # reading the csv file
meta = pd.DataFrame(train, columns=['filenames', 'labels'])
print(f'Found {len(meta)} images')
meta.sample(9)
meta['labels'] = [ast.literal_eval(x) for x in meta['labels'].values] 
all_labels = [label for lbs in meta['labels'] for label in lbs]
labels_count = Counter(all_labels)
ax = sns.countplot(all_labels, order=[k for k, _ in labels_count.most_common()], log=True)
ax.set_title('Number of images with a class label')
# ax.set_ylim(1E2, 1E4)
ax.set_xticklabels(ax.get_xticklabels(), rotation=90);

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...