만약에 label 0이 221, 1이 268, 2가 209, 3이 100, 4가268, 5가 268, 5가 268가 있을 때 class_weight는 어떻게 부여해야 할까요?
Total_samples = 221 + 268 + 209 + 100 + 268 + 268 + 268 = 1602
weight_for_class_0 = Total_samples / (7 * count_of_class_0) = 1602 / (7*221) ≈ 1.04
weight_for_class_1 = Total_samples / (7 * count_of_class_1) = 1602 / (7*268) ≈ 0.85
weight_for_class_2 = Total_samples / (7 * count_of_class_2) = 1602 / (7*209) ≈ 1.09
weight_for_class_3 = Total_samples / (7 * count_of_class_3) = 1602 / (7*100) ≈ 2.29
weight_for_class_4 = Total_samples / (7 * count_of_class_4) = 1602 / (7*268) ≈ 0.85
weight_for_class_5 = Total_samples / (7 * count_of_class_5) = 1602 / (7*268) ≈ 0.85
weight_for_class_6 = Total_samples / (7 * count_of_class_6) = 1602 / (7*268) ≈ 0.85
class_weight = {0: 1.04, 1: 0.85, 2: 1.09, 3: 2.29, 4: 0.85, 5: 0.85, 6: 0.85}
clf = RandomForestClassifier(class_weight=class_weight)
다음과 같은 방법으로 설정할 수 있다.
예) 데이터의 개수가 2000개 일때, 증가하는 코드
data_size = 2000
weights = np.linspace(1, data_size, data_size)
data = np.random.rand(data_size)
weighted_data = data * weights
감소하는 코드
data_size = 2000
weights = np.linspace(data_size, 1, data_size)
data = np.random.rand(data_size)
weighted_data = data * weights