Mentions légales du service

Skip to content
Snippets Groups Projects
Commit b9d6a74b authored by Simon Labarthe's avatar Simon Labarthe
Browse files

introducing possibility to use identity for metamodel (usefull for metabolic...

introducing possibility to use identity for metamodel (usefull for metabolic seeds for which FBA always predict for influx the same value than the constraint applied for it)
parent 0f6ab7c4
Branches
No related tags found
No related merge requests found
Pipeline #1090622 failed
......@@ -9,6 +9,7 @@ import itertools as it
import numpy as np
import pandas as pd
import yaml
from scipy.linalg import sqrtm
from sklearn.metrics.pairwise import pairwise_kernels
from sklearn.preprocessing import MinMaxScaler
......@@ -78,6 +79,7 @@ class Metamodel(object):
kernel_type="Matern",
index_col=None,
exp=None,
metamodel_config=None,
):
self.kernel_type = kernel_type
self.bact = bact
......@@ -96,6 +98,11 @@ class Metamodel(object):
self.Nobs, self.Nsub = np.shape(self.C_learn)
if fluxes is not None:
self.new_fluxlearningset(fluxes, index_col=index_col)
if metamodel_config is not None:
with open(metamodel_config, "r") as file: # Load the user parameter yml
self.metamodel_yml = yaml.safe_load(file)
else:
self.metamodel_yml = None
def new_constraintlearningset(
self,
......@@ -450,24 +457,33 @@ class Metamodel(object):
kernel_singleton_OrderOne[:, :, s] = self.ka0_predict(c, s)
output = np.zeros([Npred, self.Ncompound])
for comp in range(self.Ncompound):
kernel_singleton = np.zeros([Npred, self.Nobs, len(self.kept_P[comp])])
for a in range(len(self.kept_P[comp])):
if len(self.kept_P[comp][a]) == 1:
kernel_singleton[:, :, a] = kernel_singleton_OrderOne[
:, :, self.kept_P[comp][a][0]
]
else:
kernel_singleton[:, :, a] = np.prod(
kernel_singleton_OrderOne[:, :, self.kept_P[comp][a]],
axis=2,
)
output[:, comp] = self.theta_0[comp] + np.sum(
[
kernel_singleton[:, :, iv].dot(self.theta[comp][:, iv])
for iv in range(len(self.kept_P[comp]))
],
axis=0,
)
if (
self.metamodel_yml is not None
and "identity" in self.metamodel_yml[self.bact]
and comp in self.metamodel_yml[self.bact]["identity"]
):
output[:, comp] = c[:, comp]
else:
kernel_singleton = np.zeros(
[Npred, self.Nobs, len(self.kept_P[comp])]
)
for a in range(len(self.kept_P[comp])):
if len(self.kept_P[comp][a]) == 1:
kernel_singleton[:, :, a] = kernel_singleton_OrderOne[
:, :, self.kept_P[comp][a][0]
]
else:
kernel_singleton[:, :, a] = np.prod(
kernel_singleton_OrderOne[:, :, self.kept_P[comp][a]],
axis=2,
)
output[:, comp] = self.theta_0[comp] + np.sum(
[
kernel_singleton[:, :, iv].dot(self.theta[comp][:, iv])
for iv in range(len(self.kept_P[comp]))
],
axis=0,
)
if self.Scaler_fluxes_flag != "None":
output = self.Scaler_fluxes.inverse_transform(output)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment