Возвращение максимума подсписка в Python - Проблема с предсказанием? - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть список списков в Python, и я пытаюсь поместить максимум каждого подсписка в его собственный список.В сети я нашел несколько решений, которые, кажется, должны работать для этого, но я продолжаю получать эту ошибку: TypeError: объект 'list' не вызывается.Это может быть связано с тем, как в первую очередь были созданы вложенные списки (из модели MultinomialNB).

Вот подробности вокруг кода.

Я создал модель MultinomialNB.

nb_classifier = MultinomialNB()

Я подгонял его под данные и использую его для прогнозирования вероятностей классификации для новых данных.Я выводю вероятности в список, который создает вложенный список:

pred = nb_classifier.predict_proba(stuff_to_assign).tolist()

Кажется, что это работает нормально, и, кажется, создает список списков.Вывод «pred» выглядит следующим образом:

[[0.9679623959303013,
  0.0004919066096350094,
  0.0025707756884416877,
  0.00543455013719153,
  0.009417511656556068,
  0.004419688570339585,
  0.0056471363437299105,
  0.004056035063805071],
 [0.002845247494316791,
  0.000370155483232512,
  0.9749812181697922,
  0.004089452129289453,
  0.007086596337192678,
  0.00332577754892364,
  0.004249421417094243,
  0.003052131420158753]]

Я подтвердил, что это список:

type(pred)
List

Я хочу получить максимальное значение в каждом подсписке и поместитьэто в своем собственном списке.Идеальный результат:

[0.9679623959303013,0.9749812181697922] 

Я уже пробовал:

maxes = [max(p) for p in pred] 

И я получаю «Ошибка типа: объект списка не вызывается».Любые идеи о том, как получить желаемый результат?Это просто проблема с вложенными списками или это связано с тем, что мои вложенные списки создаются на основе модели?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Похоже, [ max(val) for val in zip(*pred) ] должно работать.

Я ожидаю, что ваш код вернет два значения;максимум первого списка и максимум второго списка.Ошибка предполагает, что вы присвоили список где-то max.

0 голосов
/ 01 апреля 2019

Поскольку это вложенный список, для доступа к первому списку в pred необходимо запустить pred[0]. Чтобы получить доступ ко второму списку, запустите pred[1]

Чтобы получить максимум, запустите max(pred[0]) и max(pred[1]) соответственно.

Ваш окончательный код хотел бы что-то вроде этого

new_list = []
for i in range(2):
    new_list.append(max(pred[i]))

Или со списком:

new_list = [max(pred[i]) for i in range(2)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...