GridSearchCV:每次函数完成一个循环时打印一些表达式



假设Python中有一个函数function,它通过循环工作:例如,它可以是一个为数组中的所有元素(例如([1, 2, ..., 100]))计算某个数学表达式(例如x**2)的函数(显然这是一个玩具示例)。是否可以编写一个代码,使得每次function经过循环并获得结果时,都会执行一些代码,例如print("Loop %s has been executed" % i)?因此,在我们的例子中,当计算了x**1时,程序打印Loop 1 has been executed,然后当计算了x**2时,它打印Loop 2 has been executed,依此类推

请注意,困难在于我没有对函数进行编程,它是某个包中预先存在的函数(更具体地说,我感兴趣的函数是包scikit learn中的GridSearchCV)。

实现这一点的最简单方法是将函数的代码复制到您自己的函数中,对其进行调整,然后使用它。在您的情况下,您必须将GridSearchCV 子类化并覆盖_fit方法。这种方法的问题在于,它可能无法在包升级后幸存下来。

在你的情况下,这是没有必要的。您可以在创建对象时指定一个详细级别:

GridSearchCV(verbose=100)

我不完全确定这个冗长的数字本身意味着什么。以下是内部用于打印的包中的文档:

详细级别:如果不是零,则打印进度消息。高于50时,输出被发送到stdout。消息的频率随着详细程度的增加而增加。如果它超过10,则报告所有迭代。

如果您真的想知道verbosity数字的作用,可以查看源代码。我说不出来。

您可能会使用monkey补丁("monkey"是因为它很黑客)

假设库函数为

def function(f):
    for i in range(100):
        i**2

如果你想输入一个打印语句,你需要将整个函数复制到你自己的文件中,并进行微小的编辑:

def my_function(f):
    for i in range(100):
        i**2
        print ("Loop %s" % i)

现在您覆盖库函数:

from library import module
module.existing_function = my_function

显然,这不是一个易于维护的解决方案(如果您的目标库已升级,您可能需要再次经历此过程),因此请确保仅将其用于临时调试目的。

相关内容

  • 没有找到相关文章

最新更新