← 학습 카테고리

Learn

Spark

84개 모듈 · 현재 66번째

Spark 모듈 66/84 spark-learn-66

CrossValidator와 TrainValidationSplit — 파라미터 조합을 자동으로 평가하기

Spark MLlib 모델 영속화 및 CrossValidator/TrainValidationSplit 공식 문서 종합 (웹 리서치, 2026) — Apache Spark 공식 문서(ml-pipeline.html, ml-tuning.html) Apache Spark 공식 문서 ML Tuning — model selection and hyperparameter tuning

이 모듈을 다 읽으면

  • CrossValidator와 TrainValidationSplit이 데이터를 나누는 방식의 차이를 설명할 수 있다
  • parallelism 설정이 이 튜닝 과정에 어떤 영향을 주는지 설명할 수 있다

spark-learn-07에서 다룬 '변환된 학습 데이터를 캐싱해두는 이유'가 실제로 쓰이는 대표적인 상황인, 여러 하이퍼파라미터 조합을 자동으로 평가해 최적을 찾는 CrossValidator와 TrainValidationSplit을 정리한다.

CrossValidator — k겹 교차검증으로 매 조합을 k번 평가

CrossValidator는 데이터셋을 k개의 폴드(fold)로 나눠, 각 폴드를 한 번씩 테스트셋으로 쓰고 나머지를 학습셋으로 쓰는 k개의 (학습, 테스트) 데이터셋 쌍을 만든다 — 예를 들어 k=3이면 매번 데이터의 2/3를 학습에, 1/3을 테스트에 쓰는 조합을 3번 만든다. ParamGridBuilder로 만든 파라미터 조합 하나하나에 대해 이 k개의 (학습,테스트) 쌍 전부로 평가한 뒤 평균을 내므로, 특정 폴드 하나에 우연히 잘 맞는 조합을 고르는 실수를 줄여준다.

핵심 포인트

  • CrossValidator는 데이터를 k개 폴드로 나눠 k개의 (학습,테스트) 쌍을 만들고, 파라미터 조합마다 k번 평가해 평균을 냄
  • 특정 폴드 하나에 우연히 잘 맞는 조합을 고르는 과적합 위험을 줄여줌 — 대신 조합당 k배의 계산 비용

TrainValidationSplit — 한 번만 나눠 더 저렴하게

TrainValidationSplit은 CrossValidator처럼 k번 반복하는 대신, trainRatio 파라미터(예: 0.75)로 데이터를 학습·테스트 두 부분으로 딱 한 번만 나눠 각 파라미터 조합을 한 번씩만 평가한다 — CrossValidator보다 계산 비용이 훨씬 저렴하지만, 학습 데이터셋이 충분히 크지 않으면 결과의 신뢰도가 CrossValidator만큼 견고하지 않다는 트레이드오프가 있다.

핵심 포인트

  • TrainValidationSplit은 trainRatio로 데이터를 한 번만 학습/테스트로 나눠 각 파라미터 조합을 한 번만 평가 — CrossValidator보다 저렴하지만 데이터가 충분히 크지 않으면 결과 신뢰도가 낮음

parallelism — 여러 파라미터 조합을 동시에 평가

CrossValidator나 TrainValidationSplit을 실행하기 전에 parallelism을 2 이상으로 설정하면 파라미터 조합 평가를 병렬로 처리할 수 있다 — 다만 이 값은 클러스터 자원을 넘어서지 않으면서 병렬성을 최대화하도록 신중히 골라야 하며, 일반적으로 대부분의 클러스터에서는 10 이하 값이면 충분하다고 공식 문서가 안내한다.

핵심 포인트

  • parallelism(2 이상)으로 파라미터 조합 평가를 병렬 처리 — 클러스터 자원을 넘지 않는 선에서 신중히 설정, 일반적으로 10 이하면 충분