From e8240d8e730a005f133f41ea93bc2b397ad31876 Mon Sep 17 00:00:00 2001 From: picciama Date: Sun, 12 Jan 2020 18:48:59 +0100 Subject: [PATCH 1/2] bugfix: size_factors_init two times expand dims --- batchglm/train/tf1/glm_beta/estimator.py | 9 +++------ batchglm/train/tf1/glm_nb/estimator.py | 14 +++----------- batchglm/train/tf1/glm_norm/estimator.py | 13 ++----------- 3 files changed, 8 insertions(+), 28 deletions(-) diff --git a/batchglm/train/tf1/glm_beta/estimator.py b/batchglm/train/tf1/glm_beta/estimator.py index 7235e7bd..6cd96878 100644 --- a/batchglm/train/tf1/glm_beta/estimator.py +++ b/batchglm/train/tf1/glm_beta/estimator.py @@ -169,8 +169,6 @@ def init_par( $$ """ - size_factors_init = input_data.size_factors - if init_model is None: groupwise_means = None init_a_str = None @@ -185,7 +183,7 @@ def init_par( x=input_data.x, design_loc=input_data.design_loc, constraints_loc=input_data.constraints_loc, - size_factors=size_factors_init, + size_factors=input_data.size_factors, link_fn=lambda mean: np.log( 1/(1/self.np_clip_param(mean, "mean")-1) ) @@ -221,7 +219,7 @@ def init_par( x=input_data.x, design_scale=input_data.design_scale[:, [0]], constraints=input_data.constraints_scale[[0], :][:, [0]], - size_factors=size_factors_init, + size_factors=input_data.size_factors, groupwise_means=None, link_fn=lambda samplesize: np.log(self.np_clip_param(samplesize, "samplesize")) ) @@ -248,7 +246,7 @@ def init_par( x=input_data.x, design_scale=input_data.design_scale, constraints=input_data.constraints_scale, - size_factors=size_factors_init, + size_factors=input_data.size_factors, groupwise_means=groupwise_means, link_fn=lambda samplesize: np.log(self.np_clip_param(samplesize, "samplesize")) ) @@ -291,4 +289,3 @@ def init_par( logging.getLogger("batchglm").debug("Using initialization based on input model for dispersion") return init_a, init_b - diff --git a/batchglm/train/tf1/glm_nb/estimator.py b/batchglm/train/tf1/glm_nb/estimator.py index c7ad9afb..61d9d713 100644 --- a/batchglm/train/tf1/glm_nb/estimator.py +++ b/batchglm/train/tf1/glm_nb/estimator.py @@ -176,14 +176,6 @@ def init_par( $$ """ - size_factors_init = input_data.size_factors - if size_factors_init is not None: - size_factors_init = np.expand_dims(size_factors_init, axis=1) - size_factors_init = np.broadcast_to( - array=size_factors_init, - shape=[input_data.num_observations, input_data.num_features] - ) - if init_model is None: groupwise_means = None init_a_str = None @@ -198,7 +190,7 @@ def init_par( x=input_data.x, design_loc=input_data.design_loc, constraints_loc=input_data.constraints_loc, - size_factors=size_factors_init, + size_factors=input_data.size_factors, link_fn=lambda mu: np.log(self.np_clip_param(mu, "mu")) ) @@ -239,7 +231,7 @@ def init_par( x=input_data.x, design_scale=input_data.design_scale[:, [0]], constraints=input_data.constraints_scale[[0], :][:, [0]], - size_factors=size_factors_init, + size_factors=input_data.size_factors, groupwise_means=None, link_fn=lambda r: np.log(self.np_clip_param(r, "r")) ) @@ -267,7 +259,7 @@ def init_par( x=input_data.x, design_scale=input_data.design_scale, constraints=input_data.constraints_scale, - size_factors=size_factors_init, + size_factors=input_data.size_factors, groupwise_means=groupwise_means, link_fn=lambda r: np.log(self.np_clip_param(r, "r")) ) diff --git a/batchglm/train/tf1/glm_norm/estimator.py b/batchglm/train/tf1/glm_norm/estimator.py index 2af9a9dd..bd1778ac 100644 --- a/batchglm/train/tf1/glm_norm/estimator.py +++ b/batchglm/train/tf1/glm_norm/estimator.py @@ -172,14 +172,6 @@ def init_par( $$ """ - size_factors_init = input_data.size_factors - if size_factors_init is not None: - size_factors_init = np.expand_dims(size_factors_init, axis=1) - size_factors_init = np.broadcast_to( - array=size_factors_init, - shape=[input_data.num_observations, input_data.num_features] - ) - sf_given = False if input_data.size_factors is not None: if np.any(np.abs(input_data.size_factors - 1.) > 1e-8): @@ -268,7 +260,7 @@ def init_par( x=input_data.x, design_scale=input_data.design_scale, constraints=input_data.constraints_scale, - size_factors=size_factors_init, + size_factors=input_data.size_factors, groupwise_means=groupwise_means, link_fn=lambda sd: np.log(self.np_clip_param(sd, "sd")) ) @@ -282,7 +274,7 @@ def init_par( x=input_data.x, design_scale=input_data.design_scale[:, [0]], constraints=input_data.constraints_scale[[0], :][:, [0]], - size_factors=size_factors_init, + size_factors=input_data.size_factors, groupwise_means=None, link_fn=lambda sd: np.log(self.np_clip_param(sd, "sd")) ) @@ -331,4 +323,3 @@ def init_par( logger.debug("Using initialization based on input model for dispersion") return init_a, init_b - From d182a84cd2654767e8233e1d6c0ebf2ea371c1dd Mon Sep 17 00:00:00 2001 From: picciama Date: Sun, 12 Jan 2020 20:12:48 +0100 Subject: [PATCH 2/2] bugfix: size_factors is 2D, adding row indexing --- batchglm/models/base_glm/input.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/batchglm/models/base_glm/input.py b/batchglm/models/base_glm/input.py index 27676e4f..dd27be71 100644 --- a/batchglm/models/base_glm/input.py +++ b/batchglm/models/base_glm/input.py @@ -197,4 +197,4 @@ def fetch_design_scale(self, idx): return self.design_scale[idx, :] def fetch_size_factors(self, idx): - return self.size_factors[idx] + return self.size_factors[idx, :]