¿Se puede crear una instancia de este tipo en función de los coeficientes existentes que se calcularon, por ejemplo, en una implementación diferente (por ejemplo, Java)?
Intenté crear una instancia y luego establecer coef_ e intercept_ directamente y parece funcionar, pero no estoy seguro de si hay algún inconveniente aquí o si podría estar rompiendo algo.
Sí, funciona bien:
import numpy as np from scipy.stats import norm from sklearn.linear_model import LogisticRegression import json x = np.arange(10)[:, np.newaxis] y = np.array([0,0,0,1,0,0,1,1,1,1]) # training one logistic regression model1 = LogisticRegression(C=10, penalty='l1').fit(x, y) # serialize coefficients (imitate loading from storage) encoded = json.dumps((model1.coef_.tolist(), model1.intercept_.tolist(), model1.penalty, model1.C)) print(encoded) decoded = json.loads(encoded) # using coefficients in another regression model2 = LogisticRegression() model2.coef_ = np.array(decoded[0]) model2.intercept_ = np.array(decoded[1]) model2.penalty = decoded[2] model2.C = decoded[3] # resulting predictions are identical print(model1.predict_proba(x) == model2.predict_proba(x))
Salida:
[[[0.7558780101653273]], [-3.322083150375962], "l1", 10] [[ True True] [ True True] [ True True] [ True True] [ True True] [ True True] [ True True] [ True True] [ True True] [ True True]]
Así que las predicciones de modelos originales y recreados son de hecho idénticas.