Как получить метки классов и прогнозируемые вероятности для каждого класса для 5 лучших классов в мультиклассовой классификации? - PullRequest
0 голосов
/ 07 января 2020

У меня есть словарь с ключом, парами значений, где значения являются списками значений, как показано ниже, чтобы добавить больше к вопросу, у меня есть мои предсказанные вероятности классов и соответствующие классы, которые я превратил в словарь, и я хочу получите 5 лучших проб для каждого класса:

# gets a dictionary of {'class_name': probability}

prob_per_class_dictionary = dict(zip(loaded_model.classes_, probs))

Словарь выглядит так:

{0: array([9.65109812e-07, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]),

1: array([9.30082941e-07, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]),

2: array([9.42541599e-07, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]),

3: array([9.54675878e-07, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]),

4: array([9.00161937e-07, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]),

5: array([9.33723827e-07, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]),

6: array([9.6553016e-07, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00, 0.0000000e+00, 0.0000000e+00]),

7: array([9.45838933e-07, 0.00000000e+00, 0.00000000e+00, ..., 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]),

Я хочу отсортировать словарь так, чтобы для каждого ключа говорилось 0: массив ([первые 5 значений отсортированы в порядке убывания]). Я пробовал следующее, которое сортирует его в порядке возрастания, но я хочу, чтобы только верхние 5 значений в порядке убывания.

for key, v_list in prob_per_class_dictionary.items():
    v_list = v_list.sort()`

Пожалуйста, дайте мне знать, что было бы самым простым способом достичь этого?

я бы хотел, чтобы мои результаты выглядели примерно так

отсортировано (zip (loaded_model.classes_, probs [0]), key = lambda x: x [1]) [- n:] так, что для в каждом классе я получаю соответствующие пробники, и я получаю его для топ-5 классов и их соответствующих проб.

       `[(1019, 0.02498873845258007),`

        `(1421, 0.3491224577864634),`

        `(1295, 0.5342553538931459)]`

1 Ответ

0 голосов
/ 07 января 2020

Не самое эффективное решение, но оно будет сделано:

v_list.sort()
v_list = v_list.take((-1,-2,-3,-4,-5))
...