使用新数据重新训练现有的机器学习模型

Uma*_*kar 8 python nlp machine-learning training-data supervised-learning

我有一个 ML 模型,它在一百万个数据集上进行训练(文本的监督分类),但是我希望在新数据(训练数据)出现后立即再次训练相同的模型。

这个过程是连续的,我不想在每次收到新数据集时失去模型预测的能力。我不想将新数据与我的历史数据(约 100 万个样本)合并以再次训练。

因此,理想的情况是该模型在一段时间内对所有数据进行逐渐训练,并在每次收到新的训练集数据时保留模型的智能。避免重新训练所有历史数据的最佳方法是什么?代码示例会对我有帮助。

yat*_*atu 6

您想了解一下增量学习技术。许多scikit-learn估算器都可以选择执行partial_fit数据分析,这意味着您可以对小批量数据进行增量训练。

这些情况的常见方法是使用回归SGDClassifier器(或回归器),它是通过获取一小部分样本来训练的,以便在每次迭代时更新模型的参数,从而使其成为在线学习问题的自然候选者。但是,必须通过 方法 重新训练模型partial_fit,否则会重新训练整个模型。

文档中

SGD允许小批量(在线/核外)学习,请参阅partial_fit方法

尽管如前所述,还有其他几个估算器已scikit-learn实现了 API,如您在增量学习partial-fit部分中看到的,包括、等。MultinomialNBlinear_model.PerceptronMiniBatchKMeans


这是一个玩具示例来说明它是如何使用的:

from sklearn.datasets import load_iris
from sklearn.model_selection import KFold
from sklearn.linear_model import SGDClassifier

X, y = load_iris(return_X_y=True)

clf = SGDClassifier()

kf = KFold(n_splits=2)
kf_splits = kf.split(X)

train_index, test_index = next(kf_splits)
# partial-fit with training data. On the first call
# the classes must be provided
clf.partial_fit(X[train_index], y[train_index], classes=np.unique(y))

# re-training on new data
train_index, test_index = next(kf_splits)
clf.partial_fit(X[train_index], y[train_index])
Run Code Online (Sandbox Code Playgroud)