【发布时间】:2021-06-02 07:10:54
【问题描述】:
我正在运行不同的数据集来确定每个数据集的最佳建模算法。我遍历每个数据集以检查各种算法并根据测试分数选择最佳模型。我知道我的一些数据集不会针对特定模型收敛(即:LogisticRegression) 并获得收敛警告(即:“lbfgs 未能收敛(状态 = 1):”)。我不想忽略警告。我的目标是返回收敛模型的分数,如果我收到此收敛警告,则不返回任何值。
我可以通过使用“warnings.filterwarnings('error',category=ConvergenceWarning, module='sklearn')”将此警告变为错误来解决此问题,然后通过尝试和除以得到我想要的。这种方法的问题是,如果除了 sklearn 收敛警告之外还有任何其他错误,它将绕过 try 行,我将无法知道导致错误的原因。除了将其变为错误之外,还有其他方法可以捕获此警告吗?
这是我的代码的简化概述(数据不包含在它的大数据集中,我认为与问题无关)。我能找到的大多数 stackoverflow 问题都是关于如何抑制错误(How to disable ConvergenceWarning using sklearn?)或将此警告变为错误,我没有找到任何其他方法来捕获警告而不将其变为错误。
from sklearn.linear_model import LogisticRegression
from sklearn.exceptions import ConvergenceWarning
warnings.filterwarnings('error',category=ConvergenceWarning, module='sklearn')
try:
model=LogisticRegression().fit(x_train,y_train)
predict=model.predict(x_test)
except:
print('model didnt converge')
【问题讨论】:
-
只需将
raise添加到您的except块中。此外,您可能想要except Exception:而不仅仅是一个裸露的except:。 -
谢谢。你的意思是使用“除了 ConvergenceWarning”之类的东西并使用 else: with raise 仍然会出现其他错误吗?如果是这样,增加加薪有什么好处?我同意except Exception(我现在学到的东西。)
标签: python scikit-learn convergence