서론
이미 검색창에 AutoML이라고 치면 잘 만들어진 AutoML들이 많다.
많은 좋은 프로그래밍들을 보고 코드의 의도와 구현 방식을 배우는 것이 목표이다.
AutoML? 그냥 단순히 알고리즘 여러 개 하나하나 학습 다 해보고 젤 좋은 거 알려주면 되는 거 아닌가?
맞다. 이게 AutoML의 궁극적인 목표다. 생각해봐야 할 건 어떻게 하나하나 학습을 해야 효율적이며 무엇을 기준으로 추천해야 하지?라는 생각이 계속 이어져야 한다.
아래는 AutoML은 아니며 단순히 하나하나 학습 다 해보고 젤 좋아 보이는 거 보여주는 흉악한 코드가 있다.
% warning%
아래 코드는 처음 인공지능 교육을 들을떄 코린이가 작성한 코드이며, AutoML이라는 개념을 단순히 하나하나 다 해보고 알려주는 것으로만 알고 있던 글쓴이가 작성한 코드이다.
그 당시 코드 작성 후, "이 정도면 AutoML인 거 아닌가"라는 흉악한 망상을 했는데 잘못된 예시를 보여주기 위해 부끄럽지만 코드를 첨부했다.
# model
model_list = [model_xgb, model_lgb, model_gbr, et_model,model_rf]
'''
train 1 ~ 6까지는 모두다르게 전처리된 데이터이다
'''
# X_train
X_train_list = [X_train1, X_train2, X_train3, X_train4,X_train5,X_train6]
# y_train
y_train_list = [y_train1, y_train2, y_train3, y_train4,y_train5,y_train6]
# X_test
X_test_list = [X_test1, X_test2, X_test3, X_test4,X_test5,X_test6]
# y_test
y_test_list = [y_test1, y_test2, y_test3, y_test4,y_test5,y_test6]
df = pd.DataFrame(columns = ['data','mse' , 'mae', 'r2','rmse'])
str1 = ["컬럼V1" ,"컬럼V2"]
str2 = ["_상관 계수","_상관+다중"]
score = ['mse' , 'mae', 'r2','rmse']
model_name = ["_xgb",'_lgbm','_gbr','_et','_rf']
cnt = 0
num = 0
for i in model_list:
for j in range(len(X_train_list)):
# i번쨰 모델 학습
i.fit(X_train_list[j],y_train_list[j])
# i번쨰 모델 예측
pred = i.predict(X_test_list[j])
# 성능 측정
mse = mean_squared_error(pred, y_test_list[j])
mae = mean_absolute_error(pred, y_test_list[j])
r2 = r2_score(pred, y_test_list[j])
rmse = np.sqrt(mean_squared_error(pred, y_test_list[j]))
# train1, train2는 컬럼만 추가한 데이터 셋
if j < 2:
df.loc[num + j] = [str1[j] + model_name[cnt], mse , mae, r2, rmse]
# train3, train4는 컬럼추가 후 상관계수의 절댓값이 0.1보다 작은것을 제거한 데이터 셋
# 따라서 str2(_상관 계수) 문자열을 추가해 줌
elif j< 4:
df.loc[num + j] = [str1[(j%2)] + str2[0] + model_name[cnt], mse , mae, r2, rmse]
else:
df.loc[num + j] = [str1[(j%2)] + str2[1] + model_name[cnt], mse , mae, r2, rmse]
# 데이터프레임 덮어쓰기 방지
cnt += 1
num += 6
print(df)
흉악한 코드임에도 불구하고 다 본 사람이 있다면, "어떻게 저걸 AutoML이라고 생각하냐 ㅋㅋ"라는 반응을 기대할 수 있다. 하지만 나는 그렇게 생각한 적이 있었다.
AutoML 구현을 향해 99? 그래서 뭐 할 건데?
리서쳐의 입장이 아닌, 엔지니어의 입장에서 AutoML오픈소스를 조금씩 분석 해갈 예정이다. 오픈 소스 코드의 의도와 좋은 구현 방식을 알아내는 것이 목적이다.
'코드읽기 > auto-sklearn' 카테고리의 다른 글
[AutoML] 구현을 향해, AutoSklearnClassifeir.fit(2) - 5편 (0) | 2022.05.14 |
---|---|
[AutoML] 구현을 향해, AutoSklearnClassifier-fit - 4편 (0) | 2022.05.08 |
[AutoML] 구현을 향해, AutoSklearn-parameters - 3편 (0) | 2022.05.05 |
[AutoML] 구현을 향해, sklearn-BaseEstimator? 2편 (0) | 2022.04.30 |