팀플 뿌쎠버리고 싶다 ~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!
너무너무 싫다 ~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!
팀플 때문에 할 일도 밀렸다 ~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!~!
여튼 일단 하자... 일이 안 풀릴 땐 일을 하기...
그와 별개로 이번 주면 머신러닝이 끝난다! 물론 이 책 끝나고도 혼자서 복습하고 다시 공부할 거지만 1회독을 끝낸 게 어디야. 랩실 들어가면 제일 먼저 딥러닝 공부한다는데! 동아리에서도 PyTorch 쓰고 랩실에서도 PyTorch 써서 천-만-다-행.
마지막 Chapter6, 알고리즘 체인과 파이프 라인!
이번 장에서는 데이터 변환 과정과 머신러닝 모델을 쉽게 연결해주는 Pipeline 파이썬 클래스를 설알아보자.
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100],
'gamma': [0.001, 0.01, 0.1, 1, 10, 100]}
grid = GridSearchCV(SVC(), param_grid = param_grid, cv = 5)
grid.fit(X_train_scaled, y_train)
print("최상의 교차 검증 정확도: {:.2f}".format(grid.best_score_))
print("테스트 점수: {:.2f}".format(grid.score(X_test_scaled, y_test))
print("최적의 매개변수: ", grid.best_params_)
즉, 새로운 데이터를 만났을 때 올바로 반영하지 못한다는 단점이 있음. 검증 폴드 데이터의 정보가 모델 구축 과정에 이미 누설되었으니 교차 검증에서 최적의 매개변수를 찾지 못하고 낙관적인 결과가 만들어짐
-> 교차 검증의 분할이 모든 전처리 과정보다 앞서 이루어져야 함
여기서 사용하는 것이 바로 Pipeline
: 여러 처리 단계를 하나의 scikit-learn 추정기 형태로 묶어주는 파이썬 클래스
from sklearn.pipeline import Pipeline
pipe = Pipeline([('scaler', MinMaxScaler()), ('svm', SVC())])
pipe.fit(X_train, y_train)
print("테스트 점수: {:.2f}".format(pipe.score(X_test, y_test)))
파이프 라인을 사용하면 "전처리 + 분류" 과정을 위해 작성해야 할 코드가 줄어듦
그리드 서치에 파이프라인을 사용하는 방식 역시 다른 추정기를 사용할 때와 같음. 다만, 매개변수 그리드를 만들 때와 조금 달라지는 것이 있음.
-> 각 매개변수가 파이프라인의 어떤 단계에 속한 것인지 알려줘야 함.
param_grid = {'svm__C': [0.001, 0.01, 0.1, 1, 10, 100],
'svm__gamma': [0.001, 0.01, 0.1, 1, 10, 100]}
grid = GridSearchCV(pipe, param_grid = param_grid, cv=5)
from sklearn.pipeline import make_pipeline
# 표준적인 방법
pipe_lone = Pipeline([('scaler', MinMaxScaler()), ('svm', SVC())])
#간소화된 방법
pipe_short = make_pipeline(MinMaxScaler(), SVC(C=100))
#cancer 데이터셋에 앞서 만든 파이프라인을 적용함
pipe.fit(cancer.data)
#pca 단계의 두 개 주성분 추출
components = pipe.named_stepsp['pca'].components_
print('components.shape: ', components.shape)