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]]))

你可以看到中间的两条线不同,但差别不大。它所做的就是使用上一个模型中的参数作为起点,用新数据重新训练新模型。听起来你想做的是保存数据,然后在每次添加数据时用旧数据和新数据组合起来重新训练它。在

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