@@ -18,7 +18,7 @@ class Kriging(BaseEstimator, RegressorMixin):
1818 Attributes:
1919 eps (float): A small regularization term to reduce ill-conditioning.
2020 penalty (float): The penalty value used if the correlation matrix is ill-conditioned.
21- logtheta_lambda_ (np.ndarray): Best-fit log(theta) parameters from fit().
21+ logtheta_loglambda_p_ (np.ndarray): Best-fit log(theta), log(lambda), and p parameters from fit().
2222 U_ (np.ndarray): The Cholesky factor of the correlation matrix after fit().
2323 X_ (np.ndarray): The training input data (n x d).
2424 y_ (np.ndarray): The training target values (n,).
@@ -92,7 +92,7 @@ def __init__(
9292 name (str, optional):
9393 Name of the Kriging model instance. Defaults to "Kriging".
9494 seed (int, optional):
95- Random seed for reproducibility. Defaults to 124.
95+ Random seed for reproducibility. Used by the optimizer. Defaults to 124.
9696 model_optimizer (callable, optional):
9797 Optimization algorithm for hyperparameter tuning. Defaults to
9898 scipy.optimize.differential_evolution.
@@ -184,7 +184,7 @@ def __init__(
184184 self .log ["p" ] = []
185185 self .log ["Lambda" ] = []
186186
187- self .logtheta_lambda_ = None
187+ self .logtheta_loglambda_p_ = None
188188 self .U_ = None
189189 self .X_ = None
190190 self .y_ = None
@@ -283,7 +283,17 @@ def get_model_params(self) -> Dict[str, float]:
283283 >>> X_values = model.get_model_params()["X"]
284284 >>> print("X values:", X_values)
285285 """
286- return {"log_theta_lambda" : self .logtheta_lambda_ , "U" : self .U_ , "X" : self .X_ , "y" : self .y_ , "negLnLike" : self .negLnLike , "inf_Psi" : self .inf_Psi , "cnd_Psi" : self .cnd_Psi }
286+ return {
287+ "n" : self .n ,
288+ "k" : self .k ,
289+ "logtheta_loglambda_p_" : self .logtheta_loglambda_p_ ,
290+ "U" : self .U_ ,
291+ "X" : self .X_ ,
292+ "y" : self .y_ ,
293+ "negLnLike" : self .negLnLike ,
294+ "inf_Psi" : self .inf_Psi ,
295+ "cnd_Psi" : self .cnd_Psi ,
296+ }
287297
288298 def _update_log (self ) -> None :
289299 """
@@ -389,24 +399,24 @@ def fit(self, X: np.ndarray, y: np.ndarray, bounds: Optional[List[Tuple[float, f
389399 n_p = self .n_p if hasattr (self , "n_p" ) else self .k
390400 bounds += [(self .min_p , self .max_p )] * n_p
391401
392- self .logtheta_lambda_ , _ = self .max_likelihood (bounds )
402+ self .logtheta_loglambda_p_ , _ = self .max_likelihood (bounds )
393403
394404 # store theta and Lambda in log scale
395- self .theta = self .logtheta_lambda_ [: self .n_theta ]
405+ self .theta = self .logtheta_loglambda_p_ [: self .n_theta ]
396406 if (self .method == "regression" ) or (self .method == "reinterpolation" ):
397- # select the first n_theta values from logtheta_lambda_ :
398- self .Lambda = self .logtheta_lambda_ [self .n_theta : self .n_theta + 1 ]
407+ # select the first n_theta values from logtheta_loglambda_p_ :
408+ self .Lambda = self .logtheta_loglambda_p_ [self .n_theta : self .n_theta + 1 ]
399409 if self .optim_p :
400- self .p_val = self .logtheta_lambda_ [self .n_theta + 1 : self .n_theta + 1 + self .n_p ]
410+ self .p_val = self .logtheta_loglambda_p_ [self .n_theta + 1 : self .n_theta + 1 + self .n_p ]
401411 elif self .method == "interpolation" :
402412 self .Lambda = None
403413 if self .optim_p :
404- self .p_val = self .logtheta_lambda_ [self .n_theta : self .n_theta + self .n_p ]
414+ self .p_val = self .logtheta_loglambda_p_ [self .n_theta : self .n_theta + self .n_p ]
405415 else :
406416 raise ValueError ("method must be one of 'interpolation', 'regression', or 'reinterpolation'" )
407417
408418 # Once logtheta_lambda is found, compute the final correlation matrix
409- self .negLnLike , self .Psi_ , self .U_ = self .likelihood (self .logtheta_lambda_ )
419+ self .negLnLike , self .Psi_ , self .U_ = self .likelihood (self .logtheta_loglambda_p_ )
410420
411421 # Update log with the current values
412422 self ._update_log ()
@@ -696,18 +706,18 @@ def _pred(self, x: np.ndarray) -> float:
696706 y = self .y_ .flatten ()
697707
698708 if (self .method == "regression" ) or (self .method == "reinterpolation" ):
699- self .theta = self .logtheta_lambda_ [: self .n_theta ]
700- lambda_ = self .logtheta_lambda_ [self .n_theta : self .n_theta + 1 ]
709+ self .theta = self .logtheta_loglambda_p_ [: self .n_theta ]
710+ lambda_ = self .logtheta_loglambda_p_ [self .n_theta : self .n_theta + 1 ]
701711 # lambda is in log scale, so transform it back:
702712 lambda_ = 10.0 ** lambda_
703713 if self .optim_p :
704- self .p_val = self .logtheta_lambda_ [self .n_theta + 1 : self .n_theta + 1 + self .n_p ]
714+ self .p_val = self .logtheta_loglambda_p_ [self .n_theta + 1 : self .n_theta + 1 + self .n_p ]
705715 elif self .method == "interpolation" :
706- self .theta = self .logtheta_lambda_ [: self .n_theta ]
716+ self .theta = self .logtheta_loglambda_p_ [: self .n_theta ]
707717 # use the original, untransformed eps:
708718 lambda_ = self .eps
709719 if self .optim_p :
710- self .p_val = self .logtheta_lambda_ [self .n_theta : self .n_theta + self .n_p ]
720+ self .p_val = self .logtheta_loglambda_p_ [self .n_theta : self .n_theta + self .n_p ]
711721 else :
712722 raise ValueError ("method must be one of 'interpolation', 'regression', or 'reinterpolation'" )
713723
@@ -790,11 +800,11 @@ def max_likelihood(self, bounds: List[Tuple[float, float]]) -> Tuple[np.ndarray,
790800 print("Minimized negative log-likelihood:", best_fun)
791801 """
792802
793- def objective (logtheta_loglambda_p : np .ndarray ) -> float :
794- neg_ln_like , _ , _ = self .likelihood (logtheta_loglambda_p )
803+ def objective (logtheta_loglambda_p_ : np .ndarray ) -> float :
804+ neg_ln_like , _ , _ = self .likelihood (logtheta_loglambda_p_ )
795805 return neg_ln_like
796806
797- result = differential_evolution (objective , bounds )
807+ result = differential_evolution (func = objective , bounds = bounds , seed = self . seed )
798808 return result .x , result .fun
799809
800810 def plot (self , i : int = 0 , j : int = 1 , show : Optional [bool ] = True , add_points : bool = True ) -> None :
0 commit comments