Class weights 설정 방법

행동하는 개발자·2023년 9월 26일

TimeSeries

목록 보기
4/8

machine learning에 class weights를 부여하는 방법

만약에 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)

다음과 같은 방법으로 설정할 수 있다.

시계열 데이터가 주어졌을 때, 데이터에 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
profile
끊임없이 뭔가를 남기는 사람

0개의 댓글