오늘도 똑같이 제출하였을 때 private 점수 결과를 높이기 위해 노력하였다.

오늘은 저번에 데이터를 직접 보면서 얻어낸 하나의 단백질 변형으로 생기는 유전자 변형 SUBCLASS를 찾은 것을 바탕으로 데이터를 뽑아내 그 데이터를 바탕으로 model을 학습시키고 그 model과 전체 데이터 모델을 통해서 앙상블로 모델의 성능을 높이는 작업을 진행하기로 하였다.

# XGBoost 모델 정의
xgb_model_single_gene = xgb.XGBClassifier(
    n_estimators=100,
    learning_rate=0.1,
    max_depth=5,
    random_state=42,
    use_label_encoder=False,
    eval_metric='mlogloss',
    tree_method='gpu_hist'  # GPU 가속 사용
)

# 모델 학습 (학습 데이터만 사용)
xgb_model_single_gene.fit(X_encoded_single_gene, y_subclass_single_gene)

이 코드를 통해 전처리 된 데이터를 학습하는 모델을 생성하였고,

from sklearn.ensemble import VotingClassifier

# 학습된 두 모델을 앙상블로 결합
ensemble_model = VotingClassifier(
    estimators=[
        ('xgb_full', xgb_model),  # 전체 데이터로 학습한 모델
        ('xgb_single_gene', xgb_model_single_gene),  # single_gene 데이터로 학습한 모델
        ('rf', rf_model)
    ],
    voting='soft'  # 소프트 보팅 사용, 각 모델의 예측 확률을 평균
)

# 학습 데이터를 사용해 모델을 재학습하지 않고 앙상블만 사용하므로, fit()은 필요 없음
# 테스트 데이터를 활용해 앙상블 모델로 예측을 수행할 수 있습니다.

# 예시: 테스트 데이터가 있다고 가정 (X_test_full, X_test_single_gene)
# 각 모델이 예측할 동일한 형태의 테스트 데이터를 준비해야 합니다.
# 테스트 데이터는 full 데이터셋과 single_gene 데이터셋에서 모두 공통으로 사용할 수 있는 피처로 만들어져야 함

# 테스트 데이터 준비 예시 (이 부분은 실제 데이터셋에 맞게 수정해야 함)
# X_test_full과 X_test_single_gene은 동일한 테스트 데이터로 사용
# y_pred_ensemble = ensemble_model.predict(X_test_full)

# # 최종 예측값 출력
# print(y_pred_ensemble)

이 후 이 코드로 앙상블을 진행하였다.

또한, 앙상블을 진행하고 나서도 성능이 그렇게 많이 올라가지 않아.

random forest를 추가하여 앙상블을 진행한 것을 볼 수 있다.

이후, model의 파라미터를 추가적으로 조정하여

image.png

181등이라는 성적을 거뒀다.