在Python中返回子列表maxes-预测问题吗?

时间:2019-04-01 17:30:44

标签: python max nested-lists naivebayes

我在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] 

我得到“ TypeError:'list'对象不可调用”。关于如何获得理想结果的任何想法?这仅仅是一个嵌套列表问题,还是严格来说是由于我的嵌套列表是根据模型创建的?

2 个答案:

答案 0 :(得分:2)

看来[ max(val) for val in zip(*pred) ]应该可以工作。

我希望您的代码返回两个值;第一个列表的最大值和第二个列表的最大值。该错误表明您已将列表分配给max某个地方。

答案 1 :(得分:0)

由于它是一个嵌套列表,要访问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)]