为什么训练SGDClassifier时Epoch重置?

时间:2018-01-23 00:18:58

标签: scikit-learn

我对大纪元的理解是,它是我们在训练期间完成整个训练集的次数。但是当我使用verbose = true训练SGDClassifier时,我会看到以下内容。它只是在5个时期之后重置,并再次从1开始计数。为什么会这样做?

以下是我实例化模型的方法:

clf = linear_model.SGDClassifier(loss='log', verbose=True)
clf.fit(X_train, y_train)

这是输出:

-- Epoch 1
Norm: 5.26, NNZs: 448659, Bias: -5.164052, T: 1912007, Avg. loss: 0.005248
Total training time: 0.91 seconds.
-- Epoch 2
Norm: 5.13, NNZs: 448659, Bias: -5.286860, T: 3824014, Avg. loss: 0.004764
Total training time: 1.72 seconds.
-- Epoch 3
Norm: 5.07, NNZs: 448659, Bias: -5.353568, T: 5736021, Avg. loss: 0.004655
Total training time: 2.57 seconds.
-- Epoch 4
Norm: 5.03, NNZs: 448659, Bias: -5.398900, T: 7648028, Avg. loss: 0.004587
Total training time: 3.41 seconds.
-- Epoch 5
Norm: 5.00, NNZs: 448659, Bias: -5.432728, T: 9560035, Avg. loss: 0.004547
Total training time: 4.28 seconds.
-- Epoch 1
Norm: 5.33, NNZs: 448659, Bias: -5.161117, T: 1912007, Avg. loss: 0.009731
Total training time: 0.98 seconds.
-- Epoch 2
Norm: 5.23, NNZs: 448659, Bias: -5.276683, T: 3824014, Avg. loss: 0.009210
Total training time: 1.84 seconds.

1 个答案:

答案 0 :(得分:1)

这是因为在多类问题中实施了一对一战略。

来自documentation

  

SGDClassifier通过组合支持多类分类   “一对一”(OVA)方案中的多个二元分类器。对于   每个K类,学习二进制分类器   区分它和所有其他K-1类。

这意味着如果您的数据有4个不同的类,那么将训练4个不同的模型实例,因此每个模型将打印其时代数。

默认的纪元数(max_iter param)是5.所以每个实例都会打印到这些多个纪元。

在简单的二进制分类任务中,只训练单个模型,因此详细输出将仅包含单个时期的提及。

希望你现在明白。