def score(self, features=None, times=None, censoring=None): """Returns the negative log-likelihood of the model, using the current fitted coefficients on the passed data. If no data is passed, the negative log-likelihood is computed using the data used for training. Parameters ---------- features : `None` or `numpy.ndarray`, shape=(n_samples, n_features) The features matrix times : `None` or `numpy.array`, shape = (n_samples,) Observed times censoring : `None` or `numpy.array`, shape = (n_samples,) Indicator of censoring of each sample. ``True`` means true failure, namely non-censored time. dtype must be unsigned short Returns ------- output : `float` The value of the negative log-likelihood """ if self._fitted: all_none = all(e is None for e in [features, times, censoring]) if all_none: return self._model_obj.loss(self.coeffs) else: if features is None: raise ValueError('Passed ``features`` is None') elif times is None: raise ValueError('Passed ``times`` is None') elif censoring is None: raise ValueError('Passed ``censoring`` is None') else: features, times, censoring = self._all_safe( features, times, censoring) model = ModelCoxRegPartialLik().fit( features, times, censoring) return model.loss(self.coeffs) else: raise RuntimeError('You must fit the model first')
def test_set_model(self): """...Test set_model of saga, should only accept childs of ModelGeneralizedLinear""" # We try to pass a ModelCoxRegPartialLik which is not a generalized # linear model to SAGA to check that the error is raised msg = '^SAGA accepts only childs of `ModelGeneralizedLinear`$' with self.assertRaisesRegex(ValueError, msg): w = weights_sparse_gauss(n_weights=2, nnz=0) X, T, C = SimuCoxReg(w).simulate() model = ModelCoxRegPartialLik().fit(X, T, C) SAGA().set_model(model) msg = '^SAGA accepts only childs of `ModelGeneralizedLinear`$' with self.assertRaisesRegex(RuntimeError, msg): w = weights_sparse_gauss(n_weights=2, nnz=0) X, T, C = SimuCoxReg(w).simulate() model = ModelCoxRegPartialLik().fit(X, T, C) saga = SAGA() saga._solver.set_model(model._model)
def test_ModelCoxRegPartialLik(self): """...Numerical consistency check of loss and gradient for Cox Regression """ np.random.seed(123) n_samples, n_features = 100, 5 w0 = np.random.randn(n_features) features, times, censoring = SimuCoxReg(w0, n_samples=n_samples, verbose=False, seed=1234).simulate() model = ModelCoxRegPartialLik() model.fit(features, times, censoring) model_spars = ModelCoxRegPartialLik() model_spars.fit(csr_matrix(features), times, censoring) self.run_test_for_glm(model, model_spars, 1e-5, 1e-4)
def _construct_model_obj(self): return ModelCoxRegPartialLik()