python模型训练 warm_start_如何用新的d重新训练sklearn中的logistic回归模型
LogicsticRegression对象的大小与用于训练它的样本数无关。在from sklearn.linear_model import LogisticRegressionimport pickleimport sysnp.random.seed(0)X, y = np.random.randn(100000, 1), np.random.randint(2, size=(100000,))
LogicsticRegression对象的大小与用于训练它的样本数无关。在from sklearn.linear_model import LogisticRegression
import pickle
import sys
np.random.seed(0)
X, y = np.random.randn(100000, 1), np.random.randint(2, size=(100000,))
log_regression_model = LogisticRegression(warm_start=True)
log_regression_model.fit(X, y)
print(sys.getsizeof(pickle.dumps(log_regression_model)))
np.random.seed(0)
X, y = np.random.randn(100, 1), np.random.randint(2, size=(100,))
log_regression_model = LogisticRegression(warm_start=True)
log_regression_model.fit(X, y)
print(sys.getsizeof(pickle.dumps(log_regression_model)))
结果
^{pr2}$
您可能保存了错误的模型对象。确保您正在保存log_回归模型。在pickle.dump(log_regression_model, open('model.pkl', 'wb'))
由于模型的大小如此不同,而且LogisticRegression对象的大小不会随着训练样本数的不同而改变,因此看起来好像使用了不同的代码来生成保存的模型和这个新的“重新训练”模型。在
尽管如此,看起来温热启动在这里什么也做不了:np.random.seed(0)
X, y = np.random.randn(200, 1), np.random.randint(2, size=(200,))
log_regression_model = LogisticRegression(warm_start=True)
log_regression_model.fit(X[:100], y[:100])
print(log_regression_model.intercept_, log_regression_model.coef_)
log_regression_model.fit(X[100:], y[100:])
print(log_regression_model.intercept_, log_regression_model.coef_)
log_regression_model = LogisticRegression(warm_start=False)
log_regression_model.fit(X[100:], y[100:])
print(log_regression_model.intercept_, log_regression_model.coef_)
log_regression_model = LogisticRegression(warm_start=False)
log_regression_model.fit(X, y)
print(log_regression_model.intercept_, log_regression_model.coef_)
给出:(array([ 0.01846266]), array([[-0.32172516]]))
(array([ 0.17253402]), array([[ 0.33734497]]))
(array([ 0.17253402]), array([[ 0.33734497]]))
(array([ 0.09707612]), array([[ 0.01501025]]))
基于this other question,warm_start如果使用另一个解算器(例如LogisticRegression(warm_start=True, solver='sag')),则会有一些效果,但这仍然与在添加新数据的整个数据集上重新训练不同。例如,上述四个输出变成:(array([ 0.01915884]), array([[-0.32176053]]))
(array([ 0.17973458]), array([[ 0.33708208]]))
(array([ 0.17968324]), array([[ 0.33707362]]))
(array([ 0.09903978]), array([[ 0.01488605]]))
你可以看到中间的两条线不同,但差别不大。它所做的就是使用上一个模型中的参数作为起点,用新数据重新训练新模型。听起来你想做的是保存数据,然后在每次添加数据时用旧数据和新数据组合起来重新训练它。在
更多推荐
所有评论(0)