SGD分类器数据损失函数值的计算方法



我使用SGD分类器结合部分拟合方法来训练大量数据。我想监控何时达到可接受的收敛水平,这意味着我想知道某些数据每n次迭代的损失(可能是训练,可能是坚持,可能两者都有)。

如果我在分类器的构造函数中传递verbose=1,我知道这些信息是可用的,但我希望以编程方式而不是视觉方式查询它。我也知道我可以使用评分法来获得准确性,但我希望通过我选择的损失函数来衡量实际损失。

有人知道怎么做吗?

您必须使用score方法或sklearn.metrics中显式调用的损失函数之一。并不是所有SGDC的损耗都在sklearn.metrics中,而是对数损耗和铰链损耗。

上面的答案太短、过时,可能会造成误导。

使用评分法只能给出准确度(在BaseEstimator中)。如果您想要loss函数,您可以调用私有函数_get_loss_function(在BaseSGDClassifier中定义)。或者访问BaseSGDClassifier.loss_functions类属性,该属性将给您一个dict,其条目是可调用的损失函数(默认设置)

此外,使用sklearn.metrics可能无法获得用于最小化的精确损失(由于正则化和最小化内容,但您无论如何都可以手动计算)。Loss函数的确切代码在cython代码(sgd_fast.pyx,你可以在scikit学习github repo中查找代码)中定义

我正在寻找一种绘制最小化进度的好方法。可能会重定向stdout并解析输出。

顺便说一句,我用的是0.17.1。因此,更新答案。

最新更新