• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    해결됨

Decision Tree parameter 관련

20.09.23 21:29 작성 조회수 262

0

꼭 Decision Tree 기법 말고도 다른 머신러닝 기법들을 사용할때

max depth 나 min samples split 과 같은 parameter들은

분석자의 경험에 의해서 정하는 것인가요?

강의에서의 예제와 같이 max depth들을 예를들어 6,8,10,12,14 등으로 할때

위 6,810,12,14 과 같은 파라미터들은 어떤 기준으로 해당 수치를 정하는 것인가요?

답변 3

·

답변을 작성해보세요.

0

안녕하십니까,

네, 보팅 방식은 서로 다른 알고리즘의 결정 결과를 voting을 통해서 최종 결정합니다.

랜덤 포레스트와 GBM은 Decision Tree만을 weak learner로 사용합니다. 랜덤 포레스트는 그래서 트리가 가득찬 포레스트 입니다 ^^;;

GBM 역시 다른 알고리즘을 weak learner로 사용하지 않고 Decision Tree를 적용합니다.

행복한 추석 되십시요.

0

nealzs님의 프로필

nealzs

질문자

2020.09.29

아 답변갑사합니다!!!

궁금한게 또 있는데 앙상블 기법을 이용할때 여러개의 weak learner 를 이용한다고 설명해주셨는데,

제가 이해한게 맞나 확인차 질문남깁니다.

보팅 방식이면 weak learner 들이 서로 다른 알고리즘이여도 상관이 없는거고

랜덤 포레스트와 GBM은 weak learner를 보통 decision tree를 이용하는 것인가요?

즉 voting 방식은 다양한 알고리즘으로 학습이 가능한 반면

boosting 과 bagging은 decision tree에 기반되어 있는 것인가요? (classifiaction 내에서)

예를들어 GBM의 weak learner를 k-nn으로 사용할 수 있는 것인지 궁금합니다.

아니면 현재 아래와 같은 코드에서 GradientBoostingClassifier 패키지의 default estimator가 decision tree 인가요?

파라미터를 정할때 보팅과는 다르게 estimator를 정하는 것이 없어 갑자기 궁금했습니다. 

검색도 열심히 해보면서 질문남기고 있습니다!!!!!

start_time = time.time()

gb_clf = GradientBoostingClassifier(random_state = 0)

gb_clf.fit(X_train, y_train)

gb_pred = gb_clf.predict(X_test)

gb_accuracy = accuracy_score(y_test, gb_pred)

print("GBM accuracy: {0:.4f}".format(gb_accuracy))

print("GBM consumed time: {0:.1f}sec".format(time.time() - start_time))

0

안녕하십니까,

경험적인 부분, 그리고 파라미터를 무작위 결합하여 적용하는 부분이 모두 다 있습니다.  파라미터를 조절하면서 여러번 돌리다 보면 감각적으로 어떤 파라미터를 더 집중해서 튜닝해봐야겠다라는 느낌이 듭니다.

Decision Tree같은 경우에는 무작위로 파라미터를 결합하면서 반복하다보면 어느 정도 최적화가 가능합니다. 하지만 이게 Boosting 계열은 좀 힘들수 있습니다. Decision Tree나 선형 계열(Logistic Regression, SVM등)은 하이퍼 파라미터가 그렇게 많지 않고 학습 시간도 오래 걸리지 않기 때문에 어느정도 무작위로 파라미터를 결합한 뒤 반복 테스트 해서 어느정도 최적화 할 수 있습니다. 

그런데 xgboost, lightgbm 같은 경우는 하이퍼 파라미터가 상대적으로 많습니다. 가령 Decision Tree가 3개 정도만 집중해서 튜닝한다면 lightgbm은  8개 정도 집중해서 튜닝해야 합니다. 더욱이 학습 시간도 상대적으로 오래 걸립니다. 무작위로 하이퍼 파라미터를 선택했다간 최적화에 너무 오랜 시간이 걸립니다.

강의에서는 소개 드리진 않았지만 보통 xgboost, lightgbm같은 경우에는 bayesian optimization 방법을 잘 사용합니다.  bayesian optimization의 상세한 방법을 소개하기에는 이 글에서 여의치 않을 것 같습니다. 자세한 설명은 https://research.sualab.com/introduction/practice/2019/02/19/bayesian-optimization-overview-1.html (그런데 내용이 좀 어렵습니다).

요약 드리자면 보통 Decision Tree같은 경우는 무작위 결합하여 반복하면서 최적화가 가능할 수 있지만, 부스팅 계열은 이 방법이 어렵습니다.  때문에 bayesian optimization을 구현한 파이썬 패키지를 이용해서 보통 최적화를 수행합니다