LogicsticRegression
オブジェクトのサイズは、それを訓練するためにいくつのサンプルが使用されているかには関係ありません。
1230
1233
で
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)))
結果が間違ったモデルオブジェクトを保存することがあります。 log_regression_modelを保存していることを確認してください。 「モデルで
pickle.dump(log_regression_model, open('model.pkl', 'wb'))
ので、異なるサイズ、およびLogisticRegression
オブジェクトは学習サンプルの異なる数とそのサイズを変更しないという事実は、それが保存されたモデルを生成するために使用されている別のコードのように見え、この新しいです再訓練された "モデル。
warm_startはここに何もしていないように、それはまた見え、言ったことすべて:
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_)
が与える:
this other questionに基づいて
(array([ 0.01846266]), array([[-0.32172516]]))
(array([ 0.17253402]), array([[ 0.33734497]]))
(array([ 0.17253402]), array([[ 0.33734497]]))
(array([ 0.09707612]), array([[ 0.01501025]]))
あなたが別のソルバーを使用する場合、warm_start
は、いくつかの効果があります(例:LogisticRegression(warm_start=True, solver='sag')
)、新しいデータが追加されたデータセット全体の再トレーニングと同じではありません。例えば、上記の4つの出力は次のようになります。
(array([ 0.01915884]), array([[-0.32176053]]))
(array([ 0.17973458]), array([[ 0.33708208]]))
(array([ 0.17968324]), array([[ 0.33707362]]))
(array([ 0.09903978]), array([[ 0.01488605]]))
あなたは中央の2本のラインが異なっている見るが、非常に異なることができません。新しいモデルで新しいモデルを再学習するための出発点として、最後のモデルのパラメータを使用するだけです。あなたがやりたいことは、データを保存し、データを追加するたびに古いデータと新しいデータを組み合わせて再編成することです。
質問:あなたが元に新しいデータを追加し、データセット全体に再教育することはできませんか?補足として、私は次のリンクをチェックします:http://scikit-learn.org/stable/modules/scaling_strategies.html。次に、ニューラルネットワークで頻繁に使用されるミニバッチ戦略(自分で勾配降下を実装する必要があります)を考慮しますが、ロジスティック回帰は非常に簡単です(https://udata.science/2017/08/31/を参照)。 python-by-logistic-regression-from-scratch /)を使用します。しかし、この戦略では、データセット全体でいくつかのパスを実行する必要があります... – Umberto
データが巨大で、現在のリソースがあるため、新しい古いデータでモデルを再トレーニングするのは効率的ではありません。モデル、 –