9주차 ML 알고리즘 체인과 파이프라인
ml6 알고리즘 체인과 파이프라인
Pipline 파이썬 클래스를 사용하면 데이터 변환 과정과 머신러닝 모델을 쉽게 연결할 수 있습니다.
특히 GridSearchCV를 함께 사용하면 매개변수 탐색 또한 동시에 수행할 수 있습니다.
6.1 데이터 전처리와 매개변수 선택
위의 사진과 같이 훈련 데이터 전체에 대해서 scaler fit을 진행하고 검증 폴드 데이터로 예측을 하면 낙관적인 결과가 나올 수 있습니다.
따라서 아래의 사진과 같이 훈련 폴드 데이터와 검증 폴드 데이터를 나누고 훈련 폴드 데이터로만 scaler fit을 진행해야 합니다.
이를 Pipeline을 통해 보다 쉽게 할 수 있습니다.
6.2 파이프라인 구축하기
각 단계를 합쳐 리스트 형태로 전달하여 파이프 라인의 객체를 만듭니다.
각 단계는 추정기 객체와 이름으로 구성된 튜플입니다.
파이프라인의 강점은 cross_val_score나 GridSearchCV에 하나의 추정기처럼 사용할 수 있다는 것입니다.
6.3 그리드 서치에 파이프라인 적용하기
그리드 서치에 파이프라인을 사용하는 방식도 다른 것들과 동일하지만, 매개변수 그리드를 만들 때 조금 다릅니다.
각 매개변수가 어떤 단계에 속한 것인지 말해줘야 합니다.
만약 "svm"이라는 이름을 가진 단계의 "C" 매개변수를 탐색하고자 한다면, 딕셔너리의 키를 "svm__C"의 형태로 만들어야 합니다.
6.4 파이프라인 인터페이스
파이프라인은 특성 추출, 특성 선택, 스케일 변경, 분류/회귀/군집 등 총 네 단계로 구성될 수 있습니다.
그리고 각 단계에서 이전 단계 transform의 출력을 입력으로 받아 fit과 transform 메서드를 차례로 호출하고 마지막 단계에서는 fit 메서드만 호출합니다.
위에서 각 파이프 라인의 단계에는 이름을 부여해야 했는데, make_pipeline 함수를 사용하면 각 단계의 이름이파이썬 클래스의 이름으로 부여됩니다.
일반적인 단계의 이름은 파이썬 클래스 이름의 소문자이고, 여러 단계에서 사용할 경우 뒤에 숫자가 추가로 붙습니다.
단계 이름을 키로 가진 딕셔너리인 named_steps 속성을 사용하면 각 단계에도 쉽게 접근할 수 있습니다.
6.6 모델 선택을 위한 그리드 서치
파이프라인을 구성하는 단계도 탐색 대상으로 삼을 수 있습니다.(Ex. 어떤 Scaler를 사용할 것인지)
하지만 이럴 경우 탐색 범위가 더 커지기 때문에 주의하여 선택해야 합니다.
대규모 그리드 서칭을 할 때는 종종 동일한 단계가 여러 번 수행되기 때문에 파이프라인의 memory 매개변수를 사용하여 계산 결과를 캐싱하면 이를 해결할 수 있습니다.
대신 오랜 시간이 걸리는 변환이어야 속도를 높이는 효과를 낼 수 있고, n_jobs 매개변수가 캐싱을 방해할 수도 있습니다.
하지만 dask-ml 라이브러리에서 제공하는 GridSearchCV를 사용하면 이런 단점도 해결할 수 있다고 합니다.