【发布时间】: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_validation与cv=10一起使用? -
我可以使用
cross_validation,但我不喜欢它。但是,我发现根据您的建议,我应该在 CRF 的每次初始化之前使用随机种子对训练数据进行洗牌。
标签: python scikit-learn random-seed crf crfsuite