解决sklearn ignore_warnings传参触发TypeError及屏蔽FitFailedWarning问题
错误根源
TypeError: issubclass() arg 2 must be a class or tuple of classes 报错是因为ignore_warnings的category参数仅支持传入警告类本身或警告类组成的元组,你传入的[FitFailedWarning]是列表类型,不符合参数要求。之前在KNN、决策树参数搜索时未触发报错属于参数校验逻辑未覆盖的巧合,在LogisticRegression训练路径中相关校验被触发才抛出错误。
可行解决方案
方案1:修复原有代码的参数类型
把传入category的列表改为单元素元组即可(注意单元素元组末尾要加逗号,否则会被识别为单个类而非元组):
from sklearn.exceptions import FitFailedWarning from sklearn.utils._testing import ignore_warnings with ignore_warnings(category=(FitFailedWarning,)): lr_grid.fit(x_train, y_train)
注意:
sklearn.utils._testing属于scikit-learn的内部测试API,不同版本可能出现变动,稳定性较差。
方案2:使用Python标准库warnings模块(更推荐)
不依赖sklearn内部接口,兼容性和稳定性更高:
import warnings from sklearn.exceptions import FitFailedWarning with warnings.catch_warnings(): # 临时屏蔽所有FitFailedWarning warnings.filterwarnings("ignore", category=FitFailedWarning) lr_grid.fit(x_train, y_train)
补充说明
如果需要同时屏蔽多类警告,将多个警告类放在元组中传入即可,示例:warnings.filterwarnings("ignore", category=(FitFailedWarning, RuntimeWarning))
内容的提问来源于stack exchange,提问作者euh
相关产品推荐
相关产品推荐

