I'm attempting to compute the class_weights for an highly imbalanced set of 9 classes based on the examples discussed in How to set class weights for imbalanced classes in Keras?. Here is the code:
import numpy as np
import math
# labels_dict : {ind_label: count_label}
# mu : parameter to tune
def create_class_weight(labels_dict,mu=0.15):
total = np.sum(labels_dict.values())
keys = labels_dict.keys()
class_weight = dict()
for key in keys:
score = math.log(mu*total/float(labels_dict[key]))
class_weight[key] = score if score > 1.0 else 1.0
return class_weight
# random labels_dict
labels_dict = {0: 3400, 1: 1700, 2: 4700, 3: 6800, 4: 3400, 5: 2300, 6: 8300, 7: 1000, 8:9600}
create_class_weight(labels_dict)
I'm getting an error log like this:
File "<ipython-input-34-7a9feda1053b>", line 20, in <module>
create_class_weight(labels_dict)
File "<ipython-input-34-7a9feda1053b>", line 11, in create_class_weight
score = math.log(mu*total/float(labels_dict[key]))
TypeError: unsupported operand type(s) for *: 'float' and 'dict_values'
I'm running the code with Python 3.6.3. What modifications am I supposed to make?