TypeError:计算f1\U分数时,只能将size1数组转换为Python标量

2024-04-25 05:11:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我是学习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]

正如其他人所说,我已经试过了,但仍然有同样的结果。那么,你能解释一下为什么会发生这种情况以及如何解决它吗

以下是完整的回溯:

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

Tags: devtestnumpylentrainclassintf1
1条回答
网友
1楼 · 发布于 2024-04-25 05:11:41

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

相关问题 更多 >