网友指出sklearn版本bug,你的实验结果很可能是错的。。。

  • B站:啥都会一点的研究生
  • 公众号:啥都会一点的研究生
    网友指出sklearn版本bug,你的实验结果很可能是错的。。。_第1张图片

有网友指出,如果你正在使用或可能使用从 1.3.0 开始的任何 1.3.x 系列Scikit-Learn 版本,代码中有包含对 classification_report()f1_score()fbeta_score() 的任何调用并且包含参数 zero_division=1.0zero_division=np.nan,那么得到的结果极大概率是错误的,如

>>> sklearn.__version__
'1.3.2'
>>> sklearn.metrics.f1_score(y_true=[0, 0, 1, 2, 3], y_pred=[0, 1, 0, 2, 3], zero_division=1.0, average="macro")
0.875 # Wrong

网友指出sklearn版本bug,你的实验结果很可能是错的。。。_第2张图片

在上周最新发布的1.4.0中,该bug已经被修复,同样的测试用例

>>> sklearn.__version__
'1.4.0'
>>> sklearn.metrics.f1_score(y_true=[0, 0, 1, 2, 3], y_pred=[0, 1, 0, 2, 3], zero_division=1.0, average="macro")
0.625 # Correct

除1.3.x系列外,低版本没有这个问题,如我电脑上为1.2.2

>>> from sklearn import metrics
>>> 
>>> metrics.f1_score(y_true=[0, 0, 1, 2, 3], y_pred=[0, 1, 0, 2, 3], zero_division=1.0, average="macro")
0.625

1.3.0发布于2023年6月30号,直至2024年1月19号才正式推出修复版本,也就是说这半年期间如果你使用了这个api,大概率得到了错误的F1-Score,然后还作为实验数据填到了论文中(然后还发表了)

>>> sklearn.metrics.f1_score([0, 1], [1, 0], average='macro', zero_division=np.nan)
nan  # should be 0.0
>>> sklearn.metrics.f1_score([0, 1, 2], [1, 0, 2], average='macro', zero_division=np.nan)
1.0  # should be ~0.67

虽然F1-Score的实现并不难,但部分人还是会依赖于这种可信度肥肠高的第三方库,使用简单。在网上搜索如何实现F1-Score,大部分答案都与sklearn相关,当询问ChatGPT时,得到的答案也是这样

网友指出sklearn版本bug,你的实验结果很可能是错的。。。_第3张图片

愣着干嘛,赶紧检查自己的版本与代码是否中招。。。

https://connorboyle.io/2023/12/17/sklearn-f1-bug.html

你可能感兴趣的:(sklearn,bug,人工智能,Python)