【问题标题】:How to set random seed in sklearn_crfsuite如何在 sklearn_crfsuite 中设置随机种子
【发布时间】:2022-01-05 09:13:30
【问题描述】:

我目前正在尝试使用 sklearn_crfsuite 库来实现 NER 模型。

训练代码简单如下:

for repeat in range(10):
    crf = sklearn_crfsuite.CRF(
                            algorithm='lbfgs',
                            c1=0.1,
                            c2=0.1,
                            max_iterations=100,
                            all_possible_transitions=True,
                            verbose=True
                        )
    crf.fit(X_train, y_train)
    pred_list = crf.predict(X_test)

代码是做十次重复训练,我的目标是观察 10 个不同的分数并将它们平均作为最终分数。但是,每次重复都会给出相同的分数,尽管我在每个循环中都重新初始化了模型。

问题是,我如何正确设置随机种子,以便每次重复都能给出不同的结果?

注意:在我对每个循环中的训练数据进行洗牌后,它仍然给出 同样的结果。最后,我将训练算法从 'lbfgs'(使用 L-BFGS 方法的梯度下降)到 'l2sgd' (带有 L2 正则化的随机梯度下降),然后我开始 获得不同的结果。

【问题讨论】:

  • 据我了解,您在循环的每次迭代中都使用相同的参数重新创建模型,并使用相同的训练数据拟合模型,因此您可能每次都会得到相同的结果.我的问题是你为什么要平均分数10次?您是否可以选择将cross_validationcv=10 一起使用?
  • 我可以使用cross_validation,但我不喜欢它。但是,我发现根据您的建议,我应该在 CRF 的每次初始化之前使用随机种子对训练数据进行洗牌。

标签: python scikit-learn random-seed crf crfsuite


【解决方案1】:

您不搜索随机种子,您可能搜索交叉验证:

您可以找到完整的文档here

如果您想运行 10 次不同的迭代,您可以使用:

crf = sklearn_crfsuite.CRF(
                            algorithm='lbfgs',
                            max_iterations=100,
                            all_possible_transitions=True,
                            verbose=True
                        )
    
params_space = {
    'c1': scipy.stats.expon(scale=0.5),
    'c2': scipy.stats.expon(scale=0.05),
}

# use the same metric for evaluation
f1_scorer = make_scorer(metrics.flat_f1_score,
                        average='weighted', labels=labels)

# search
rs = RandomizedSearchCV(crf, params_space,
                        cv=10,
                        verbose=1,
                        n_jobs=-1,
                        n_iter=50,
                        scoring=f1_scorer)
rs.fit(X_train, y_train)

你会得到最好的参数

【讨论】:

  • 感谢您的建议;但是,我目前正在尝试使用随机种子来比较结果的几种 NER 模型,我本可以选择交叉验证,这是一种更好的方法,但由于多种原因我不喜欢它。
猜你喜欢
  • 2020-03-18
  • 2020-12-04
  • 2016-11-12
  • 2014-11-21
  • 2020-02-21
  • 2014-09-20
  • 2011-06-14
  • 1970-01-01
  • 2016-01-14
相关资源
最近更新 更多