yassersami / sampler

0 stars 1 forks source link

Error outliers treatment #2

Closed Sala2Code closed 2 months ago

Sala2Code commented 3 months ago

I've got this error. I write it here to keep track the issue.

 --------------------------ATTENTION: composition du gaz ne peut pas être inferieure à 0: réduire le pas de temps?

[ 1.88532993e-10  8.03057127e-03  7.03484512e-13  9.78075756e-01
 -2.25103251e-29  2.52154281e-12  7.45556434e-23  4.76868828e-17
  1.38936729e-02]
1.0000000000000002
-2.5038881173435594e-26
\\cubitus\rsala\sampler_git\sampler\src\sampler\models\wrapper_for_0d.py:45: UserWarning: Error in simulation! Returning NaNs. Error: Y<0. Input dic: {'r_ext_pAl': 2e-07, 'pAl_richness': 3.3481054933764303, 'r_ext_pMeO': 2e-07, 'workdir': 'simu_00059', 'alpha_p': 0.3, 'heat_input_ths': 556000, 'power_input': 20000000, 'coeff_contact': 0.01, 'Ea_D_Ox': 50000, 'Ea_Al2O3_decomp': 400000, 'Ea_MeO_decomp': 50000, 'k0_D_Ox': 8e-06, 'k0_Al2O3_decomp': 1520000, 'k0_MeO_decomp': 30000000, 'bool_kin': 'false', 'transform_type': 'V=cste', 'bool_gas_chamber': False, 'bool_thermal_flux_gc': False, 'mlt_thermal_flux': 1, 't_f': 0.5, 'HW': False, 'CO_T': 2500, 'load_last_data': False, 'save_last_data': False, 'max_dt': 1e-05, 'max_dTg_ite': 5, 'sample_period': 4.0, 'max_simu_time': 2400, 'var_ths_h': 1, 'var_window_factor': 0.5, 'ct_data_base': 'AlxOy_N2_Cu_O_and_Catoire_kin.yaml', 'Y_Al_pAl': 0.3234786012563722}
  warnings.warn(f"Error in simulation! Returning NaNs. Error: {e}. Input dic: {inputs_dic}")
py0D.main.main -> computational time=1766.33
[07/30/24 17:28:45] WARNING  \\cubitus\rsala\sampler_git\sampler\src\sampler\common\scalers.py:47: RuntimeWarning: divide by zero encountered in log      warnings.py:109                               x_log_norm = self.scaler_log.transform(np.log(X[:, self.log_vars]))

                    WARNING  No nodes ran. Repeat the previous command to attempt a new run.                                                                runner.py:201╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\runpy.py:194 in _run_module_as_main         │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\runpy.py:87 in _run_code                    │
