2011-09-22 50 views
14

Estoy buscando una buena implementación para la regresión logística (no regularizada) en Python. Estoy buscando un paquete que también pueda obtener pesos para cada vector. ¿Alguien puede sugerir una buena implementación/paquete? Gracias!Regresión logística ponderada en Python

+0

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

+1

Nada relevante en esta publicación, también intenté usar scipy, pero no pude encontrar ningún uso de pesas ... – user5497

Respuesta

-2

¿Conoces Numpy? Si no, echa un vistazo también a Scipy y matplotlib.

+2

Scipy ni Numpy dot tienen implementación de regresión logística (o no pude encontrar ninguna ...). matplotlib se usa principalmente para gráficos, dibujos, etc. ... – user5497

+1

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

+0

¡Gracias! Lo vi, sin embargo, implementa L2 regresión logística regularizada (y no regresión logística regular), y además no implementó pesos ... – user5497

0
+1

Gracias, sin embargo, no pude encontrar cómo dar diferentes pesos a cada vector ... – user5497

+0

'sklearn.linear_model.LogisticRegression' es una clase, su método' fit' le permite un peso definido. – ohe

+0

@ohe ¿cómo? Encontré el método 'fit', pero solo acepta parámetros para etiquetas y características. No pesas –

20

Me he dado cuenta de que esta pregunta es bastante viejo ahora, pero espero que esto puede ayudar a alguien. Con sklearn, puede utilizar la clase SGDClassifier para crear un modelo de regresión logística simplemente pasando en 'log' como la pérdida:

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

Esta clase implementa muestras ponderadas en la función fit():

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

donde pesos es una matriz que contiene los pesos de muestra que debe ser (obviamente) la misma longitud que la cantidad de puntos de datos en X.

Consulte http://scikit-learn.org/dev/modules/generated/sklearn.linear_model.SGDClassifier.html para obtener la documentación completa.

+3

con el apoyo de Olivier Grisel https://twitter.com/ogrisel/status/476367379413610497 – r0u1i

+1

Esto usa un contra-descanso para problemas de multiclases y no parece que admita la opción 'multi_class = 'multinomial'' en' LogisticRegression' – akxlr

4

El modo “equilibrado” utiliza los valores de y para ajustar automáticamente los pesos inversamente proporcional a frecuencias de clase en los datos de entrada como N_SAMPLES/(n_classes * np.bincount (y))

from sklearn.linear_model import LogisticRegression 

model = LogisticRegression(class_weight='balanced') 

model = model.fit(X, y) 

EDITAR

Los pesos de muestra se pueden agregar en el método de ajuste. Solo tienes que pasar una matriz de n_samples. Echa un vistazo a la documentación -

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

la esperanza que esto hace que ...

+0

Esto se refiere al desequilibrio de clase, pero ¿qué ocurre si queremos usar un peso separado para cada muestra? – mrgloom

+0

Buena pregunta @mrgloom! Puede especificar los pesos suministrando un dict de pesos en lugar de "equilibrado". Pesos asociados con las clases en la forma {class_label: weight}. Si no se da, se supone que todas las clases tienen peso uno. –

+0

Necesito un peso separado para cada muestra, no para cada clase. – mrgloom

Cuestiones relacionadas