CapstoneDesign-SF / TimesNet-Light

[2024-1 DGU 종합설계 프로젝트 SF팀 & 2024 대한전자공학회 하계종합학술대회]
3 stars 1 forks source link

코드 개선 : 베이지안 최적화 - 로스기반일 경우 #3

Closed dablro12 closed 1 month ago

dablro12 commented 1 month ago

Data Unbalancing 관점에서 Recall Score를 사용한 방안과 최적화에서 Target값인 Loss값이 최소인 값이 좋을 것 같아 코드 업데이트 해보면 좋을 것 같아 공유드려요.

캡스톤이지만 최근 ICLR2023에 뜬 SOTA 모델을 사용하신게 대단하신 것 같습니다. 응원합니다 :) `%cd /home/eiden/eiden/pd-ai/reference/timesnet_lite from bayes_opt import BayesianOptimization from sklearn import metrics

AUC score 계산 함수 정의

def auc_score(y_true, y_score): """ ROC curve 아래 면적으로 AUC score 계산 """ return metrics.roc_auc_score(y_true, y_score)

Recall Score 계산 함수 정의

def recall_score(y_true, y_pred): """ Recall Score 계산 """ return metrics.recall_score(y_true, y_pred)

최적화할 목표 함수 정의

def objective_function(num_kernels):

num_kernels를 정수로 변환하여 모델에 설정

clf.num_kernels = int(num_kernels)
clf.fit(X_train)  # 모델 훈련
scores = clf.decision_function(X_train)  # 예측 점수 계산

# AUC Score 계산
roc_auc = auc_score(y_train, scores)

# 예측 결과 생성 (임계값을 0.5로 가정)
y_pred = (scores >= 0.5).astype(int)

# Recall Score 계산
recall = recall_score(y_train, y_pred)

# AUC Score와 Recall Score를 결합한 최종 점수 (가중치 설정 가능)
combined_score = 0.7 * roc_auc + 0.3 * recall

# 최적화 목표: 최소화해야 하므로 -combined_score을 반환
return -(combined_score - 0.01 * int(num_kernels))

Bayesian Optimization을 위한 파라미터 공간 정의

pbounds = {'num_kernels': (1, 6)}

Bayesian Optimization 초기화

optimizer = BayesianOptimization( f=objective_function, # 목표 함수 pbounds=pbounds, # 파라미터 공간 verbose=2, # 로그 레벨 random_state=42 # 시드 값 )

최적화 실행

optimizer.maximize(init_points=3, n_iter=3)

최적의 커널 수 출력

print("최적의 커널 수:", optimizer.max['params']) print("최적의 결합 점수:", optimizer.max['target'])`

dablro12 commented 1 month ago

Score Metric인것을 확인못했네요. 해결된 것 같습니다. 감사합니다.