2011-09-22 4 views
14

Sto cercando una buona implementazione per la regressione logistica (non regolarizzata) in Python. Sto cercando un pacchetto che possa anche ottenere pesi per ciascun vettore. Qualcuno può suggerire una buona implementazione/pacchetto? Grazie!Regressione logistica ponderata in Python

+0

pssible duplicato di http://stackoverflow.com/questions/3754051/python-or-sql-logistic-regression – Mansuro

+1

niente di rilevante in questo post, ho anche provato a usare scipy, ma non sono riuscito a trovare alcun uso dei pesi ... – user5497

risposta

-2

Conosci Numpy? Se no, dai un'occhiata anche a Scipy e matplotlib.

+2

Scipy né Numpy dot hanno alcuna implementazione di regressione logistica (o non ho trovato nessun ...). matplotlib è principalmente usato per grafici, disegni, ecc ... – user5497

+1

Trovo questo [blog] (http://blog.smellthedata.com/2009/06/python-logistic-regression-with-l2.html) – gunzapper

+0

Grazie! L'ho visto, tuttavia implementa la regressione logistica regolarizzata L2 (e non la regolare regressione logistica), e inoltre non ha implementato pesi ... – user5497

0
+1

Grazie, tuttavia, non ho trovato il modo di assegnare pesi diversi a ciascun vettore. – user5497

+0

'sklearn.linear_model.LogisticRegression' è una classe, il suo metodo' fit' consente di definire il peso. – ohe

+0

@ come, come? Ho trovato il metodo 'fit', ma accetta solo parametri per etichette e funzionalità. Non pesi. –

20

mi accorgo che questa domanda è abbastanza vecchio ora, ma spero che questo possa aiutare qualcuno. Con sklearn, è possibile utilizzare la classe SGDClassifier per creare un modello di regressione logistica semplicemente passando a 'log' come la perdita:

sklearn.linear_model.SGDClassifier(loss='log', ...). 

Questa classe implementa campioni pesati nella funzione fit():

classifier.fit(X, Y, sample_weight=weights) 

dove weights è un array contenente i pesi campione che devono essere (ovviamente) della stessa lunghezza del numero di punti dati in X.

Vedere http://scikit-learn.org/dev/modules/generated/sklearn.linear_model.SGDClassifier.html per la documentazione completa.

+3

supportato da Olivier Grisel https://twitter.com/ogrisel/status/476367379413610497 – r0u1i

+1

Questo utilizza un-vs-resto per i problemi multiclasse e non sembra che supporti l'opzione 'multi_class = 'multinomial'' in' LogisticRegression' – akxlr

4

La modalità “bilanciata” utilizza i valori di y per regolare automaticamente pesi inversamente proporzionali alle frequenze classe nei dati di input come N_SAMPLES/(n_classes * np.bincount (y))

from sklearn.linear_model import LogisticRegression 

model = LogisticRegression(class_weight='balanced') 

model = model.fit(X, y) 

EDIT

I pesi campione possono essere aggiunti nel metodo di adattamento. Devi solo passare una serie di n_samples. Scopri la documentazione -

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression.fit

Spero che questo lo fa ...

+0

Questo si riferisce allo squilibrio di classe, ma cosa succede se si desidera utilizzare un peso separato per ciascun campione? – mrgloom

+0

Buona domanda @mrgloom! È possibile specificare i pesi fornendo una quantità di pesi anziché "bilanciati". Pesi associati alle classi nella forma {class_label: weight}. Se non viene dato, tutte le classi dovrebbero avere il peso uno. –

+0

Ho bisogno di peso separato per ogni campione, non per ogni classe. – mrgloom