2014-06-26 8 views
6

È possibile creare una tale istanza basata su coefficienti esistenti che sono stati calcolati in una diversa implementazione (ad esempio Java)?Creazione di un'istanza sklearn.linear_model.LogisticRegression da coefficienti esistenti

Ho provato a creare un'istanza, quindi impostare direttamente coef_ e intercept_ e sembra funzionare, ma non sono sicuro che ci sia un lato negativo qui o se potessi rompere qualcosa.

+2

Fintanto che la funzione di previsione per la regressione utilizza solo le variabili impostate, è necessario procedere senza adattarle. –

+3

Per verificare ciò, è possibile eseguire una piccola regressione logistica in sklearn, quindi creare un nuovo oggetto di regressione logistica e impostare 'coef_' e' intercettare_' come hai fatto, quindi confrontare i due nella previsione. Se viene eseguito (questo non è un dato, molto difficile con ad esempio SVM), quindi non vedo perché non dovrebbe funzionare. – eickenberg

risposta

0

Sì, funziona bene:

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

uscita:

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

Così previsioni dei modelli originali e ricreato sono davvero identici.