【问题标题】:Way to compute the value of the loss function on data for an SGDClassifier?计算 SGDClassifier 数据损失函数值的方法?
【发布时间】:2016-07-27 13:57:53
【问题描述】:

我将 SGDClassifier 与部分拟合方法结合使用来训练大量数据。我想监控我何时达到了可接受的收敛水平,这意味着我想知道某些数据每 n 次迭代的损失(可能是训练,可能是保留,可能两者兼而有之)。

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

有人知道怎么做吗?

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    您必须使用score 方法或sklearn.metrics 中的一个损失函数,显式调用。并非所有 SGDC 的损失都在 sklearn.metrics,但 log loss 和 hinge loss 是。

    【讨论】:

    • 感谢您提供有用的信息——如果我在学习者中不均匀地加权示例,是否有一种非手动方法可以将相同的权重应用于损失?跨度>
    • @BenAllison 目前没有。
    【解决方案2】:

    上述答案太短,过时,可能会导致误导。

    使用 score 方法只能给出准确率(在 BaseEstimator 中)。如果你想要损失函数,你可以调用私有函数_get_loss_function(在BaseSGDClassifier中定义)。或访问BaseSGDClassifier.loss_functions 类属性,该属性将为您提供一个字典,其条目是可调用的损失函数(默认设置)

    同样使用sklearn.metrics 可能不会得到用于最小化的确切损失(由于正则化和要最小化的内容,但您仍然可以手动计算)。 Loss 函数的具体代码在 cython 代码中定义(sgd_fast.pyx,你可以在 scikit-learn github repo 中查找代码)

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

    顺便说一句,我使用的是 0.17.1。所以更新了答案。

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 2016-07-01
      • 2021-12-08
      • 1970-01-01
      • 2023-01-11
      • 2013-12-03
      相关资源
      最近更新 更多