diff --git a/scikits/learn/glm/enet_cd.py b/scikits/learn/glm/enet_cd.py index 68280335c97ce9d6b1e137a34bde44d5c2c9e352..ef6ecafee725607714fb591566c71e7ddc98fea8 100644 --- a/scikits/learn/glm/enet_cd.py +++ b/scikits/learn/glm/enet_cd.py @@ -29,14 +29,17 @@ def enet_coordinate_descent(model, X, y, maxit): for n_iter in range(maxit): for ii in xrange(n_features): # Loop over coordinates w_ii = w[ii] # Store previous value - R[:n_samples] += w_ii * X[:, ii] - R[n_samples + ii] += w_ii * sqrt(beta) + if w_ii != 0.0: + R[:n_samples] += w_ii * X[:, ii] + R[n_samples + ii] += w_ii * sqrt(beta) tmp = (X[:, ii] * R[:n_samples]).sum() tmp += sqrt(beta) * R[n_samples + ii] w[ii] = np.sign(tmp) * np.maximum(abs(tmp) - alpha, 0) \ / (norm_cols_X[ii] + beta) - R[:n_samples] -= w[ii] * X[:, ii] # Update residual - R[n_samples + ii] -= w[ii] * sqrt(beta) + + if w[ii] != 0.0: + R[:n_samples] -= w[ii] * X[:, ii] # Update residual + R[n_samples + ii] -= w[ii] * sqrt(beta) for callback in callbacks: if not callback(n_iter, X=X, y=y, w=w, alpha=alpha, beta=beta, R=R): diff --git a/scikits/learn/glm/lasso_cd.py b/scikits/learn/glm/lasso_cd.py index 12a1484ac51d2d17c97ce30d8c1df46fb8bff2a1..704edfdb9190dd5eae8434278da90b585d0f5661 100644 --- a/scikits/learn/glm/lasso_cd.py +++ b/scikits/learn/glm/lasso_cd.py @@ -24,11 +24,13 @@ def lasso_coordinate_descent(model, X, y, maxit): for n_iter in range(maxit): for ii in xrange(n_features): # Loop over coordinates w_ii = w[ii] # Store previous value - R += w_ii * X[:, ii] + if w_ii != 0.0: + R += w_ii * X[:, ii] tmp = (X[:, ii] * R).sum() w[ii] = np.sign(tmp) * np.maximum(abs(tmp) - alpha, 0) \ / norm_cols_X[ii] - R -= w[ii] * X[:, ii] # Update residual + if w[ii] != 0.0: + R -= w[ii] * X[:, ii] # Update residual for callback in callbacks: if not callback(n_iter, X=X, y=y, w=w, alpha=alpha, R=R): diff --git a/scikits/learn/glm/src/enet_cd_fast.c b/scikits/learn/glm/src/enet_cd_fast.c index 97b0889a778c4fcc309831355aaf38d707eee260..f4362599260f50e0fa5c8b261c1dac2a8d69624f 100644 --- a/scikits/learn/glm/src/enet_cd_fast.c +++ b/scikits/learn/glm/src/enet_cd_fast.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.11.2 on Mon Mar 15 12:34:39 2010 */ +/* Generated by Cython 0.11.2 on Wed Mar 17 11:28:04 2010 */ #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -131,7 +131,7 @@ #define __PYX_EXTERN_C extern #endif #include <math.h> -#define __PYX_HAVE_API__scikits__learn__linreg__enet_cd_fast +#define __PYX_HAVE_API__enet_cd_fast #include "stdlib.h" #include "numpy/arrayobject.h" #include "math.h" @@ -693,7 +693,7 @@ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; typedef npy_cdouble __pyx_t_5numpy_complex_t; -typedef __pyx_t_5numpy_float64_t __pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE; +typedef __pyx_t_5numpy_float64_t __pyx_t_12enet_cd_fast_DOUBLE; /* Module declarations from python_buffer */ /* Module declarations from stdlib */ @@ -707,14 +707,14 @@ static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; static INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ /* Module declarations from cython */ -/* Module declarations from scikits.learn.linreg.enet_cd_fast */ +/* Module declarations from enet_cd_fast */ -static INLINE double __pyx_f_7scikits_5learn_6linreg_12enet_cd_fast_fsign(double); /*proto*/ -static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE = { "scikits.learn.linreg.enet_cd_fast.DOUBLE", NULL, sizeof(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE), 'R' }; -#define __Pyx_MODULE_NAME "scikits.learn.linreg.enet_cd_fast" -int __pyx_module_is_main_scikits__learn__linreg__enet_cd_fast = 0; +static INLINE double __pyx_f_12enet_cd_fast_fsign(double); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_12enet_cd_fast_DOUBLE = { "enet_cd_fast.DOUBLE", NULL, sizeof(__pyx_t_12enet_cd_fast_DOUBLE), 'R' }; +#define __Pyx_MODULE_NAME "enet_cd_fast" +int __pyx_module_is_main_enet_cd_fast = 0; -/* Implementation of scikits.learn.linreg.enet_cd_fast */ +/* Implementation of enet_cd_fast */ static PyObject *__pyx_int_2; static PyObject *__pyx_int_0; static char __pyx_k___main__[] = "__main__"; @@ -817,7 +817,7 @@ static char __pyx_k_28[] = "Non-native byte order not supported"; static char __pyx_k_29[] = "Format string allocated too short."; static char __pyx_k_30[] = "unknown dtype code in numpy.pxd (%d)"; -/* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":18 +/* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":18 * double rand() * * cdef inline double fsign(double f): # <<<<<<<<<<<<<< @@ -825,12 +825,12 @@ static char __pyx_k_30[] = "unknown dtype code in numpy.pxd (%d)"; * return 0 */ -static INLINE double __pyx_f_7scikits_5learn_6linreg_12enet_cd_fast_fsign(double __pyx_v_f) { +static INLINE double __pyx_f_12enet_cd_fast_fsign(double __pyx_v_f) { double __pyx_r; int __pyx_t_1; __Pyx_SetupRefcountContext("fsign"); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":19 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":19 * * cdef inline double fsign(double f): * if f == 0: # <<<<<<<<<<<<<< @@ -840,7 +840,7 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_12enet_cd_fast_fsign(double __pyx_t_1 = (__pyx_v_f == 0); if (__pyx_t_1) { - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":20 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":20 * cdef inline double fsign(double f): * if f == 0: * return 0 # <<<<<<<<<<<<<< @@ -852,7 +852,7 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_12enet_cd_fast_fsign(double goto __pyx_L3; } - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":21 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":21 * if f == 0: * return 0 * elif f > 0: # <<<<<<<<<<<<<< @@ -862,7 +862,7 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_12enet_cd_fast_fsign(double __pyx_t_1 = (__pyx_v_f > 0); if (__pyx_t_1) { - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":22 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":22 * return 0 * elif f > 0: * return 1.0 # <<<<<<<<<<<<<< @@ -875,7 +875,7 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_12enet_cd_fast_fsign(double } /*else*/ { - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":24 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":24 * return 1.0 * else: * return -1.0 # <<<<<<<<<<<<<< @@ -893,7 +893,7 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_12enet_cd_fast_fsign(double return __pyx_r; } -/* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":30 +/* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":30 * @cython.boundscheck(False) * @cython.wraparound(False) * def enet_coordinate_descent(model, # <<<<<<<<<<<<<< @@ -901,9 +901,9 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_12enet_cd_fast_fsign(double * np.ndarray[DOUBLE, ndim=1] y, */ -static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate_descent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate_descent[] = "Cython version of the coordinate descent algorithm\n for Elastic-Net regression\n "; -static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate_descent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pf_12enet_cd_fast_enet_coordinate_descent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_12enet_cd_fast_enet_coordinate_descent[] = "Cython version of the coordinate descent algorithm\n for Elastic-Net regression\n "; +static PyObject *__pyx_pf_12enet_cd_fast_enet_coordinate_descent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_model = 0; PyArrayObject *__pyx_v_X = 0; PyArrayObject *__pyx_v_y = 0; @@ -954,7 +954,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate unsigned int __pyx_t_9; unsigned int __pyx_t_10; unsigned int __pyx_t_11; - unsigned int __pyx_t_12; + int __pyx_t_12; unsigned int __pyx_t_13; unsigned int __pyx_t_14; unsigned int __pyx_t_15; @@ -969,8 +969,9 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate unsigned int __pyx_t_24; unsigned int __pyx_t_25; unsigned int __pyx_t_26; - int __pyx_t_27; - int __pyx_t_28; + unsigned int __pyx_t_27; + unsigned int __pyx_t_28; + int __pyx_t_29; static PyObject **__pyx_pyargnames[] = {&__pyx_kp_model,&__pyx_kp_X,&__pyx_kp_y,&__pyx_kp_maxit,0}; __Pyx_SetupRefcountContext("enet_coordinate_descent"); __pyx_self = __pyx_self; @@ -1028,7 +1029,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("enet_coordinate_descent", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; - __Pyx_AddTraceback("scikits.learn.linreg.enet_cd_fast.enet_coordinate_descent"); + __Pyx_AddTraceback("enet_cd_fast.enet_coordinate_descent"); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_v_callbacks = Py_None; __Pyx_INCREF(Py_None); @@ -1043,18 +1044,18 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_X, (PyObject*)__pyx_v_X, &__Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_X, (PyObject*)__pyx_v_X, &__Pyx_TypeInfo_nn___pyx_t_12enet_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_bstride_0_X = __pyx_bstruct_X.strides[0]; __pyx_bstride_1_X = __pyx_bstruct_X.strides[1]; __pyx_bshape_0_X = __pyx_bstruct_X.shape[0]; __pyx_bshape_1_X = __pyx_bstruct_X.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_y, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_y, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_nn___pyx_t_12enet_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_bstride_0_y = __pyx_bstruct_y.strides[0]; __pyx_bshape_0_y = __pyx_bstruct_y.shape[0]; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":39 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":39 * * # get the data information into easy vars * cdef float alpha = model.alpha # <<<<<<<<<<<<<< @@ -1067,7 +1068,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_alpha = __pyx_t_2; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":40 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":40 * # get the data information into easy vars * cdef float alpha = model.alpha * cdef float beta = model.beta # <<<<<<<<<<<<<< @@ -1080,7 +1081,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_beta = __pyx_t_2; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":41 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":41 * cdef float alpha = model.alpha * cdef float beta = model.beta * cdef np.ndarray[DOUBLE, ndim=1] w = model.w # <<<<<<<<<<<<<< @@ -1093,7 +1094,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_t_3 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_w, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_w, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_nn___pyx_t_12enet_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_w = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_w.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_bstride_0_w = __pyx_bstruct_w.strides[0]; @@ -1104,7 +1105,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_v_w = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":42 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":42 * cdef float beta = model.beta * cdef np.ndarray[DOUBLE, ndim=1] w = model.w * callbacks = model.callbacks # <<<<<<<<<<<<<< @@ -1117,7 +1118,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_v_callbacks = __pyx_t_1; __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":44 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":44 * callbacks = model.callbacks * * cdef unsigned int nsamples = X.shape[0] # <<<<<<<<<<<<<< @@ -1126,7 +1127,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate */ __pyx_v_nsamples = (__pyx_v_X->dimensions[0]); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":45 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":45 * * cdef unsigned int nsamples = X.shape[0] * cdef unsigned int nfeatures = X.shape[1] # <<<<<<<<<<<<<< @@ -1135,7 +1136,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate */ __pyx_v_nfeatures = (__pyx_v_X->dimensions[1]); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":46 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":46 * cdef unsigned int nsamples = X.shape[0] * cdef unsigned int nfeatures = X.shape[1] * cdef unsigned int nclasses = w.shape[1] # <<<<<<<<<<<<<< @@ -1144,7 +1145,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate */ __pyx_v_nclasses = (__pyx_v_w->dimensions[1]); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":49 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":49 * * # compute norms of the columns of X * cdef np.ndarray[DOUBLE, ndim=1] norm_cols_X = (X**2).sum(axis=0) # <<<<<<<<<<<<<< @@ -1167,7 +1168,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_t_5 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_norm_cols_X, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_norm_cols_X, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_12enet_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_norm_cols_X = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_norm_cols_X.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_bstride_0_norm_cols_X = __pyx_bstruct_norm_cols_X.strides[0]; @@ -1178,7 +1179,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_v_norm_cols_X = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":52 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":52 * * # initial value of the residuals * cdef np.ndarray[DOUBLE, ndim=1] R = np.empty(nfeatures + nsamples) # <<<<<<<<<<<<<< @@ -1205,7 +1206,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_t_7 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_R, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_R, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_12enet_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_R = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_R.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_bstride_0_R = __pyx_bstruct_R.strides[0]; @@ -1216,7 +1217,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_v_R = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":53 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":53 * # initial value of the residuals * cdef np.ndarray[DOUBLE, ndim=1] R = np.empty(nfeatures + nsamples) * R[:nsamples] = y - np.dot(X, w) # <<<<<<<<<<<<<< @@ -1246,7 +1247,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate if (PySequence_SetSlice(((PyObject *)__pyx_v_R), 0, __pyx_v_nsamples, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":54 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":54 * cdef np.ndarray[DOUBLE, ndim=1] R = np.empty(nfeatures + nsamples) * R[:nsamples] = y - np.dot(X, w) * R[nsamples:] = - sqrt(beta) * w # <<<<<<<<<<<<<< @@ -1261,7 +1262,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate if (PySequence_SetSlice(((PyObject *)__pyx_v_R), __pyx_v_nsamples, PY_SSIZE_T_MAX, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":62 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":62 * cdef unsigned int n_iter * * for callback in callbacks: # <<<<<<<<<<<<<< @@ -1293,7 +1294,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_v_callback = __pyx_t_6; __pyx_t_6 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":63 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":63 * * for callback in callbacks: * callback(0) # Init callback # <<<<<<<<<<<<<< @@ -1312,7 +1313,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":65 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":65 * callback(0) # Init callback * * goon = True # <<<<<<<<<<<<<< @@ -1325,7 +1326,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_v_goon = __pyx_t_1; __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":66 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":66 * * goon = True * for n_iter in range(maxit): # <<<<<<<<<<<<<< @@ -1335,7 +1336,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_v_maxit; __pyx_t_9+=1) { __pyx_v_n_iter = __pyx_t_9; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":67 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":67 * goon = True * for n_iter in range(maxit): * for ii in xrange(nfeatures): # Loop over coordinates # <<<<<<<<<<<<<< @@ -1345,50 +1346,63 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_v_nfeatures; __pyx_t_10+=1) { __pyx_v_ii = __pyx_t_10; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":68 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":68 * for n_iter in range(maxit): * for ii in xrange(nfeatures): # Loop over coordinates * w_ii = w[ii] # Store previous value # <<<<<<<<<<<<<< * - * # R += w_ii * X[:,ii] + * if w_ii != 0.0: */ __pyx_t_11 = __pyx_v_ii; - __pyx_v_w_ii = (*__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_11, __pyx_bstride_0_w)); + __pyx_v_w_ii = (*__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_11, __pyx_bstride_0_w)); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":71 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":70 + * w_ii = w[ii] # Store previous value * - * # R += w_ii * X[:,ii] - * for jj in range(nsamples): # <<<<<<<<<<<<<< - * R[jj] += w_ii * X[jj,ii] - * R[nsamples+ii] += w_ii * sqrt(beta) - */ - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_v_nsamples; __pyx_t_12+=1) { - __pyx_v_jj = __pyx_t_12; - - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":72 - * # R += w_ii * X[:,ii] - * for jj in range(nsamples): - * R[jj] += w_ii * X[jj,ii] # <<<<<<<<<<<<<< - * R[nsamples+ii] += w_ii * sqrt(beta) + * if w_ii != 0.0: # <<<<<<<<<<<<<< + * # R += w_ii * X[:,ii] + * for jj in range(nsamples): + */ + __pyx_t_12 = (__pyx_v_w_ii != 0.0); + if (__pyx_t_12) { + + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":72 + * if w_ii != 0.0: + * # R += w_ii * X[:,ii] + * for jj in range(nsamples): # <<<<<<<<<<<<<< + * R[jj] += w_ii * X[jj,ii] + * R[nsamples+ii] += w_ii * sqrt(beta) + */ + for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_v_nsamples; __pyx_t_13+=1) { + __pyx_v_jj = __pyx_t_13; + + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":73 + * # R += w_ii * X[:,ii] + * for jj in range(nsamples): + * R[jj] += w_ii * X[jj,ii] # <<<<<<<<<<<<<< + * R[nsamples+ii] += w_ii * sqrt(beta) * */ - __pyx_t_13 = __pyx_v_jj; - __pyx_t_14 = __pyx_v_ii; - __pyx_t_15 = __pyx_v_jj; - *__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_15, __pyx_bstride_0_R) += (__pyx_v_w_ii * (*__Pyx_BufPtrStrided2d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_13, __pyx_bstride_0_X, __pyx_t_14, __pyx_bstride_1_X))); - } + __pyx_t_14 = __pyx_v_jj; + __pyx_t_15 = __pyx_v_ii; + __pyx_t_16 = __pyx_v_jj; + *__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_16, __pyx_bstride_0_R) += (__pyx_v_w_ii * (*__Pyx_BufPtrStrided2d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_14, __pyx_bstride_0_X, __pyx_t_15, __pyx_bstride_1_X))); + } - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":73 - * for jj in range(nsamples): - * R[jj] += w_ii * X[jj,ii] - * R[nsamples+ii] += w_ii * sqrt(beta) # <<<<<<<<<<<<<< + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":74 + * for jj in range(nsamples): + * R[jj] += w_ii * X[jj,ii] + * R[nsamples+ii] += w_ii * sqrt(beta) # <<<<<<<<<<<<<< * * # tmp = (X[:,ii]*R).sum() */ - __pyx_t_12 = (__pyx_v_nsamples + __pyx_v_ii); - *__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_12, __pyx_bstride_0_R) += (__pyx_v_w_ii * sqrt(__pyx_v_beta)); + __pyx_t_13 = (__pyx_v_nsamples + __pyx_v_ii); + *__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_13, __pyx_bstride_0_R) += (__pyx_v_w_ii * sqrt(__pyx_v_beta)); + goto __pyx_L12; + } + __pyx_L12:; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":76 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":77 * * # tmp = (X[:,ii]*R).sum() * tmp = 0.0 # <<<<<<<<<<<<<< @@ -1397,86 +1411,100 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate */ __pyx_v_tmp = 0.0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":77 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":78 * # tmp = (X[:,ii]*R).sum() * tmp = 0.0 * for jj in range(nsamples): # <<<<<<<<<<<<<< * tmp += R[jj] * X[jj,ii] * */ - for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_v_nsamples; __pyx_t_16+=1) { - __pyx_v_jj = __pyx_t_16; + for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_v_nsamples; __pyx_t_17+=1) { + __pyx_v_jj = __pyx_t_17; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":78 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":79 * tmp = 0.0 * for jj in range(nsamples): * tmp += R[jj] * X[jj,ii] # <<<<<<<<<<<<<< * * w[ii] = fsign(tmp) * fmax(fabs(tmp) - alpha, 0) \ */ - __pyx_t_17 = __pyx_v_jj; __pyx_t_18 = __pyx_v_jj; - __pyx_t_19 = __pyx_v_ii; - __pyx_v_tmp += ((*__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_17, __pyx_bstride_0_R)) * (*__Pyx_BufPtrStrided2d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_18, __pyx_bstride_0_X, __pyx_t_19, __pyx_bstride_1_X))); + __pyx_t_19 = __pyx_v_jj; + __pyx_t_20 = __pyx_v_ii; + __pyx_v_tmp += ((*__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_18, __pyx_bstride_0_R)) * (*__Pyx_BufPtrStrided2d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_19, __pyx_bstride_0_X, __pyx_t_20, __pyx_bstride_1_X))); } - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":81 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":82 * * w[ii] = fsign(tmp) * fmax(fabs(tmp) - alpha, 0) \ * / (norm_cols_X[ii] + beta) # <<<<<<<<<<<<<< * - * # R -= w[ii] * X[:,ii] # Update residual + * if w[ii] != 0.0: */ - __pyx_t_16 = __pyx_v_ii; + __pyx_t_17 = __pyx_v_ii; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":80 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":81 * tmp += R[jj] * X[jj,ii] * * w[ii] = fsign(tmp) * fmax(fabs(tmp) - alpha, 0) \ # <<<<<<<<<<<<<< * / (norm_cols_X[ii] + beta) * */ - __pyx_t_20 = __pyx_v_ii; - *__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_20, __pyx_bstride_0_w) = ((__pyx_f_7scikits_5learn_6linreg_12enet_cd_fast_fsign(__pyx_v_tmp) * fmax((fabs(__pyx_v_tmp) - __pyx_v_alpha), 0)) / ((*__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_norm_cols_X.buf, __pyx_t_16, __pyx_bstride_0_norm_cols_X)) + __pyx_v_beta)); + __pyx_t_21 = __pyx_v_ii; + *__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_21, __pyx_bstride_0_w) = ((__pyx_f_12enet_cd_fast_fsign(__pyx_v_tmp) * fmax((fabs(__pyx_v_tmp) - __pyx_v_alpha), 0)) / ((*__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_norm_cols_X.buf, __pyx_t_17, __pyx_bstride_0_norm_cols_X)) + __pyx_v_beta)); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":84 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":84 + * / (norm_cols_X[ii] + beta) * - * # R -= w[ii] * X[:,ii] # Update residual - * for jj in range(nsamples): # <<<<<<<<<<<<<< - * R[jj] -= w[ii] * X[jj,ii] # Update residual - * R[nsamples+ii] -= w[ii] * sqrt(beta) - */ - for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_v_nsamples; __pyx_t_21+=1) { - __pyx_v_jj = __pyx_t_21; - - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":85 - * # R -= w[ii] * X[:,ii] # Update residual - * for jj in range(nsamples): - * R[jj] -= w[ii] * X[jj,ii] # Update residual # <<<<<<<<<<<<<< - * R[nsamples+ii] -= w[ii] * sqrt(beta) + * if w[ii] != 0.0: # <<<<<<<<<<<<<< + * # R -= w[ii] * X[:,ii] # Update residual + * for jj in range(nsamples): + */ + __pyx_t_22 = __pyx_v_ii; + __pyx_t_12 = ((*__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_22, __pyx_bstride_0_w)) != 0.0); + if (__pyx_t_12) { + + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":86 + * if w[ii] != 0.0: + * # R -= w[ii] * X[:,ii] # Update residual + * for jj in range(nsamples): # <<<<<<<<<<<<<< + * R[jj] -= w[ii] * X[jj,ii] # Update residual + * R[nsamples+ii] -= w[ii] * sqrt(beta) + */ + for (__pyx_t_23 = 0; __pyx_t_23 < __pyx_v_nsamples; __pyx_t_23+=1) { + __pyx_v_jj = __pyx_t_23; + + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":87 + * # R -= w[ii] * X[:,ii] # Update residual + * for jj in range(nsamples): + * R[jj] -= w[ii] * X[jj,ii] # Update residual # <<<<<<<<<<<<<< + * R[nsamples+ii] -= w[ii] * sqrt(beta) * */ - __pyx_t_22 = __pyx_v_ii; - __pyx_t_23 = __pyx_v_jj; - __pyx_t_24 = __pyx_v_ii; - __pyx_t_25 = __pyx_v_jj; - *__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_25, __pyx_bstride_0_R) -= ((*__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_22, __pyx_bstride_0_w)) * (*__Pyx_BufPtrStrided2d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_23, __pyx_bstride_0_X, __pyx_t_24, __pyx_bstride_1_X))); - } + __pyx_t_24 = __pyx_v_ii; + __pyx_t_25 = __pyx_v_jj; + __pyx_t_26 = __pyx_v_ii; + __pyx_t_27 = __pyx_v_jj; + *__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_27, __pyx_bstride_0_R) -= ((*__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_24, __pyx_bstride_0_w)) * (*__Pyx_BufPtrStrided2d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_25, __pyx_bstride_0_X, __pyx_t_26, __pyx_bstride_1_X))); + } - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":86 - * for jj in range(nsamples): - * R[jj] -= w[ii] * X[jj,ii] # Update residual - * R[nsamples+ii] -= w[ii] * sqrt(beta) # <<<<<<<<<<<<<< + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":88 + * for jj in range(nsamples): + * R[jj] -= w[ii] * X[jj,ii] # Update residual + * R[nsamples+ii] -= w[ii] * sqrt(beta) # <<<<<<<<<<<<<< * * for callback in callbacks: */ - __pyx_t_21 = __pyx_v_ii; - __pyx_t_26 = (__pyx_v_nsamples + __pyx_v_ii); - *__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_26, __pyx_bstride_0_R) -= ((*__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_12enet_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_21, __pyx_bstride_0_w)) * sqrt(__pyx_v_beta)); + __pyx_t_23 = __pyx_v_ii; + __pyx_t_28 = (__pyx_v_nsamples + __pyx_v_ii); + *__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_28, __pyx_bstride_0_R) -= ((*__Pyx_BufPtrStrided1d(__pyx_t_12enet_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_23, __pyx_bstride_0_w)) * sqrt(__pyx_v_beta)); + goto __pyx_L17; + } + __pyx_L17:; } - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":88 - * R[nsamples+ii] -= w[ii] * sqrt(beta) + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":90 + * R[nsamples+ii] -= w[ii] * sqrt(beta) * * for callback in callbacks: # <<<<<<<<<<<<<< * if not callback(n_iter, X=X, y=y, w=w, alpha=alpha, beta=beta, R=R): @@ -1485,7 +1513,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate if (PyList_CheckExact(__pyx_v_callbacks) || PyTuple_CheckExact(__pyx_v_callbacks)) { __pyx_t_8 = 0; __pyx_t_1 = __pyx_v_callbacks; __Pyx_INCREF(__pyx_t_1); } else { - __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_callbacks); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_callbacks); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); } for (;;) { @@ -1498,7 +1526,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate } else { __pyx_t_4 = PyIter_Next(__pyx_t_1); if (!__pyx_t_4) { - if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} break; } __Pyx_GOTREF(__pyx_t_4); @@ -1507,76 +1535,76 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __pyx_v_callback = __pyx_t_4; __pyx_t_4 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":89 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":91 * * for callback in callbacks: * if not callback(n_iter, X=X, y=y, w=w, alpha=alpha, beta=beta, R=R): # <<<<<<<<<<<<<< * goon *= False * */ - __pyx_t_4 = PyLong_FromUnsignedLong(__pyx_v_n_iter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyLong_FromUnsignedLong(__pyx_v_n_iter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_1)); - if (PyDict_SetItem(__pyx_1, __pyx_kp_X, ((PyObject *)__pyx_v_X)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (PyDict_SetItem(__pyx_1, __pyx_kp_y, ((PyObject *)__pyx_v_y)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (PyDict_SetItem(__pyx_1, __pyx_kp_w, ((PyObject *)__pyx_v_w)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_4 = PyFloat_FromDouble(__pyx_v_alpha); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_X, ((PyObject *)__pyx_v_X)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_y, ((PyObject *)__pyx_v_y)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_w, ((PyObject *)__pyx_v_w)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_alpha); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_1, __pyx_kp_alpha, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_alpha, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyFloat_FromDouble(__pyx_v_beta); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyFloat_FromDouble(__pyx_v_beta); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_1, __pyx_kp_beta, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_beta, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_1, __pyx_kp_R, ((PyObject *)__pyx_v_R)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_v_callback, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_R, ((PyObject *)__pyx_v_R)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = PyEval_CallObjectWithKeywords(__pyx_v_callback, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_1)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0; - __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_27 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_28 = (!__pyx_t_27); - if (__pyx_t_28) { + __pyx_t_29 = (!__pyx_t_12); + if (__pyx_t_29) { - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":90 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":92 * for callback in callbacks: * if not callback(n_iter, X=X, y=y, w=w, alpha=alpha, beta=beta, R=R): * goon *= False # <<<<<<<<<<<<<< * * if not goon: */ - __pyx_t_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); - __pyx_1 = PyNumber_InPlaceMultiply(__pyx_v_goon, __pyx_t_4); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_1 = PyNumber_InPlaceMultiply(__pyx_v_goon, __pyx_t_4); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_v_goon); __pyx_v_goon = __pyx_1; __pyx_1 = 0; - goto __pyx_L20; + goto __pyx_L22; } - __pyx_L20:; + __pyx_L22:; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":92 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":94 * goon *= False * * if not goon: # <<<<<<<<<<<<<< * break * */ - __pyx_t_28 = __Pyx_PyObject_IsTrue(__pyx_v_goon); if (unlikely(__pyx_t_28 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_27 = (!__pyx_t_28); - if (__pyx_t_27) { + __pyx_t_29 = __Pyx_PyObject_IsTrue(__pyx_v_goon); if (unlikely(__pyx_t_29 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_12 = (!__pyx_t_29); + if (__pyx_t_12) { - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":93 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":95 * * if not goon: * break # <<<<<<<<<<<<<< @@ -1584,13 +1612,13 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate * return w */ goto __pyx_L9_break; - goto __pyx_L21; + goto __pyx_L23; } - __pyx_L21:; + __pyx_L23:; } __pyx_L9_break:; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":95 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":97 * break * * return w # <<<<<<<<<<<<<< @@ -1615,7 +1643,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate __Pyx_SafeReleaseBuffer(&__pyx_bstruct_y); __Pyx_SafeReleaseBuffer(&__pyx_bstruct_X); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("scikits.learn.linreg.enet_cd_fast.enet_coordinate_descent"); + __Pyx_AddTraceback("enet_cd_fast.enet_coordinate_descent"); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; @@ -3189,7 +3217,7 @@ static INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_desc } static struct PyMethodDef __pyx_methods[] = { - {__Pyx_NAMESTR("enet_coordinate_descent"), (PyCFunction)__pyx_pf_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate_descent, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7scikits_5learn_6linreg_12enet_cd_fast_enet_coordinate_descent)}, + {__Pyx_NAMESTR("enet_coordinate_descent"), (PyCFunction)__pyx_pf_12enet_cd_fast_enet_coordinate_descent, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_12enet_cd_fast_enet_coordinate_descent)}, {0, 0, 0, 0} }; @@ -3313,7 +3341,7 @@ PyMODINIT_FUNC PyInit_enet_cd_fast(void) __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - if (__pyx_module_is_main_scikits__learn__linreg__enet_cd_fast) { + if (__pyx_module_is_main_enet_cd_fast) { if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_kp___main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; } /*--- Builtin init code ---*/ @@ -3328,7 +3356,7 @@ PyMODINIT_FUNC PyInit_enet_cd_fast(void) /*--- Function import code ---*/ /*--- Execution code ---*/ - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":7 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":7 * * cimport numpy as np * import numpy as np # <<<<<<<<<<<<<< @@ -3340,7 +3368,7 @@ PyMODINIT_FUNC PyInit_enet_cd_fast(void) if (PyObject_SetAttr(__pyx_m, __pyx_kp_np, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_1); __pyx_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/enet_cd_fast.pyx":8 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/enet_cd_fast.pyx":8 * cimport numpy as np * import numpy as np * import scipy.linalg as linalg # <<<<<<<<<<<<<< @@ -3368,7 +3396,7 @@ PyMODINIT_FUNC PyInit_enet_cd_fast(void) __pyx_L1_error:; __Pyx_XDECREF(__pyx_1); __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("scikits.learn.linreg.enet_cd_fast"); + __Pyx_AddTraceback("enet_cd_fast"); Py_DECREF(__pyx_m); __pyx_m = 0; __pyx_L0:; __Pyx_FinishRefcountContext(); diff --git a/scikits/learn/glm/src/enet_cd_fast.pyx b/scikits/learn/glm/src/enet_cd_fast.pyx index 673753d443bdce1af69b1339908217ac1e0d762c..b7dd3f5439bd288030546ad5270137f7ac390e8b 100644 --- a/scikits/learn/glm/src/enet_cd_fast.pyx +++ b/scikits/learn/glm/src/enet_cd_fast.pyx @@ -67,10 +67,11 @@ def enet_coordinate_descent(model, for ii in xrange(nfeatures): # Loop over coordinates w_ii = w[ii] # Store previous value - # R += w_ii * X[:,ii] - for jj in range(nsamples): - R[jj] += w_ii * X[jj,ii] - R[nsamples+ii] += w_ii * sqrt(beta) + if w_ii != 0.0: + # R += w_ii * X[:,ii] + for jj in range(nsamples): + R[jj] += w_ii * X[jj,ii] + R[nsamples+ii] += w_ii * sqrt(beta) # tmp = (X[:,ii]*R).sum() tmp = 0.0 @@ -80,10 +81,11 @@ def enet_coordinate_descent(model, w[ii] = fsign(tmp) * fmax(fabs(tmp) - alpha, 0) \ / (norm_cols_X[ii] + beta) - # R -= w[ii] * X[:,ii] # Update residual - for jj in range(nsamples): - R[jj] -= w[ii] * X[jj,ii] # Update residual - R[nsamples+ii] -= w[ii] * sqrt(beta) + if w[ii] != 0.0: + # R -= w[ii] * X[:,ii] # Update residual + for jj in range(nsamples): + R[jj] -= w[ii] * X[jj,ii] # Update residual + R[nsamples+ii] -= w[ii] * sqrt(beta) for callback in callbacks: if not callback(n_iter, X=X, y=y, w=w, alpha=alpha, beta=beta, R=R): diff --git a/scikits/learn/glm/src/lasso_cd_fast.c b/scikits/learn/glm/src/lasso_cd_fast.c index 380df926c835e562e6af976b06f15ccd324dde6b..680eea1365a6666d7286c35e6ee5c56811053f77 100644 --- a/scikits/learn/glm/src/lasso_cd_fast.c +++ b/scikits/learn/glm/src/lasso_cd_fast.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.11.2 on Mon Mar 15 12:03:21 2010 */ +/* Generated by Cython 0.11.2 on Wed Mar 17 11:28:40 2010 */ #define PY_SSIZE_T_CLEAN #include "Python.h" @@ -131,7 +131,7 @@ #define __PYX_EXTERN_C extern #endif #include <math.h> -#define __PYX_HAVE_API__scikits__learn__linreg__lasso_cd_fast +#define __PYX_HAVE_API__lasso_cd_fast #include "stdlib.h" #include "numpy/arrayobject.h" #include "math.h" @@ -693,7 +693,7 @@ typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t; typedef npy_cdouble __pyx_t_5numpy_complex_t; -typedef __pyx_t_5numpy_float64_t __pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE; +typedef __pyx_t_5numpy_float64_t __pyx_t_13lasso_cd_fast_DOUBLE; /* Module declarations from python_buffer */ /* Module declarations from stdlib */ @@ -707,14 +707,14 @@ static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0; static INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/ /* Module declarations from cython */ -/* Module declarations from scikits.learn.linreg.lasso_cd_fast */ +/* Module declarations from lasso_cd_fast */ -static INLINE double __pyx_f_7scikits_5learn_6linreg_13lasso_cd_fast_fsign(double); /*proto*/ -static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE = { "scikits.learn.linreg.lasso_cd_fast.DOUBLE", NULL, sizeof(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE), 'R' }; -#define __Pyx_MODULE_NAME "scikits.learn.linreg.lasso_cd_fast" -int __pyx_module_is_main_scikits__learn__linreg__lasso_cd_fast = 0; +static INLINE double __pyx_f_13lasso_cd_fast_fsign(double); /*proto*/ +static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_13lasso_cd_fast_DOUBLE = { "lasso_cd_fast.DOUBLE", NULL, sizeof(__pyx_t_13lasso_cd_fast_DOUBLE), 'R' }; +#define __Pyx_MODULE_NAME "lasso_cd_fast" +int __pyx_module_is_main_lasso_cd_fast = 0; -/* Implementation of scikits.learn.linreg.lasso_cd_fast */ +/* Implementation of lasso_cd_fast */ static PyObject *__pyx_int_2; static PyObject *__pyx_int_0; static char __pyx_k___main__[] = "__main__"; @@ -813,7 +813,7 @@ static char __pyx_k_28[] = "Non-native byte order not supported"; static char __pyx_k_29[] = "Format string allocated too short."; static char __pyx_k_30[] = "unknown dtype code in numpy.pxd (%d)"; -/* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":18 +/* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":18 * double rand() * * cdef inline double fsign(double f): # <<<<<<<<<<<<<< @@ -821,12 +821,12 @@ static char __pyx_k_30[] = "unknown dtype code in numpy.pxd (%d)"; * return 0 */ -static INLINE double __pyx_f_7scikits_5learn_6linreg_13lasso_cd_fast_fsign(double __pyx_v_f) { +static INLINE double __pyx_f_13lasso_cd_fast_fsign(double __pyx_v_f) { double __pyx_r; int __pyx_t_1; __Pyx_SetupRefcountContext("fsign"); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":19 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":19 * * cdef inline double fsign(double f): * if f == 0: # <<<<<<<<<<<<<< @@ -836,7 +836,7 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_13lasso_cd_fast_fsign(doubl __pyx_t_1 = (__pyx_v_f == 0); if (__pyx_t_1) { - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":20 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":20 * cdef inline double fsign(double f): * if f == 0: * return 0 # <<<<<<<<<<<<<< @@ -848,7 +848,7 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_13lasso_cd_fast_fsign(doubl goto __pyx_L3; } - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":21 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":21 * if f == 0: * return 0 * elif f > 0: # <<<<<<<<<<<<<< @@ -858,7 +858,7 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_13lasso_cd_fast_fsign(doubl __pyx_t_1 = (__pyx_v_f > 0); if (__pyx_t_1) { - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":22 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":22 * return 0 * elif f > 0: * return 1.0 # <<<<<<<<<<<<<< @@ -871,7 +871,7 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_13lasso_cd_fast_fsign(doubl } /*else*/ { - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":24 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":24 * return 1.0 * else: * return -1.0 # <<<<<<<<<<<<<< @@ -889,7 +889,7 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_13lasso_cd_fast_fsign(doubl return __pyx_r; } -/* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":30 +/* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":30 * @cython.boundscheck(False) * @cython.wraparound(False) * def lasso_coordinate_descent(model, # <<<<<<<<<<<<<< @@ -897,9 +897,9 @@ static INLINE double __pyx_f_7scikits_5learn_6linreg_13lasso_cd_fast_fsign(doubl * np.ndarray[DOUBLE, ndim=1] y, */ -static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordinate_descent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordinate_descent[] = "Cython version of the coordinate descent algorithm\n for Lasso regression\n "; -static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordinate_descent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { +static PyObject *__pyx_pf_13lasso_cd_fast_lasso_coordinate_descent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_13lasso_cd_fast_lasso_coordinate_descent[] = "Cython version of the coordinate descent algorithm\n for Lasso regression\n "; +static PyObject *__pyx_pf_13lasso_cd_fast_lasso_coordinate_descent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_model = 0; PyArrayObject *__pyx_v_X = 0; PyArrayObject *__pyx_v_y = 0; @@ -949,7 +949,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina unsigned int __pyx_t_9; unsigned int __pyx_t_10; unsigned int __pyx_t_11; - unsigned int __pyx_t_12; + int __pyx_t_12; unsigned int __pyx_t_13; unsigned int __pyx_t_14; unsigned int __pyx_t_15; @@ -962,8 +962,9 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina unsigned int __pyx_t_22; unsigned int __pyx_t_23; unsigned int __pyx_t_24; - int __pyx_t_25; - int __pyx_t_26; + unsigned int __pyx_t_25; + unsigned int __pyx_t_26; + int __pyx_t_27; static PyObject **__pyx_pyargnames[] = {&__pyx_kp_model,&__pyx_kp_X,&__pyx_kp_y,&__pyx_kp_maxit,0}; __Pyx_SetupRefcountContext("lasso_coordinate_descent"); __pyx_self = __pyx_self; @@ -1021,7 +1022,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_L5_argtuple_error:; __Pyx_RaiseArgtupleInvalid("lasso_coordinate_descent", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L3_error;} __pyx_L3_error:; - __Pyx_AddTraceback("scikits.learn.linreg.lasso_cd_fast.lasso_coordinate_descent"); + __Pyx_AddTraceback("lasso_cd_fast.lasso_coordinate_descent"); return NULL; __pyx_L4_argument_unpacking_done:; __pyx_v_callbacks = Py_None; __Pyx_INCREF(Py_None); @@ -1036,18 +1037,18 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;} { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_X, (PyObject*)__pyx_v_X, &__Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_X, (PyObject*)__pyx_v_X, &__Pyx_TypeInfo_nn___pyx_t_13lasso_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_bstride_0_X = __pyx_bstruct_X.strides[0]; __pyx_bstride_1_X = __pyx_bstruct_X.strides[1]; __pyx_bshape_0_X = __pyx_bstruct_X.shape[0]; __pyx_bshape_1_X = __pyx_bstruct_X.shape[1]; { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_y, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_y, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_nn___pyx_t_13lasso_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } __pyx_bstride_0_y = __pyx_bstruct_y.strides[0]; __pyx_bshape_0_y = __pyx_bstruct_y.shape[0]; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":39 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":39 * * # get the data information into easy vars * cdef float alpha = model.alpha # <<<<<<<<<<<<<< @@ -1060,7 +1061,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_alpha = __pyx_t_2; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":40 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":40 * # get the data information into easy vars * cdef float alpha = model.alpha * cdef np.ndarray[DOUBLE, ndim=1] w = model.w # <<<<<<<<<<<<<< @@ -1073,7 +1074,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_t_3 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_w, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_w, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_nn___pyx_t_13lasso_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_w = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_w.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_bstride_0_w = __pyx_bstruct_w.strides[0]; @@ -1084,7 +1085,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_v_w = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":41 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":41 * cdef float alpha = model.alpha * cdef np.ndarray[DOUBLE, ndim=1] w = model.w * callbacks = model.callbacks # <<<<<<<<<<<<<< @@ -1097,7 +1098,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_v_callbacks = __pyx_t_1; __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":43 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":43 * callbacks = model.callbacks * * cdef unsigned int nsamples = X.shape[0] # <<<<<<<<<<<<<< @@ -1106,7 +1107,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina */ __pyx_v_nsamples = (__pyx_v_X->dimensions[0]); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":44 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":44 * * cdef unsigned int nsamples = X.shape[0] * cdef unsigned int nfeatures = X.shape[1] # <<<<<<<<<<<<<< @@ -1115,7 +1116,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina */ __pyx_v_nfeatures = (__pyx_v_X->dimensions[1]); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":45 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":45 * cdef unsigned int nsamples = X.shape[0] * cdef unsigned int nfeatures = X.shape[1] * cdef unsigned int nclasses = w.shape[1] # <<<<<<<<<<<<<< @@ -1124,7 +1125,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina */ __pyx_v_nclasses = (__pyx_v_w->dimensions[1]); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":47 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":47 * cdef unsigned int nclasses = w.shape[1] * * cdef np.ndarray[DOUBLE, ndim=1] norm_cols_X = (X**2).sum(axis=0) # Compute norms of the columns of X # <<<<<<<<<<<<<< @@ -1147,7 +1148,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_t_5 = ((PyArrayObject *)__pyx_t_1); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_norm_cols_X, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_norm_cols_X, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_13lasso_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) { __pyx_v_norm_cols_X = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_norm_cols_X.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_bstride_0_norm_cols_X = __pyx_bstruct_norm_cols_X.strides[0]; @@ -1158,7 +1159,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_v_norm_cols_X = ((PyArrayObject *)__pyx_t_1); __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":48 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":48 * * cdef np.ndarray[DOUBLE, ndim=1] norm_cols_X = (X**2).sum(axis=0) # Compute norms of the columns of X * cdef np.ndarray[DOUBLE, ndim=1] R = y - np.dot(X, w) # Init residual # <<<<<<<<<<<<<< @@ -1189,7 +1190,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_t_7 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_R, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_bstruct_R, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_nn___pyx_t_13lasso_cd_fast_DOUBLE, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_R = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_bstruct_R.buf = NULL; {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;} } else {__pyx_bstride_0_R = __pyx_bstruct_R.strides[0]; @@ -1200,7 +1201,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_v_R = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":56 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":56 * cdef unsigned int n_iter * * for callback in callbacks: # <<<<<<<<<<<<<< @@ -1232,7 +1233,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_v_callback = __pyx_t_6; __pyx_t_6 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":57 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":57 * * for callback in callbacks: * callback(0) # Init callback # <<<<<<<<<<<<<< @@ -1251,7 +1252,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":59 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":59 * callback(0) # Init callback * * goon = True # <<<<<<<<<<<<<< @@ -1264,7 +1265,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_v_goon = __pyx_t_4; __pyx_t_4 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":60 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":60 * * goon = True * for n_iter in range(maxit): # <<<<<<<<<<<<<< @@ -1274,7 +1275,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_v_maxit; __pyx_t_9+=1) { __pyx_v_n_iter = __pyx_t_9; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":61 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":61 * goon = True * for n_iter in range(maxit): * for ii in xrange(nfeatures): # Loop over coordinates # <<<<<<<<<<<<<< @@ -1284,40 +1285,53 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_v_nfeatures; __pyx_t_10+=1) { __pyx_v_ii = __pyx_t_10; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":62 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":62 * for n_iter in range(maxit): * for ii in xrange(nfeatures): # Loop over coordinates * w_ii = w[ii] # Store previous value # <<<<<<<<<<<<<< * - * # R += w_ii * X[:,ii] + * if w_ii != 0.0: */ __pyx_t_11 = __pyx_v_ii; - __pyx_v_w_ii = (*__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_11, __pyx_bstride_0_w)); + __pyx_v_w_ii = (*__Pyx_BufPtrStrided1d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_11, __pyx_bstride_0_w)); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":65 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":64 + * w_ii = w[ii] # Store previous value * - * # R += w_ii * X[:,ii] - * for jj in range(nsamples): # <<<<<<<<<<<<<< - * R[jj] += w_ii * X[jj, ii] + * if w_ii != 0.0: # <<<<<<<<<<<<<< + * # R += w_ii * X[:,ii] + * for jj in range(nsamples): + */ + __pyx_t_12 = (__pyx_v_w_ii != 0.0); + if (__pyx_t_12) { + + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":66 + * if w_ii != 0.0: + * # R += w_ii * X[:,ii] + * for jj in range(nsamples): # <<<<<<<<<<<<<< + * R[jj] += w_ii * X[jj, ii] * */ - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_v_nsamples; __pyx_t_12+=1) { - __pyx_v_jj = __pyx_t_12; + for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_v_nsamples; __pyx_t_13+=1) { + __pyx_v_jj = __pyx_t_13; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":66 - * # R += w_ii * X[:,ii] - * for jj in range(nsamples): - * R[jj] += w_ii * X[jj, ii] # <<<<<<<<<<<<<< + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":67 + * # R += w_ii * X[:,ii] + * for jj in range(nsamples): + * R[jj] += w_ii * X[jj, ii] # <<<<<<<<<<<<<< * * # tmp = (X[:,ii]*R).sum() */ - __pyx_t_13 = __pyx_v_jj; - __pyx_t_14 = __pyx_v_ii; - __pyx_t_15 = __pyx_v_jj; - *__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_15, __pyx_bstride_0_R) += (__pyx_v_w_ii * (*__Pyx_BufPtrStrided2d(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_13, __pyx_bstride_0_X, __pyx_t_14, __pyx_bstride_1_X))); + __pyx_t_14 = __pyx_v_jj; + __pyx_t_15 = __pyx_v_ii; + __pyx_t_16 = __pyx_v_jj; + *__Pyx_BufPtrStrided1d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_16, __pyx_bstride_0_R) += (__pyx_v_w_ii * (*__Pyx_BufPtrStrided2d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_14, __pyx_bstride_0_X, __pyx_t_15, __pyx_bstride_1_X))); + } + goto __pyx_L12; } + __pyx_L12:; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":69 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":70 * * # tmp = (X[:,ii]*R).sum() * tmp = 0.0 # <<<<<<<<<<<<<< @@ -1326,67 +1340,81 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina */ __pyx_v_tmp = 0.0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":70 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":71 * # tmp = (X[:,ii]*R).sum() * tmp = 0.0 * for jj in range(nsamples): # <<<<<<<<<<<<<< * tmp += R[jj] * X[jj, ii] * */ - for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_v_nsamples; __pyx_t_12+=1) { - __pyx_v_jj = __pyx_t_12; + for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_v_nsamples; __pyx_t_13+=1) { + __pyx_v_jj = __pyx_t_13; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":71 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":72 * tmp = 0.0 * for jj in range(nsamples): * tmp += R[jj] * X[jj, ii] # <<<<<<<<<<<<<< * * w[ii] = fsign(tmp) * fmax(fabs(tmp) - alpha, 0) / norm_cols_X[ii] */ - __pyx_t_16 = __pyx_v_jj; __pyx_t_17 = __pyx_v_jj; - __pyx_t_18 = __pyx_v_ii; - __pyx_v_tmp += ((*__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_16, __pyx_bstride_0_R)) * (*__Pyx_BufPtrStrided2d(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_17, __pyx_bstride_0_X, __pyx_t_18, __pyx_bstride_1_X))); + __pyx_t_18 = __pyx_v_jj; + __pyx_t_19 = __pyx_v_ii; + __pyx_v_tmp += ((*__Pyx_BufPtrStrided1d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_17, __pyx_bstride_0_R)) * (*__Pyx_BufPtrStrided2d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_18, __pyx_bstride_0_X, __pyx_t_19, __pyx_bstride_1_X))); } - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":73 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":74 * tmp += R[jj] * X[jj, ii] * * w[ii] = fsign(tmp) * fmax(fabs(tmp) - alpha, 0) / norm_cols_X[ii] # <<<<<<<<<<<<<< * - * # R -= w[ii] * X[:,ii] # Update residual + * if w[ii] != 0.0: */ - __pyx_t_12 = __pyx_v_ii; - __pyx_t_19 = __pyx_v_ii; - *__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_19, __pyx_bstride_0_w) = ((__pyx_f_7scikits_5learn_6linreg_13lasso_cd_fast_fsign(__pyx_v_tmp) * fmax((fabs(__pyx_v_tmp) - __pyx_v_alpha), 0)) / (*__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_norm_cols_X.buf, __pyx_t_12, __pyx_bstride_0_norm_cols_X))); + __pyx_t_13 = __pyx_v_ii; + __pyx_t_20 = __pyx_v_ii; + *__Pyx_BufPtrStrided1d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_20, __pyx_bstride_0_w) = ((__pyx_f_13lasso_cd_fast_fsign(__pyx_v_tmp) * fmax((fabs(__pyx_v_tmp) - __pyx_v_alpha), 0)) / (*__Pyx_BufPtrStrided1d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_norm_cols_X.buf, __pyx_t_13, __pyx_bstride_0_norm_cols_X))); - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":76 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":76 + * w[ii] = fsign(tmp) * fmax(fabs(tmp) - alpha, 0) / norm_cols_X[ii] * - * # R -= w[ii] * X[:,ii] # Update residual - * for jj in range(nsamples): # <<<<<<<<<<<<<< - * R[jj] -= w[ii] * X[jj, ii] # Update residual + * if w[ii] != 0.0: # <<<<<<<<<<<<<< + * # R -= w[ii] * X[:,ii] # Update residual + * for jj in range(nsamples): + */ + __pyx_t_21 = __pyx_v_ii; + __pyx_t_12 = ((*__Pyx_BufPtrStrided1d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_21, __pyx_bstride_0_w)) != 0.0); + if (__pyx_t_12) { + + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":78 + * if w[ii] != 0.0: + * # R -= w[ii] * X[:,ii] # Update residual + * for jj in range(nsamples): # <<<<<<<<<<<<<< + * R[jj] -= w[ii] * X[jj, ii] # Update residual * */ - for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_v_nsamples; __pyx_t_20+=1) { - __pyx_v_jj = __pyx_t_20; + for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_v_nsamples; __pyx_t_22+=1) { + __pyx_v_jj = __pyx_t_22; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":77 - * # R -= w[ii] * X[:,ii] # Update residual - * for jj in range(nsamples): - * R[jj] -= w[ii] * X[jj, ii] # Update residual # <<<<<<<<<<<<<< + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":79 + * # R -= w[ii] * X[:,ii] # Update residual + * for jj in range(nsamples): + * R[jj] -= w[ii] * X[jj, ii] # Update residual # <<<<<<<<<<<<<< * * for callback in callbacks: */ - __pyx_t_21 = __pyx_v_ii; - __pyx_t_22 = __pyx_v_jj; - __pyx_t_23 = __pyx_v_ii; - __pyx_t_24 = __pyx_v_jj; - *__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_24, __pyx_bstride_0_R) -= ((*__Pyx_BufPtrStrided1d(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_21, __pyx_bstride_0_w)) * (*__Pyx_BufPtrStrided2d(__pyx_t_7scikits_5learn_6linreg_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_22, __pyx_bstride_0_X, __pyx_t_23, __pyx_bstride_1_X))); + __pyx_t_23 = __pyx_v_ii; + __pyx_t_24 = __pyx_v_jj; + __pyx_t_25 = __pyx_v_ii; + __pyx_t_26 = __pyx_v_jj; + *__Pyx_BufPtrStrided1d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_R.buf, __pyx_t_26, __pyx_bstride_0_R) -= ((*__Pyx_BufPtrStrided1d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_w.buf, __pyx_t_23, __pyx_bstride_0_w)) * (*__Pyx_BufPtrStrided2d(__pyx_t_13lasso_cd_fast_DOUBLE *, __pyx_bstruct_X.buf, __pyx_t_24, __pyx_bstride_0_X, __pyx_t_25, __pyx_bstride_1_X))); + } + goto __pyx_L17; } + __pyx_L17:; } - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":79 - * R[jj] -= w[ii] * X[jj, ii] # Update residual + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":81 + * R[jj] -= w[ii] * X[jj, ii] # Update residual * * for callback in callbacks: # <<<<<<<<<<<<<< * if not callback(n_iter, X=X, y=y, w=w, alpha=alpha, R=R): @@ -1395,7 +1423,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina if (PyList_CheckExact(__pyx_v_callbacks) || PyTuple_CheckExact(__pyx_v_callbacks)) { __pyx_t_8 = 0; __pyx_t_4 = __pyx_v_callbacks; __Pyx_INCREF(__pyx_t_4); } else { - __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_callbacks); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_8 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_callbacks); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_4); } for (;;) { @@ -1408,7 +1436,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina } else { __pyx_t_1 = PyIter_Next(__pyx_t_4); if (!__pyx_t_1) { - if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} break; } __Pyx_GOTREF(__pyx_t_1); @@ -1417,72 +1445,72 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __pyx_v_callback = __pyx_t_1; __pyx_t_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":80 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":82 * * for callback in callbacks: * if not callback(n_iter, X=X, y=y, w=w, alpha=alpha, R=R): # <<<<<<<<<<<<<< * goon *= False * */ - __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n_iter); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyLong_FromUnsignedLong(__pyx_v_n_iter); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_t_6)); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(((PyObject *)__pyx_1)); - if (PyDict_SetItem(__pyx_1, __pyx_kp_X, ((PyObject *)__pyx_v_X)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (PyDict_SetItem(__pyx_1, __pyx_kp_y, ((PyObject *)__pyx_v_y)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - if (PyDict_SetItem(__pyx_1, __pyx_kp_w, ((PyObject *)__pyx_v_w)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_1 = PyFloat_FromDouble(__pyx_v_alpha); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_X, ((PyObject *)__pyx_v_X)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_y, ((PyObject *)__pyx_v_y)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_w, ((PyObject *)__pyx_v_w)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyFloat_FromDouble(__pyx_v_alpha); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_1, __pyx_kp_alpha, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_alpha, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_1, __pyx_kp_R, ((PyObject *)__pyx_v_R)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_1 = PyEval_CallObjectWithKeywords(__pyx_v_callback, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + if (PyDict_SetItem(__pyx_1, __pyx_kp_R, ((PyObject *)__pyx_v_R)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = PyEval_CallObjectWithKeywords(__pyx_v_callback, ((PyObject *)__pyx_t_6), ((PyObject *)__pyx_1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0; __Pyx_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0; - __pyx_t_25 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_25 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_26 = (!__pyx_t_25); - if (__pyx_t_26) { + __pyx_t_27 = (!__pyx_t_12); + if (__pyx_t_27) { - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":81 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":83 * for callback in callbacks: * if not callback(n_iter, X=X, y=y, w=w, alpha=alpha, R=R): * goon *= False # <<<<<<<<<<<<<< * * if not goon: */ - __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_1 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_t_1); - __pyx_1 = PyNumber_InPlaceMultiply(__pyx_v_goon, __pyx_t_1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_1 = PyNumber_InPlaceMultiply(__pyx_v_goon, __pyx_t_1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_GOTREF(__pyx_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_v_goon); __pyx_v_goon = __pyx_1; __pyx_1 = 0; - goto __pyx_L20; + goto __pyx_L22; } - __pyx_L20:; + __pyx_L22:; } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":83 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":85 * goon *= False * * if not goon: # <<<<<<<<<<<<<< * break * */ - __pyx_t_26 = __Pyx_PyObject_IsTrue(__pyx_v_goon); if (unlikely(__pyx_t_26 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;} - __pyx_t_25 = (!__pyx_t_26); - if (__pyx_t_25) { + __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_v_goon); if (unlikely(__pyx_t_27 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;} + __pyx_t_12 = (!__pyx_t_27); + if (__pyx_t_12) { - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":84 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":86 * * if not goon: * break # <<<<<<<<<<<<<< @@ -1490,13 +1518,13 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina * return w */ goto __pyx_L9_break; - goto __pyx_L21; + goto __pyx_L23; } - __pyx_L21:; + __pyx_L23:; } __pyx_L9_break:; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":86 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":88 * break * * return w # <<<<<<<<<<<<<< @@ -1521,7 +1549,7 @@ static PyObject *__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordina __Pyx_SafeReleaseBuffer(&__pyx_bstruct_y); __Pyx_SafeReleaseBuffer(&__pyx_bstruct_X); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("scikits.learn.linreg.lasso_cd_fast.lasso_coordinate_descent"); + __Pyx_AddTraceback("lasso_cd_fast.lasso_coordinate_descent"); __pyx_r = NULL; goto __pyx_L2; __pyx_L0:; @@ -3095,7 +3123,7 @@ static INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_desc } static struct PyMethodDef __pyx_methods[] = { - {__Pyx_NAMESTR("lasso_coordinate_descent"), (PyCFunction)__pyx_pf_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordinate_descent, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_7scikits_5learn_6linreg_13lasso_cd_fast_lasso_coordinate_descent)}, + {__Pyx_NAMESTR("lasso_coordinate_descent"), (PyCFunction)__pyx_pf_13lasso_cd_fast_lasso_coordinate_descent, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_13lasso_cd_fast_lasso_coordinate_descent)}, {0, 0, 0, 0} }; @@ -3217,7 +3245,7 @@ PyMODINIT_FUNC PyInit_lasso_cd_fast(void) __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; - if (__pyx_module_is_main_scikits__learn__linreg__lasso_cd_fast) { + if (__pyx_module_is_main_lasso_cd_fast) { if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_kp___main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}; } /*--- Builtin init code ---*/ @@ -3232,7 +3260,7 @@ PyMODINIT_FUNC PyInit_lasso_cd_fast(void) /*--- Function import code ---*/ /*--- Execution code ---*/ - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":7 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":7 * * cimport numpy as np * import numpy as np # <<<<<<<<<<<<<< @@ -3244,7 +3272,7 @@ PyMODINIT_FUNC PyInit_lasso_cd_fast(void) if (PyObject_SetAttr(__pyx_m, __pyx_kp_np, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;} __Pyx_DECREF(__pyx_1); __pyx_1 = 0; - /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/linreg/lasso_cd_fast.pyx":8 + /* "/Users/alex/work/src/scikit-learn/trunk/scikits/learn/glm/src/lasso_cd_fast.pyx":8 * cimport numpy as np * import numpy as np * import scipy.linalg as linalg # <<<<<<<<<<<<<< @@ -3272,7 +3300,7 @@ PyMODINIT_FUNC PyInit_lasso_cd_fast(void) __pyx_L1_error:; __Pyx_XDECREF(__pyx_1); __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("scikits.learn.linreg.lasso_cd_fast"); + __Pyx_AddTraceback("lasso_cd_fast"); Py_DECREF(__pyx_m); __pyx_m = 0; __pyx_L0:; __Pyx_FinishRefcountContext(); diff --git a/scikits/learn/glm/src/lasso_cd_fast.pyx b/scikits/learn/glm/src/lasso_cd_fast.pyx index 45b31eea0a17edc607fb3c6bc59609c465d3233d..30cf99636cf6dd63988ea9742f43495ed73278af 100644 --- a/scikits/learn/glm/src/lasso_cd_fast.pyx +++ b/scikits/learn/glm/src/lasso_cd_fast.pyx @@ -61,9 +61,10 @@ def lasso_coordinate_descent(model, for ii in xrange(nfeatures): # Loop over coordinates w_ii = w[ii] # Store previous value - # R += w_ii * X[:,ii] - for jj in range(nsamples): - R[jj] += w_ii * X[jj, ii] + if w_ii != 0.0: + # R += w_ii * X[:,ii] + for jj in range(nsamples): + R[jj] += w_ii * X[jj, ii] # tmp = (X[:,ii]*R).sum() tmp = 0.0 @@ -72,9 +73,10 @@ def lasso_coordinate_descent(model, w[ii] = fsign(tmp) * fmax(fabs(tmp) - alpha, 0) / norm_cols_X[ii] - # R -= w[ii] * X[:,ii] # Update residual - for jj in range(nsamples): - R[jj] -= w[ii] * X[jj, ii] # Update residual + if w[ii] != 0.0: + # R -= w[ii] * X[:,ii] # Update residual + for jj in range(nsamples): + R[jj] -= w[ii] * X[jj, ii] # Update residual for callback in callbacks: if not callback(n_iter, X=X, y=y, w=w, alpha=alpha, R=R):