작성
·
300
0
안녕하세요! 스파크의 교차검증 클래스에 관하여 궁금한 점이 몇가지가 있어 질문드립니다!
1. CrossValidator가 교차검증과 GridSearch 하이퍼파라미터 튜닝을 동시에 진행하잖아요? 이 때, 교차검증 시, (분류 문제라고 가정하에) 클래스 분포를 고려하면서 교차검증을 수헹하는 로직으로 되어 있나요?(사이킷런으로 친다면 Stratified Kfold 처럼요!)
2. 강의 속에서 GridSearch가 하이퍼파라미터 튜닝할 때, 시간은 다소 오래 걸리지만 가장 정확하다고 언급하셔서 질문드리는데요! 어디선가 GridSearch처럼 전체 경우의 수를 탐색하는 것 보다 RandomSearch나 Bayesian Optimization과 같이 일부 경우의 수만 탐색하는 경우에 더 최적의 파라미터를 잘 발견하는 경향이 있다고 본 적이 있는데요! 강사님의 그동안 경험적인 근거로 보셨을 때는 어떤 튜닝 방법이 더 최적의 파라미터를 잘 발견하는지 강사님의 사견이 궁금합니다!
답변 2
2
안녕하십니까,
1. CrossValidator가 교차검증과 GridSearch 하이퍼파라미터 튜닝을 동시에 진행하잖아요? 이 때, 교차검증 시, (분류 문제라고 가정하에) 클래스 분포를 고려하면서 교차검증을 수헹하는 로직으로 되어 있나요?(사이킷런으로 친다면 Stratified Kfold 처럼요!)
=>Spark이 좀 아쉬운 부분이 있는데, 그중에 하나가 CrossValidator가 Stratified K fold 방식으로 동작하지 않는 것도 포함됩니다.
2. 강의 속에서 GridSearch가 하이퍼파라미터 튜닝할 때, 시간은 다소 오래 걸리지만 가장 정확하다고 언급하셔서 질문드리는데요! 어디선가 GridSearch처럼 전체 경우의 수를 탐색하는 것 보다 RandomSearch나 Bayesian Optimization과 같이 일부 경우의 수만 탐색하는 경우에 더 최적의 파라미터를 잘 발견하는 경향이 있다고 본 적이 있는데요! 강사님의 그동안 경험적인 근거로 보셨을 때는 어떤 튜닝 방법이 더 최적의 파라미터를 잘 발견하는지 강사님의 사견이 궁금합니다!
=> 하이퍼 파라미터가 별로 없고, 최적화 시간이 충분하면 GridSearchCV가 좋을 수 밖에 없습니다. 가능한 모든 하이퍼 파라미터 결합을 다 수행하면서 찾으면 되기 때문입니다.
그런데 하이퍼 파라미터가 늘어나면 GridSearchCV로는 무리입니다. 때문에 베이지안 최적화 기법을 적용하는 것이 좀 더 나은 선택일 수 있습니다.
0
안녕하세요, 강의자료 실습코드 중 Evaluator 사용과 관련하여 질문이 있습니다.
실습코드 spark_cross_validation_hyperparameter_tuning.ipynb 파일에 보면 CrossValidator나 TrainValidationSplit 객체 생성 전 각 객체에 인자로 넣을 evaluator_accuracy(MulticlassClassificationEvaluator 객체)를 생성하는데 정확도 측정 시 해당 객체를 다시 생성해 할당하는데, 특별한 이유가 있나요?
예를 들면, CrossValidator에서 Estimator 대신 Pipeline 적용 코드를 보면 cmd 24 18라인에서 evaluator_accuracy_01에 MulticlassClassificationEvaluator 객체를 생성해서 할당하는데 cmd 25에서 정확도 출력 전 evaluator_accuracy라는 변수에 새로운 MulticlassClassificationEvaluator 객체를 생성해 evaluate()을 수행합니다. 그냥 위에서 생성한 evaluator_accuracy_01에서 evaluate(predictions)를 수행하면 안되나요?
답변 감사합니다! Stratified K-fold로 동작하지 않는 방식도 포함되어 있다고 하셨는데, 그러면 Stratified K-fold로 동작한 것인지 아닌지에 대해서는 사용자가 컨트롤 할 수 있나요!?