@@ -185,12 +185,30 @@ def _dense_fit(self, X, y, solver_type, kernel):
185185 if self .class_weight is None :
186186 weight_size = 0
187187 self .class_weight = dict ()
188+ weight_label = (c_int * weight_size )()
189+ weight_label [:] = list (self .class_weight .keys ())
190+ weight = (c_float * weight_size )()
191+ weight [:] = list (self .class_weight .values ())
192+ elif self .class_weight == 'balanced' :
193+ y_unique = np .unique (y )
194+ y_count = np .bincount (y .astype (int ))
195+ weight_label_list = []
196+ weight_list = []
197+ for n in range (0 , len (y_count )):
198+ if y_count [n ] != 0 :
199+ weight_label_list .append (n )
200+ weight_list .append (samples / (len (y_unique )* y_count [n ]))
201+ weight_size = len (weight_list )
202+ weight_label = (c_int * weight_size )()
203+ weight_label [:] = weight_label_list
204+ weight = (c_float * weight_size )()
205+ weight [:] = weight_list
188206 else :
189207 weight_size = len (self .class_weight )
190- weight_label = (c_int * weight_size )()
191- weight_label [:] = list (self .class_weight .keys ())
192- weight = (c_float * weight_size )()
193- weight [:] = list (self .class_weight .values ())
208+ weight_label = (c_int * weight_size )()
209+ weight_label [:] = list (self .class_weight .keys ())
210+ weight = (c_float * weight_size )()
211+ weight [:] = list (self .class_weight .values ())
194212
195213 n_features = (c_int * 1 )()
196214 n_classes = (c_int * 1 )()
@@ -228,12 +246,30 @@ def _sparse_fit(self, X, y, solver_type, kernel):
228246 if self .class_weight is None :
229247 weight_size = 0
230248 self .class_weight = dict ()
249+ weight_label = (c_int * weight_size )()
250+ weight_label [:] = list (self .class_weight .keys ())
251+ weight = (c_float * weight_size )()
252+ weight [:] = list (self .class_weight .values ())
253+ elif self .class_weight == 'balanced' :
254+ y_unique = np .unique (y )
255+ y_count = np .bincount (y .astype (int ))
256+ weight_label_list = []
257+ weight_list = []
258+ for n in range (0 , len (y_count )):
259+ if y_count [n ] != 0 :
260+ weight_label_list .append (n )
261+ weight_list .append (X .shape [0 ]/ (len (y_unique )* y_count [n ]))
262+ weight_size = len (weight_list )
263+ weight_label = (c_int * weight_size )()
264+ weight_label [:] = weight_label_list
265+ weight = (c_float * weight_size )()
266+ weight [:] = weight_list
231267 else :
232268 weight_size = len (self .class_weight )
233- weight_label = (c_int * weight_size )()
234- weight_label [:] = list (self .class_weight .keys ())
235- weight = (c_float * weight_size )()
236- weight [:] = list (self .class_weight .values ())
269+ weight_label = (c_int * weight_size )()
270+ weight_label [:] = list (self .class_weight .keys ())
271+ weight = (c_float * weight_size )()
272+ weight [:] = list (self .class_weight .values ())
237273
238274 n_features = (c_int * 1 )()
239275 n_classes = (c_int * 1 )()
0 commit comments