我在尝试获取召回率评分时遇到了这个错误。
X_test = test_pos_vec + test_neg_vecY_test = ["pos"] * len(test_pos_vec) + ["neg"] * len(test_neg_vec)recall_average = recall_score(Y_test, y_predict, average="binary")print(recall_average)
这会导致以下结果:
C:\Users\anca_elena.moisa\AppData\Local\Programs\Python\Python36\lib\site-packages\sklearn\metrics\classification.py:1030: FutureWarning: 逐元素比较失败;返回标量而不是在未来将执行逐元素比较 if pos_label not in present_labels:Traceback (most recent call last): File "G:/PyCharmProjects/NB/accuracy/script.py", line 812, in <module> main() File "G:/PyCharmProjects/NB/accuracy/script.py", line 91, in main evaluate_model(model, train_pos_vec, train_neg_vec, test_pos_vec, test_neg_vec, False) File "G:/PyCharmProjects/NB/accuracy/script.py", line 648, in evaluate_model recall_average = recall_score(Y_test, y_predict, average="binary") File "C:\Users\anca_elena.moisa\AppData\Local\Programs\Python\Python36\lib\site-packages\sklearn\metrics\classification.py", line 1359, in recall_score sample_weight=sample_weight) File "C:\Users\anca_elena.moisa\AppData\Local\Programs\Python\Python36\lib\site-packages\sklearn\metrics\classification.py", line 1036, in precision_recall_fscore_support (pos_label, present_labels))ValueError: pos_label=1 is not a valid label: array(['neg', 'pos'], dtype='<U3')
我尝试通过以下方式将’pos’转换为1,将’neg’转换为0:
for i in range(len(Y_test)): if 'neg' in Y_test[i]: Y_test[i] = 0 else: Y_test[i] = 1
但这导致了另一个错误:
C:\Users\anca_elena.moisa\AppData\Local\Programs\Python\Python36\lib\site-packages\sklearn\metrics\classification.py:181: FutureWarning: 逐元素比较失败;返回标量而不是在未来将执行逐元素比较 score = y_true == y_predTraceback (most recent call last): File "G:/PyCharmProjects/NB/accuracy/script.py", line 812, in <module> main() File "G:/PyCharmProjects/NB/accuracy/script.py", line 91, in main evaluate_model(model, train_pos_vec, train_neg_vec, test_pos_vec, test_neg_vec, False) File "G:/PyCharmProjects/NB/accuracy/script.py", line 648, in evaluate_model recall_average = recall_score(Y_test, y_predict, average="binary") File "C:\Users\anca_elena.moisa\AppData\Local\Programs\Python\Python36\lib\site-packages\sklearn\metrics\classification.py", line 1359, in recall_score sample_weight=sample_weight) File "C:\Users\anca_elena.moisa\AppData\Local\Programs\Python\Python36\lib\site-packages\sklearn\metrics\classification.py", line 1026, in precision_recall_fscore_support present_labels = unique_labels(y_true, y_pred) File "C:\Users\anca_elena.moisa\AppData\Local\Programs\Python\Python36\lib\site-packages\sklearn\utils\multiclass.py", line 103, in unique_labels raise ValueError("Mix of label input types (string and number)")ValueError: Mix of label input types (string and number)
我正在尝试获取以下指标:准确率、精确率、召回率、F测量值。使用 average='weighted'
,我得到了相同的结果:准确率=召回率。我猜这不正确,所以我将 average
改为 'binary'
,但出现了这些错误。有什么建议吗?
回答:
recall_average = recall_score(Y_test, y_predict, average="binary", pos_label="neg")
使用 "neg"
或 "pos"
作为 pos_label
,这个错误就不会再次出现。