원자력 발전소 상태 판단 알고리즘 공모전 도전 5일차!(마지막날)

솜씨좋은장씨

·

2020. 2. 12. 14:39

 

[산업] 원자력발전소 상태 판단 대회

출처 : DACON - Data Science Competition

dacon.io

먼저 lightGBM 모델을 사용하였습니다.

from lightgbm import LGBMClassifier, plot_importance
lgb2 = LGBMClassifier(n_estimators=2, learning_rate=0.001, max_depth=7,min_child_samples=48, random_state=4321)
lgb2.fit(X_train, y_train, verbose=2)

결과는!

 

이번에는 GridSearchCV를 활용하여 RandomForest의 최적의 파라미터를 찾아보았습니다.

 

머신러닝 bagging 앙상블 랜덤 포레스트(random forest)란?

머신러닝 앙상블에는 배깅(bagging), 보팅(voting), 부스팅(boosting)이 있습니다. 그 중 앙상블 bagging에 속한 랜덤 포레스트를 이번 포스팅에서 소개할까합니다. 이 random forest는 빠른 속도와 높은 예측 성..

lsjsj92.tistory.com

위의 링크를 참고하였습니다.

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
rf_param_grid = {
    'n_estimators' : [10, 30, 50, 70, 100],
    'max_depth' : [6, 8, 10, 12],
    'min_samples_leaf' : [3, 5, 7, 10],
    'min_samples_split' : [2, 3, 5, 10]
}
rf = RandomForestClassifier(random_state=0)
import time

strTime = time.time()
print("시작시간: ", strTime)
rf_grid = GridSearchCV(rf, param_grid=rf_param_grid, scoring='accuracy', n_jobs=-1, verbose = 1)
rf_grid.fit(X_train, y_train)
print("소요시간 : ", time.time() - strTime)

생각보다 너어어어무 오랜 시간이 걸려 한참 기다렸습니다.

는 .... 결국 Colab의 런타임 연결이 해제되고 어쩔수없이 시간상 변수를 줄여서 다시 시도해 보았습니다.

rf_param_grid = {
    'n_estimators' : [4, 6, 7, 8],
    'max_depth' : [7, 9],
    'min_samples_leaf' : [3, 5],
    'min_samples_split' : [2, 3]
}

print("최고 평균 정확도 {0:4f}".format(rf_grid.best_score_))
print("최고의 파라미터 : ", rf_grid.best_params_)

정확도가 낮지만 여러번의 삽질로 인하여 시간이 없어 일단 지금 나온 최적의 파라미터를 가지고 시도해보기로 했습니다.

model = RandomForestClassifier(random_state=0, n_estimators=rf_grid.best_params_['n_estimators'], max_depth=rf_grid.best_params_['max_depth'], min_samples_leaf=rf_grid.best_params_['min_samples_leaf'], min_samples_split=rf_grid.best_params_['min_samples_split'], verbose=1,  n_jobs=-1, warm_start=True)
model.fit(X_train, y_train)

결과는!

이번엔 n_estimators 만 200으로 바꾸어 해보았습니다.

model4 = RandomForestClassifier(random_state=0, max_depth=rf_grid.best_params_['max_depth'], min_samples_leaf=rf_grid.best_params_['min_samples_leaf'], min_samples_split=rf_grid.best_params_['min_samples_split'], n_estimators=200, warm_start=True)
model4.fit(X_train, y_train)

결과는!

 

최종 Private 순위

총 190팀 중에 47위를 기록했습니다.

 

5일 동안 도전 후기

처음 시작할때 머신러닝의 여러 앙상블 모델에 대해서 모르고

그저 DACON에서 제공해주는 base_line 코드의 하이퍼 파라미터만 바꿔보면서 도전했지만

알바도 하고 Dev-Matching을 도전하면서 핸즈온 머신러닝과 패스트 캠퍼스의 머신러닝 강의를 통해

각 알고리즘의 개념과 주로 많이쓰이는 모델, 그리고 보통 성능이 잘나오는 모델이 무엇인지도 알 수 있었습니다.

그 후 속도도 빠르고 성능도 잘나온다는 lightGBM을 사용해 보았지만 결과는 좋지 못하였습니다.

어떻게하면 최적의 파라미터를 찾을 수 있을까!

하고 다시 공부를 하면서 GridSearchCV와 같은 기법에 대해서 알게되었습니다.

Colab 환경에서 여러 하이퍼파라미터를 변수로 넣고 테스트 해보기에는 시간과 자원이 부족함을 느꼈습니다.

조금 더 빨리 공부하고 더 많이 도전해봤으면 어땠을까 하는 생각이 들지만!

이 대회의 수상이 끝난 후 연습으로 지속적으로 제출이 가능하다고하니

시간이 모자라서 더 못했던 내용들을 하나씩 도전해보면서 성능을 높여가볼 생각입니다.

성능을 높이는 과정은 개인 블로그에 하나씩 올려보려합니다.

언젠가는 머신러닝/딥러닝용 컴퓨터를 맞추고 런타임 걱정없이 돌릴 그날까지!

열심히 공부하려합니다.

 

대회가 끝났지만 연습을 할 수 있도록 아직 대회가 열려있습니다.

대회를 도전해보고 싶으신 분들은 아래의 링크를 통해 도전해보시기 바랍니다.

 

읽어주셔서 감사합니다!

 

지금 바로 대회 참가해보기 

 

[산업] 원자력발전소 상태 판단 대회

출처 : DACON - Data Science Competition

dacon.io