│                                                                                                  │
│ in <module>:7                                                                                    │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\kedro\framework\cli\cli.py:21 │
│ 1 in main                                                                                        │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\click\core.py:1157 in         │
│ __call__                                                                                         │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\kedro\framework\cli\cli.py:13 │
│ 9 in main                                                                                        │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\click\core.py:1078 in main    │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\click\core.py:1688 in invoke  │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\click\core.py:1434 in invoke  │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\click\core.py:783 in invoke   │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\kedro\framework\cli\project.p │
│ y:455 in run                                                                                     │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\kedro\framework\session\sessi │
│ on.py:421 in run                                                                                 │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\kedro\runner\runner.py:91 in  │
│ run                                                                                              │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\kedro\runner\sequential_runne │
│ r.py:70 in _run                                                                                  │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\kedro\runner\runner.py:319 in │
│ run_node                                                                                         │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\kedro\runner\runner.py:433 in │
│ _run_node_sequential                                                                             │
│                                                                                                  │
│ \\cubitus\rsala\sampler_git\sampler\src\sampler\pipelines\irbs\nodes.py:55 in irbs_sampling      │
│                                                                                                  │
│    52 │   │                                                                                      │
│    53 │   │   new_x, scores = model.optimize(batch_size=batch_size, iters=opt_iters, n=opt_poi   │
│    54 │   │                                                                                      │
│ ❱  55 │   │   new_df, error_features = simulator.process_data(new_x, real_x=False, index=size)   │
│    56 │   │   model.add_ignored_points(error_features)                                           │
│    57 │   │                                                                                      │
│    58 │   │   print(f'Round {iteration:03} (continued): simulation results' + '-'*49)            │
│                                                                                                  │
│ \\cubitus\rsala\sampler_git\sampler\src\sampler\models\wrapper_for_0d.py:155 in process_data     │
│                                                                                                  │
│   152 │   │   │   │   self.treatment.scaler                                                      │
│   153 │   │   │   )                                                                              │
│   154 │   │                                                                                      │
│ ❱ 155 │   │   scaled_data, scaled_errors = self.treatment.treat_data(df_real=new_points, scale   │
│   156 │   │   scaled_data = scaled_data[self.features + self.targets + self.additional_values]   │
│   157 │   │   return scaled_data, scaled_errors                                                  │
│   158                                                                                            │
│                                                                                                  │
│ \\cubitus\rsala\sampler_git\sampler\src\sampler\common\data_treatment.py:53 in treat_data        │
│                                                                                                  │
│    50 │   │   scaled_data[scaler_cols] = self.scaler.transform(real_data[scaler_cols].values)    │
│    51 │   │   # Scale errors, but don't forget to fill nans temporarily                          │
│    52 │   │   scaled_errors = errors.copy()                                                      │
│ ❱  53 │   │   scaled_errors[scaler_cols] = self.scaler.transform_with_nans(errors[scaler_cols]   │
│    54 │   │   return scaled_data, scaled_errors                                                  │
│    55 │                                                                                          │
│    56 │   def treat_outliers(self, df: pd.DataFrame) -> tuple:                                   │
│                                                                                                  │
│ \\cubitus\rsala\sampler_git\sampler\src\sampler\common\scalers.py:58 in transform_with_nans      │
│                                                                                                  │
│    55 │   │   df = pd.DataFrame(X_nan, columns=cols)                                             │
│    56 │   │   nan_mask = df.isna()                                                               │
│    57 │   │   df = df.fillna(0)  # 0 is a dummy value                                            │
│ ❱  58 │   │   df[cols] = self.transform(df.values)                                               │
│    59 │   │   df = df.mask(nan_mask)                                                             │
│    60 │   │   return df.values                                                                   │
│    61                                                                                            │
│                                                                                                  │
│ \\cubitus\rsala\sampler_git\sampler\src\sampler\common\scalers.py:47 in transform                │
│                                                                                                  │
│    44 │   │   else:                                                                              │
│    45 │   │   │   x_lin_norm = np.empty(len(X))                                                  │
│    46 │   │   if self.log_on:                                                                    │
│ ❱  47 │   │   │   x_log_norm = self.scaler_log.transform(np.log(X[:, self.log_vars]))            │
│    48 │   │   else:                                                                              │
│    49 │   │   │   x_log_norm = np.empty(len(X))                                                  │
│    50 │   │   return self._merge(x_lin_norm, x_log_norm)                                         │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\sklearn\utils\_set_output.py: │
│ 140 in wrapped                                                                                   │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\sklearn\preprocessing\_data.p │
│ y:508 in transform                                                                               │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\sklearn\base.py:565 in        │
│ _validate_data                                                                                   │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\sklearn\utils\validation.py:9 │
│ 21 in check_array                                                                                │
│                                                                                                  │
│ C:\Users\rsala\AppData\Local\anaconda3\envs\venv\lib\site-packages\sklearn\utils\validation.py:1 │
│ 61 in _assert_all_finite                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
ValueError: Input X contains infinity or a value too large for dtype('float64').
 24%|██████████████████████████████▋                                                                                                 | 12/50 [58:13<3:04:24, 291.16s/it] 
yassersami commented 3 months ago

Est ce que tu obtiens ça avec les anciennes expériences ou avec p=4 et p=5 ? J'ai l'impression que la simu engendre des Pg ou Tg beaucoup trop grande. En plus c'est sur les simulations avec des erreurs... Tu peux essayer de ne pas transform les target qui ont des valeurs aberrantes et te contenter des features. Un truc comme ça dans DataTreatment.treat_data :

        # # Scale errors, but don't forget to fill nans temporarily
        # scaled_errors = errors.copy()
        # scaled_errors[scaler_cols] = self.scaler.transform_with_nans(errors[scaler_cols].values)

        # Scale only features because targets can have aberrant  values
        scaled_errors = errors[self.features].copy()
        scaled_errors[self.features] = self.scaler.transform_features(errors[self.features].values)
yassersami commented 3 months ago

Au temps pour moi c'est au contraire de trop petites valeurs. Très étranges, vu que les features ne sortent pas des domaines de définition c'est surement les targets. Ca doit être mieux identifié. Si tu as la réponse je suis preneur.

Après la modification que tu propose dans MixedMinMaxScaler.transform de remplacer les trop petites valeurs destinée au log en 1e-10 est très stylée.

        if self.log_on:
            # x_log_norm = self.scaler_log.transform(np.log(X[:, self.log_vars]))
            X_log_safe = np.copy(X[:, self.log_vars])
            X_log_safe[X_log_safe <= 0] = 1e-10
            x_log_norm = self.scaler_log.transform(np.log(X_log_safe))

A toi de voir laquelle te plaît le plus 🥇

yassersami commented 2 months ago

We did both changes finally.