将新数据训练为预训练模型

数据挖掘 机器学习 Python 深度学习
2021-10-14 06:27:08

假设我已经训练了我的模型并做出了预测。

我的问题是......如何在不从头开始重新训练模型的情况下将一些新数据附加到我的预训练模型中。

3个回答

这完全取决于您使用的特定算法。其中一些支持增量学习,而另一些则不支持。

例如,在 的情况下scikit-learnfit()在同一个模型上多次使用只会覆盖模型的权重(更多详细信息请参见此处)。

但是,您可以做的是寻找实现partial_fitapi 的算法,并使用它来重新训练现有模型 - 请参阅文档以获取支持增量学习并因此实现此 api 的算法列表。

另一种解决方案是寻找支持warm_start参数的算法,例如LogisticRegression请注意,warm_start这也可能会受到其他参数的影响,因此您也需要注意它们的值 - 例如,在 LogisticRegression 的情况下,如果您使用求解器(这是默认设置)warm_start将不起作用。liblinear

我想说这取决于您使用的 ML 框架。我曾在 Scikit 和 Tensorflow 上工作过。

两者都以不同的方式工作。

科学:

  1. partial_fit() 是一种方法。如果我们多次调用 partial_fit(),框架将更新现有权重,而不是再次重新初始化它。
  2. warm_state 是许多算法提供的另一种方式。例如 RandomForestRegressor(),它将添加新的估计器(新的树),它使用我们传递给它的新数据进行训练。有关更多说明,请参阅Scikit 链接

Tensorflow:考虑一个基本的 TF 代码,如下所述:

import numpy as np
import tensorflow as tf
from sklearn.datasets import fetch_california_housing
from sklearn.preprocessing import StandardScaler
housing = fetch_california_housing()
m, n = housing.data.shape
target = housing.target.reshape(-1,1)
scaler = StandardScaler()
scaled_housing_data = scaler.fit_transform(housing.data)
housing_data_plus_bias = np.c_[np.ones((m, 1)), scaled_housing_data]
n_epochs = 1000
learning_rate = 0.01
X = tf.placeholder(shape = (None, n+1), dtype=tf.float32, name="X")
y = tf.placeholder(shape=(None,1), dtype=tf.float32, name="y")
theta = tf.Variable(tf.random_uniform([n + 1, 1], -1.0, 1.0, seed=42), name="theta")
y_pred = tf.matmul(X, theta, name="predictions")
error = y_pred - y
mse = tf.reduce_mean(tf.square(error), name="mse")
gradients = 2/m * tf.matmul(tf.transpose(X), error)
training_op = tf.assign(theta, theta - learning_rate * gradients)
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for epoch in range(n_epochs):
        fn,wights, loss, pred, op = sess.run((error, theta, mse, y_pred,training_op), feed_dict={X:housing_data_plus_bias, y:target})
        print(loss)
    best_theta = theta.eval()
    print(best_theta)

考虑我已经训练并部署了这个模型(作为 tf.saver() 对象)。现在,如果我想预测新值,我必须为我的模型提供新的X 值并识别“y_pred”。. 此过程不会更新我的theta(权重)值(张量图,仅评估其依赖张量),并且预测模型将使用现有的theta如果我想使用新样本更新theta,我必须评估training_op

通过这种方式,我们可以在以后使用新数据改进 TF 模型。

注意:training_op,依赖于thetagradient

我还不能发表评论。如果您只是加载模型并使用 fit 方法,它将更新权重,而不是重新实例化所有权重。它只会使用新数据执行一些您可以选择的权重更新。