如何解决无法取消解释返回的UserWarning
我在一个项目中使用interpret,在测试过程中,我提供了一些示例(只是为了加快测试速度),这会导致UserWarning
/usr/local/lib/python3.8/site-packages/interpret/glassbox/ebm/utils.py:91: UserWarning: Too few samples per class,adapting test size to guarantee 1 sample per class.
warnings.warn(
到目前为止,我一直都在试图抑制此警告,但没有成功,我什至尝试在pytest过滤警告中使用空白点ignore::UserWarning
,如下所示:
[tool:pytest]
addopts = -s --maxfail=1 --failed-first --color=yes
filterwarnings = ignore::_pytest.warning_types.PytestUnknownMarkWarning
ignore::UserWarning
;ignore::UserWarning:interpret
norecursedirs = docs .mypy_cache
python_files = test_*.py
我已深入研究引发警告的文件,其中引发警告的实际行如下:
if n_test_samples < y_uniq: # pragma: no cover
warnings.warn(
"Too few samples per class,adapting test size to guarantee 1 sample per class."
)
test_size = y_uniq
应为UserWarning
,因为这是warnings.warn的默认设置。那么问题是,如何抑制这种警告,因为我以前使用的方法不适用于这种情况(在pytest配置中)?
以下是上述问题的一个尽可能单独的示例(使用mark
选项来模仿我们的设置):
from interpret.glassbox import ExplainableBoostingClassifier
from numpy import array,ravel
from pytest import mark
@mark.filterwarnings("ignore::UserWarning")
def test():
features = array([
[0.4,0.6,0.8],[0.3,0.7,0.9],[0.1,0.5,1.1],[0.2,0.8,1.0],6.4,1.2],[0.5,8.6,7.9,0.7],[0.4,7.5,])
labels = ravel(array([
["class_1"],["class_1"],["class_2"],]))
model = ExplainableBoostingClassifier()
model.fit(X=features,y=labels)
# call funcy,should be done through pytest though
test()
解决方法
您的问题很可能是您有pytest读取的pytest.ini
或tox.ini
。如果这些文件中的任何文件存在于您的路径中并且包含[pytest]
部分,则它将取代[tool:pytest]
的{{1}}部分。因此,解决方案是删除setup.cfg
/ pytest.ini
,或将tox.ini
行移至filterwarnings
:
pytest.ini
如评论中所述,pytest documentation指出:
除非非常简单的用例,否则不建议使用setup.cfg。 .cfg文件使用其他 解析器比pytest.ini和tox.ini解析器更难追踪。
所以第二种选择可能是更好的选择。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。