@@ -23,37 +23,55 @@ def fit(self, x=None, method=None):
2323
2424 for i , method_name in zip (range (len (method )), method ):
2525 if method_name == "MinMaxScaler" :
26+
27+ # If cannot scale by MinMaxScaler then do not scale
28+ if torch .any (self .maxs [i ] - self .mins [i ] == 0.0 ):
29+ print ("max-min is zero, cannot use MinMaxScaler, no transform" )
30+ self .mins [self .maxs [i ] - self .mins [i ] == 0.0 ] = 0.0
31+ self .maxs [self .maxs [i ] - self .mins [i ] == 0.0 ] = 1.0
32+
2633 scaler_a .append (self .mins [i ])
2734 scaler_b .append (self .maxs [i ] - self .mins [i ])
35+
2836 elif method_name == "Z-score" :
37+
38+ if torch .any (self .stds [i ] == 0.0 ):
39+ print ("standard deviation is zero, cannot use Z-score, no transform" )
40+ self .means [self .stds [i ] == 0. ] = 0.0
41+ self .stds [self .stds [i ] == 0. ] = 1.0
42+
2943 scaler_a .append (self .means [i ])
3044 scaler_b .append (self .stds [i ])
45+
3146 elif method_name == "None" :
3247 scaler_a .append (0.0 )
3348 scaler_b .append (1.0 )
49+
3450 else :
3551 print ("Error: unknown scaler" )
3652 SystemExit ("Program stop, please change scaler" )
3753
3854 scaler_ab = torch .cat ((torch .tensor (scaler_a , dtype = torch .float32 ),
3955 torch .tensor (scaler_b , dtype = torch .float32 )), 0 )
4056
41- self .scaler_parameter = torch .reshape (scaler_ab ,
42- (2 ,len (scaler_a )))
57+ self .scaler_parameter = torch .reshape (
58+ scaler_ab , (2 ,len (scaler_a )))
4359
44- def transform (self , x :dict [str :torch .tensor ]= None ) -> list :
60+ def transform (self , x :dict [str :torch .tensor ]= None ) -> list :
4561 x_scale = {}
4662 for object_id in x :
47- x_scale [object_id ] = torch .div (torch . sub ( x [ object_id ],
48- self .scaler_parameter [0 ,:]),
49- self .scaler_parameter [1 ,:])
63+ x_scale [object_id ] = torch .div (
64+ torch . sub ( x [ object_id ], self .scaler_parameter [0 ,:]),
65+ self .scaler_parameter [1 ,:])
5066 return x_scale
5167
5268 def inverse (self , x :list = None ) -> list :
5369 x_inverse = {}
5470 for object_id in x :
55- x_inverse [object_id ] = torch .add (self .scaler_parameter [0 ,:],
56- x [object_id ]* self .scaler_parameter [1 ,:])
71+ x_inverse [object_id ] = torch .add (
72+ self .scaler_parameter [0 ,:],
73+ x [object_id ]* self .scaler_parameter [1 ,:])
74+
5775 return x_inverse
5876
5977def _column_mins (input_tensor : torch .tensor = None ):
@@ -105,7 +123,8 @@ def get_scaler_name(config):
105123 scaler_name_input .append (name )
106124
107125 # scaler name target
108- scaler_name_target = config ["scaler_target_features" ]* len (config ["target_features" ])
126+ scaler_name_target = config ["scaler_target_features" ]* len (
127+ config ["target_features" ])
109128
110129 return scaler_name_input , scaler_name_target
111130
0 commit comments