def test_max_iter(gbsg2): x, y = gbsg2 x = scale(x) m = MinlipSurvivalAnalysis(solver="cvxopt", alpha=1, kernel="polynomial", degree=2, pairs="next", max_iter=5) with pytest.warns(ConvergenceWarning, match=r"cvxopt solver did not converge: unknown \(duality gap = [.0-9]+\)"): m.fit(x, y)
def test_breast_cancer_cvxpy(gbsg2): x, y = gbsg2 m = MinlipSurvivalAnalysis(solver="cvxpy", alpha=1, pairs="next") m.fit(x, y) assert (1, x.shape[0]) == m.coef_.shape p = m.predict(x) assert_cindex_almost_equal(y['cens'], y['time'], p, (0.59576770470121443, 79280, 53792, 0, 32))
def test_breast_cancer_osqp(gbsg2): x, y = gbsg2 x = scale(x) m = MinlipSurvivalAnalysis(solver="osqp", alpha=1, pairs="next") m.fit(x, y) assert (1, x.shape[0]) == m.coef_.shape p = m.predict(x) assert_cindex_almost_equal(y['cens'], y['time'], p, (0.599066670674522, 79719, 53353, 0, 42))
def test_breast_cancer_ecos(gbsg2): x, y = gbsg2 x = scale(x) m = MinlipSurvivalAnalysis(solver="ecos", alpha=1, pairs="next") m.fit(x, y) assert (1, x.shape[0]) == m.coef_.shape p = m.predict(x) assert_cindex_almost_equal(y['cens'], y['time'], p, (0.5990741854033906, 79720, 53352, 0, 42))
def test_breast_cancer_cvxpy(self): m = MinlipSurvivalAnalysis(solver="cvxpy", alpha=1, pairs="next") m.fit(self.x.values, self.y) self.assertTupleEqual((1, self.x.shape[0]), m.coef_.shape) p = m.predict(self.x.values) v = concordance_index_censored(self.y['cens'], self.y['time'], p) expected = numpy.array([0.59576770470121443, 79280, 53792, 0, 32]) assert_array_almost_equal(expected, v)
def test_breast_cancer_rbf_cvxpy(gbsg2): x, y = gbsg2 x = scale(x) m = MinlipSurvivalAnalysis(solver="cvxpy", alpha=1, kernel="rbf", gamma=1./8, pairs="next", max_iter=1000) m.fit(x, y) assert (1, x.shape[0]) == m.coef_.shape p = m.predict(x) assert_cindex_almost_equal(y['cens'], y['time'], p, (0.6105867500300589, 81252, 51820, 0, 42))
def test_max_iter(self): x = scale(self.x.values) m = MinlipSurvivalAnalysis(solver="cvxopt", alpha=1, kernel="polynomial", degree=2, pairs="next", max_iter=5) with warnings.catch_warnings(record=True) as w: # Cause all warnings to always be triggered. warnings.simplefilter("always") m.fit(x, self.y) self.assertEqual(len(w), 1) self.assertTrue(issubclass(w[0].category, ConvergenceWarning)) self.assertRegex(str(w[0].message), r"cvxopt solver did not converge: unknown \(duality gap = [.0-9]+\)")
def test_max_iter(gbsg2): x, y = gbsg2 x = scale(x) m = MinlipSurvivalAnalysis(solver="osqp", alpha=1, kernel="polynomial", degree=2, pairs="next", max_iter=5) with pytest.warns( ConvergenceWarning, match= r"OSQP solver did not converge: maximum iterations reached"): m.fit(x, y)
def test_breast_cancer_rbf_osqp(gbsg2): x, y = gbsg2 x = scale(x) m = MinlipSurvivalAnalysis(solver="osqp", alpha=1, kernel="rbf", gamma=1. / 8, pairs="next", max_iter=1000) m.fit(x, y) assert (1, x.shape[0]) == m.coef_.shape p = m.predict(x) assert_cindex_almost_equal(y['cens'], y['time'], p, (0.6106168089455333, 81256, 51816, 0, 42))
def test_breast_cancer_rbf_cvxpy(self): x = scale(self.x.values) m = MinlipSurvivalAnalysis(solver="cvxpy", alpha=1, kernel="rbf", gamma=32, pairs="next", max_iter=1000) m.fit(x, self.y) self.assertTupleEqual((1, self.x.shape[0]), m.coef_.shape) p = m.predict(x) v = concordance_index_censored(self.y['cens'], self.y['time'], p) self.assertGreaterEqual(v[0], 0.6402849585186966) self.assertGreaterEqual(v[1], 85203) self.assertLessEqual(v[2], 47869) self.assertEqual(0, v[3]) self.assertEqual(32, v[4])
def test_kernel_precomputed(gbsg2): x, y = gbsg2 from sklearn.metrics.pairwise import pairwise_kernels from sklearn.utils.metaestimators import _safe_split m = MinlipSurvivalAnalysis(kernel="precomputed", solver="ecos") K = pairwise_kernels(x, metric="rbf", gamma=1. / 32) train_idx = numpy.arange(50, x.shape[0]) test_idx = numpy.arange(50) X_fit, y_fit = _safe_split(m, K, y, train_idx) X_test, y_test = _safe_split(m, K, y, test_idx, train_idx) m.fit(X_fit, y_fit) p = m.predict(X_test) assert_cindex_almost_equal(y_test['cens'], y_test['time'], p, (0.626514131897712, 457, 269, 17, 0))
def test_kernel_precomputed(self): from sklearn.metrics.pairwise import pairwise_kernels from sklearn.utils.metaestimators import _safe_split m = MinlipSurvivalAnalysis(kernel="precomputed", solver="cvxpy") K = pairwise_kernels(self.x, metric="rbf") train_idx = numpy.arange(50, self.x.shape[0]) test_idx = numpy.arange(50) X_fit, y_fit = _safe_split(m, K, self.y, train_idx) X_test, y_test = _safe_split(m, K, self.y, test_idx, train_idx) m.fit(X_fit, y_fit) p = m.predict(X_test) v = concordance_index_censored(y_test['cens'], y_test['time'], p) expected = numpy.array([0.508748, 378, 365, 0, 0]) assert_array_almost_equal(expected, v)
def test_kernel_precomputed(gbsg2): x, y = gbsg2 from sklearn.metrics.pairwise import pairwise_kernels from sklearn.utils.metaestimators import _safe_split m = MinlipSurvivalAnalysis(kernel="precomputed", solver="osqp", max_iter=25000) xt = scale(x) K = pairwise_kernels(xt, metric="rbf", gamma=0.1) train_idx = numpy.arange(200, x.shape[0]) test_idx = numpy.arange(200) X_fit, y_fit = _safe_split(m, K, y, train_idx) X_test, y_test = _safe_split(m, K, y, test_idx, train_idx) m.fit(X_fit, y_fit) p = m.predict(X_test) assert_cindex_almost_equal(y_test['cens'], y_test['time'], p, (0.6518928901200369, 8472, 4524, 0, 3))
def test_unknown_solver(gbsg2): x, y = gbsg2 m = MinlipSurvivalAnalysis(solver=None) with pytest.raises(ValueError, match="unknown solver: None"): m.fit(x, y) m.set_params(solver="i don't know") with pytest.raises(ValueError, match="unknown solver: i don't know"): m.fit(x, y) m.set_params(solver=[('why', 'are'), ('you', 'doing this')]) with pytest.raises(ValueError, match=r"unknown solver: \[\('why', 'are'\), \('you', 'doing this'\)\]"): m.fit(x, y)