【问题标题】:TypeError: only size-1 arrays can be converted to Python scalars when computing f1_scoreTypeError:计算 f1_score 时,只有 size-1 数组可以转换为 Python 标量
【发布时间】:2020-05-10 17:22:21
【问题描述】:

我是学习 nlp 的初学者,我正在尝试使用 GaussianNB() 对数据集进行分类并通过 f1_score 进行评估。我在调用f1_score 函数时得到了这个TypeError,这是我的代码:

dev_X_train, dev_X_test, dev_y_train, dev_y_test = train_test_split(dev_X, dev_y, test_size = 0.2, random_state =0)
classifier = GaussianNB()

dev_y_train = dev_y_train.astype(numpy.int)
dev_y_test = dev_y_test.astype(numpy.int)

classifier.fit(dev_X_train, dev_y_train)
dev_y_pred = classifier.predict(dev_X_test)

dev_y_pred = dev_y_pred.astype(numpy.int)

score = f1_score(dev_y_test, dev_y_pred, pos_label=1)
print('F1 Score: %.3f' % dev_y_pred)

这就是训练和测试数据的样子。

 dev_X_train:
 <class 'numpy.ndarray'> len=80 
 [[0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 ...
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]]
dev_y_train:
 <class 'numpy.ndarray'> len=80 
 [1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 1 0 1 1 1 1 1 0 1 0 0 0 1
 1 1 0 1 1 1 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 1 1 0 1 1 0 1 1 0 1 1 0 0 0 0 0
 1 0 0 1 0 1]
dev_X_test:
 <class 'numpy.ndarray'> len=20 
 [[0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 ...
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [1 0 0 ... 0 0 0]]

dev_y_test:
 <class 'numpy.ndarray'> len=20 [1 1 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0]

dev_y_pred:
 <class 'numpy.ndarray'> len=20 [1 0 1 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0]

我已经尝试过.astype(numpy.int),正如其他人所说,但它仍然有相同的结果。那么,您能否解释一下为什么会发生这种情况以及如何解决它?

这是完整的回溯:

Traceback (most recent call last):
  File "/Users/chenchiyu/Desktop/COMP90042 NLP/Project/proj.py", line 241, in <module>
    print('F1 Score: %.3f' % dev_y_pred)
TypeError: only size-1 arrays can be converted to Python scalars

【问题讨论】:

  • 养成发布完整堆栈跟踪的习惯,它还显示错误发生的代码行等。帮助我们帮助您。
  • 已添加。这是我第一次在 stackoverflow 上提问。对此感到抱歉
  • 没问题,马修,欢迎来到一个相当大的社区。我认为甚至有一半的人都不会阅读“如何提问”或常见问题解答,所以这种事情一直在发生。但是正如错误所暗示的那样,提供所有信息更为重要,因为它看起来像是一个简单的拼写错误,您尝试打印的变量(如 awarrier99 所示)表明:) 所以我很高兴你添加了它,我希望祝你项目好运:) 我还对你的问题进行了一些格式化,因为代码块有一个简洁的格式化技巧,使用 `code` 可以让它弹出更多:)
  • 你太好了,Torxed,问题已解决。我将学习如何组织问题以及代码格式。再次感谢您的热情评论:)

标签: python nlp


【解决方案1】:

您的意思是用score 变量来格式化您的打印​​字符串吗?从堆栈跟踪中可以看出,错误在于您的 print 调用,而不是 f1_score 调用。您收到此错误是因为您对单个浮点数使用了格式说明符,并且您尝试插入整个数组 (dev_y_pred) 而不是单个标量值。也许你打算这样做:print('F1 Score: %.3f' % score)

【讨论】:

  • 是的,你是对的,谢谢你的帮助。这真是一个愚蠢的问题哈哈。
  • @MatthewChen 哈哈没问题,这些事情都会发生
猜你喜欢
  • 2023-03-25
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多