일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자연어처리
- SW Expert Academy
- leetcode
- 편스토랑 우승상품
- 코로나19
- 프로그래머스
- 금융문자분석경진대회
- 파이썬
- programmers
- 맥북
- ChatGPT
- Docker
- PYTHON
- dacon
- gs25
- Real or Not? NLP with Disaster Tweets
- 우분투
- 더현대서울 맛집
- 데이콘
- AI 경진대회
- ubuntu
- Baekjoon
- 프로그래머스 파이썬
- 편스토랑
- Kaggle
- hackerrank
- 백준
- github
- 캐치카페
- Git
- Today
- Total
솜씨좋은장씨
데이콘 X AI 프렌즈 온도추정 경진대회 도전 7, 8회차 본문
데이콘 온도추정 경진대회 도전 7, 8회차입니다.
첫번째 시도
오늘은 LightGBM모델의 하이퍼 파라미터를 늘려서 시도해보았습니다.
Y18 데이터는 비어있는 구간은 Y06, Y09, Y12, Y16, Y17을 평균 낸 값을 넣어주어
비어있지않은 구간의 데이터와 함께 사용했습니다.
data_for_graph = train.loc[:, ['Y06', 'Y09', 'Y12', 'Y16', 'Y17']].dropna()
plt.figure(figsize=(20, 10))
plt.plot(data_for_graph)
import numpy as np
new_Y_18 = []
for i in range(len(data_for_graph['Y06'])):
new_Y_18.append(np.mean([data_for_graph['Y06'].iloc[i], data_for_graph['Y09'].iloc[i], data_for_graph['Y12'].iloc[i], data_for_graph['Y16'].iloc[i], data_for_graph['Y17'].iloc[i]]))
len(new_Y_18)
train.loc[:4319 ,['Y18']] = new_Y_18
X 데이터는 기상청 데이터 전부를 활용했습니다.
X_train_Y18 = train.loc[:, ['X00', 'X01', 'X02', 'X03', 'X04', 'X05', 'X06', 'X07', 'X08', 'X09', 'X10', 'X11', 'X12', 'X13', 'X15', 'X17', 'X18', 'X20', 'X21', 'X22', 'X23', 'X24', 'X25', 'X26', 'X27', 'X28', 'X29', 'X30', 'X31', 'X32', 'X33', 'X34', 'X35', 'X36', 'X37', 'X38', 'X39']]
Y_train_Y18 = train['Y18'].astype('float64')
GridSearchCV를 통해서 최적의 파라미터를 찾아보았습니다.
오늘은 먼저 refit이라는 파라미터와
max_bin, max_leaves를 추가하여 시도해보았습니다.
from sklearn.model_selection import GridSearchCV
def get_best_params(model, params):
grid_model = GridSearchCV(model, param_grid=params, scoring='neg_mean_squared_error', cv=5)
grid_model.fit(X_train_Y18, Y_train_Y18)
rmse = np.sqrt(-1* grid_model.best_score_)
print('최적 평균 RMSE 값:', np.round(rmse, 4))
print('최적 파라미터:', grid_model.best_params_)
return grid_model.best_estimator_
lgb_for_best_Y18_model = LGBMRegressor()
lgb_param_grid = {
'num_leave' : [1, 2, 3],
'max_bin' : [10, 20],
'refit':[True, False],
'n_estimators' : [100, 200, 300, 400, 500, 600, 700, 800, 900, 1000],
'max_depth' : [5, 10, 15, 20, 25],
'learning_rate' : [0.001, 0.005, 0.007, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1]
}
best_lgb_param_Y18_model = get_best_params(lgb_for_best_Y18_model, lgb_param_grid)
와.... 변수 값을 너무 많이 넣어준 탓인지 결과를 도출하는데까지 대략 9시간정도의 시간이 걸렸습니다.
중간에 기다리다 아르바이트 시간이되어 아르바이트에 가서 일을 하다 밤 10시에 쉬는시간이 되어
챙겨간 아이패드로 GridSearchCV가 찾아준 최적의 파라미터를 가지고 결과를 도출하고 제출하여보았습니다.
X_test = test.loc[:, ['X00', 'X01', 'X02', 'X03', 'X04', 'X05', 'X06', 'X07', 'X08', 'X09', 'X10', 'X11', 'X12', 'X13', 'X15', 'X17', 'X18', 'X20', 'X21', 'X22', 'X23', 'X24', 'X25', 'X26', 'X27', 'X28', 'X29', 'X30', 'X31', 'X32', 'X33', 'X34', 'X35', 'X36', 'X37', 'X38', 'X39']]
lgb_with_best_params_for_predict_Y18_after80days = LGBMRegressor(learning_rate=0.07, max_depth=5, max_bin=20, n_estimators=800, num_leaves=2, refit=True)
lgb_with_best_params_for_predict_Y18_after80days.fit(X_train_Y18, Y_train_Y18)
predict = lgb_with_best_params_for_predict_Y18_after80days.predict(X_test)
predict_labels = predict
ids = list(test['id'])
print(len(ids))
submission_dic = {"id":ids, "Y18":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("dacon_temp_sub_07_1.csv", index=False)
결과는!!!!!!!!
기...기다린 보람이있었습니다.
지금까지의 결과중에서 가장 좋은 결과를 얻을 수 있었습니다.
여기서 num_leaves를 3으로 바꾸면 어떤 결과나 나올지 궁금하여 한번 해보았습니다.
lgb_with_best_params_for_predict_Y18_after80days = LGBMRegressor(learning_rate=0.07, max_depth=5, max_bin=20, n_estimators=800, num_leaves=3, refit=True)
lgb_with_best_params_for_predict_Y18_after80days.fit(X_train_Y18, Y_train_Y18)
predict = lgb_with_best_params_for_predict_Y18_after80days.predict(X_test)
predict_labels = predict
ids = list(test['id'])
print(len(ids))
submission_dic = {"id":ids, "Y18":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("dacon_temp_sub_08_1.csv", index=False)
결과
GridSearchCV로 최적의 파라미터를 찾을때 num_leaves를 쓸때 s를 빼고 써서 제대로 반영이 되지 못한 것 같아 다시 시도해보았습니다.
lgb_param_grid2 = {
'num_leaves' : [2, 3, 4, 5, 10, 15, 20, 40, 60],
'max_bin' : [20],
'refit':[True],
'n_estimators' : [800],
'max_depth' : [5],
'learning_rate' : [0.07]
}
best_lgb_param_Y18_model = get_best_params(lgb_for_best_Y18_model, lgb_param_grid2)
lgb_with_best_params_for_predict_Y18_after80days = LGBMRegressor(learning_rate=0.07, max_depth=5, max_bin=20, n_estimators=800, num_leaves=20, refit=True)
lgb_with_best_params_for_predict_Y18_after80days.fit(X_train_Y18, Y_train_Y18)
predict = lgb_with_best_params_for_predict_Y18_after80days.predict(X_test)
predict_labels = predict
ids = list(test['id'])
print(len(ids))
submission_dic = {"id":ids, "Y18":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("dacon_temp_sub_08_2.csv", index=False)
결과
최적화를 했으니 더 좋을줄 알았는데 그렇지 않았습니다.
아마 제 추측으로는 모든 파라미터를 넣고 결과를 도출한 것이아니라 num_leaves항목만 최적화 시켰기때문에
더 좋은 성능을 내지는 못하지 않았을까 생각이 들었습니다.
마지막으로 min_child_samples를 추가하여 결과를 내보았습니다.
오늘은 여기까지!
'DACON > AI프렌즈 시즌1 온도 추정 경진대회' 카테고리의 다른 글
데이콘 X AI 프렌즈 온도추정 경진대회 도전 5, 6회차 (0) | 2020.03.19 |
---|---|
데이콘 X AI 프렌즈 온도추정 경진대회 도전 4회차 (0) | 2020.03.17 |
데이콘 X AI 프렌즈 온도추정 경진대회 도전 3회차 (0) | 2020.03.14 |
데이콘 X AI 프렌즈 온도추정 경진대회 도전 2회차 (0) | 2020.03.13 |
데이콘 X AI 프렌즈 온도추정 경진대회 도전 1회차 (0) | 2020.03.12 |