Estoy intentando ver si la implementación de la regresión logística en mi es correcta. Para ello primero empecé a generar algunos datos aleatorios X y especificar algunos pesos predefinidos.
Cuando entreno el modelo utilizando una implementación estándar de regresión logística, el modelo no aprende las ponderaciones correctas especificadas previamente. ¿Estoy haciendo algo mal en mi aplicación?
Este es mi código:
import numpy as np
import statsmodels.api as sm
X = sm.add_constant(np.random.randn(1000,3)*10)
w = np.array([0.25, 0.1, 0.3, -1.5])
def logit(x):
return 1. / (1. + np.exp(x))
y = logit(np.dot(X,w) + np.random.randn(X.shape[0])*0.0001) # y ~ logit(X.w + Random Noise)
model = sm.Logit(y>0.5, X) # Label y as 1 if y > 0.5 else 0
res = model.fit()
print res.summary2()
Este es el resultado que obtengo de mi modelo:
Warning: Maximum number of iterations has been exceeded.
Current function value: 0.000000
Iterations: 35
Results: Logit
==================================================================
Model: Logit Pseudo R-squared: 1.000
Dependent Variable: y AIC: 8.0000
Date: 2016-02-21 18:08 BIC: 27.6310
No. Observations: 1000 Log-Likelihood: -6.5515e-06
Df Model: 3 LL-Null: -692.70
Df Residuals: 996 LLR p-value: 4.3502e-300
Converged: 0.0000 Scale: 1.0000
No. Iterations: 35.0000
------------------------------------------------------------------
Coef. Std.Err. z P>|z| [0.025 0.975]
------------------------------------------------------------------
const -28.4569 1024.9463 -0.0278 0.9779 -2037.3148 1980.4009
x1 -13.8000 411.2444 -0.0336 0.9732 -819.8241 792.2242
x2 -40.6588 1204.5892 -0.0338 0.9731 -2401.6104 2320.2927
x3 201.4672 5953.2122 0.0338 0.9730 -11466.6144 11869.5488
==================================================================
¿Qué estoy haciendo mal? ¿No debería el modelo aprender los coeficientes como las ponderaciones que especifiqué anteriormente?