K 개발자
머신러닝 프로젝트 주요 단계 본문
큰 그림 보기
문제 정의
- 지도 학습, 비지도 학습, 강화 학습 중 무엇일까?
- 분류나 회귀인가 아니면 다른 어떤 작업인가?
- 배치 학습과 온라인 학습 중 어느 것을 사용해야 하나?
성능 측정 지표 선택
RMSE와 MAE 모두 예측값의 벡터와 타깃값의 벡터 사이의 거리를 재는 방법
오차가 커질수록 값이 커진다.
평균 제곱근 오차root mean square error(RMSE)
회귀 문제의 전형적인 성능 지표
$RMSE(X,h)=\sqrt{\frac{1}{m}\sum_{i=1}^{m} (h(x^{(i)})-y^{(i)})^{2}}$
평균 절대 오차mean absolute error(MAE)
이상치가 많을 때
$MAE(X,h)=\frac{1}{m}\sum_{i=1}^{m}\left | h(x^{(i)})-y^{(i)} \right |$
가정 검사
지금까지 만든 가정을 나열하고 검사해보는 것이 좋다.
e.g. 시스템이 출력한 값이 다음 머신러닝 시스템의 입력으로 들어가게 되는데 이 값이 있는 그대로 사용될 거라 가정했다. 하지만 하위 시스템에서 이 값을 카테고리로 바꾸고 가격 대신 카테고리를 사용한다면...?
데이터 가져오기
데이터 스누핑data snooping 편향 : 테스트 세트로 일반화 오차를 추정하면 매우 낙관적인 추정이 되며 시스템을 론칭했을 때 기대한 성능이 나오지 않는다.
계층적 샘플링stratified sampling : 테스트 세트가 전체 데이터셋에 있는 계층strata이라는 동질의 그룹을 잘 대표해야 한다.
데이터 이해를 위한 탐색과 시각화
표준 상관계수standard correlation coefficient(피어슨Pearson의 r)
상관관계의 범위는 -1부터 1
1에 가까우면 강한 양의 상관관계를 가진다는 뜻
계수가 -1에 가까우면 강한 음의 상관관계
계수가 0에 가까우면 선형적인 상관관계가 없다.
특성 조합으로 실험
머신러닝 알고리즘용 데이터를 준비하기 전에 마지막으로 해볼 수 있는 것은 여러 특성의 조합을 시도
머신러닝 알고리즘을 위한 데이터 준비
이 작업을 수동으로 하는 대신 함수를 만들어 자동화해야 하는 이유
- 어떤 데이터셋에 대해서도 데이터 변환을 손쉽게 반복할 수 있다. (e.g. 다음번에 새로운 데이터셋을 사용할 때)
- 향후 프로젝트에 사용할 수 있는 변환 라이브러리를 점진적으로 구축하게 된다.
- 실제 시스템에서 알고리즘에 새 데이터를 주입하기 전에 변환시키는 데 이 함수를 사용할 수 있다.
- 여러 가지 데이터 변환을 쉽게 시도해볼 수 있고 어떤 조합이 가장 좋은지 확인하는 데 편리하다.
데이터 정제
특성에 값이 없는 경우
- 해당 구역을 제거
- 전체 특성을 삭제
- 어떤 값으로 채운다. (0, 평균, 중간값 등)
텍스트와 범주형 특성 다루기
원-핫 인코딩one-hot encoding : 한 특성만 1이고(핫) 나머지는 0
특성 스케일링feature scaling
모든 특성의 범위를 같도록 만들어주는 방법
min-max 스케일링(정규화normalization)
0~1 범위에 들도록 값을 이동하고 스케일을 조정
표준화standardization
평균을 뺀 후 표준편차로 나누어 결과 분포의 분산이 1이 되도록 한다.
모델 선택과 훈련
k-겹 교차 검증k-fold cross-validation
훈련 세트를 폴드fold라 불리는 n개의 서브셋으로 무작위로 분할
결정 트리 모델을 n번 훈련하고 평가하는데, 매번 다른 폴드를 선택해 평가에 사용하고 나머지 n-1개 폴드는 훈련에 사용
n개의 평가 점수가 담긴 배열이 결과
모델 세부 튜닝
그리드 탐색
탐색하고자 하는 하이퍼파라미터와 시도해볼 값을 지정하기만 하면 가능한 모든 하이퍼파라미터 조합에 대해 교차 검증을 사용해 평가
랜덤 탐색
각 반복마다 하이퍼파라미터에 임의의 수를 대입하여 지정한 횟수만큼 평가 (하이퍼파라미터 탐색 공간이 클 때)
주요 장점
- 랜덤 탐색을 1,000회 반복하도록 실행하면 하이퍼파라미터마다 각기 다른 1,000개의 값을 탐색 (그리드 탐색에서는 하이퍼파라미터마다 몇 개의 값만 탐색)
- 단순히 반복 횟수를 조절하는 것만으로 하이퍼파라미터 탐색에 투입할 컴퓨팅 자원을 제어
앙상블 방법
최상의 모델을 연결
론칭, 모니터링, 시스템 유지 보수
론칭 직전 단계
(학습한 것, 한 일과 하지 않은 일, 수립한 가정, 시스템 제한 사항 등을 강조하면서) 솔루션과 문서를 출시하고, 깔끔한 도표와 기억하기 쉬운 제목으로 발표 자료를 만든다.
배포
제품 시스템에 적용하기 위한 준비(e.g. 코드를 정리하고 문서와 테스트 케이스를 작성하는 등)를 한 다음 모델을 상용 환경에 배포
모니터링
일정 간격으로 시스템의 실시간 성능을 체크하고 성능이 떨어졌을 때 알람을 통지
- 하위 시스템의 지표로 모델 성능을 추정
- 평가자를 사용
데이터가 계속 변화하면 데이터셋을 업데이트하고 모델을 정기적으로 다시 훈련
전체 과정에서 가능한 많은 것을 자동화
자동화할 수 있는 일부 작업
- 정기적으로 새로운 데이터를 수집하고 레이블을 단다. (e.g. 조사원을 사용해)
- 모델을 훈련하고 하이퍼파라미터를 자동으로 세부 튜닝하는 스크립트를 작성한다. 작업에 따라 매일 또는 매주 자동으로 이 스크립트를 실행
- 업데이트된 테스트 세트에서 새로운 모델과 이전 모델을 평가하는 스크립트를 하나 더 작성한다. 성능이 감소하지 않으면 새로운 모델을 제품에 배포 (성능이 나쁘다면 왜 그런지 조사)
모델의 입력 데이터 품질을 평가
모델의 입력을 모니터링 (e.g. 점점 더 많은 입력에서 한 특성이 누락되거나 평균이나 표준편차가 훈련 세트와 멀어지거나 범주형 특성이 새로운 카테고리 값을 포함하는 경우 알람을 울릴 수 있다.)
백업backup
새로운 모델이 어떤 이유로 올바르지 않게 작동하는 경우 이전 모델로 빠르게 롤백roll back하기 위한 절차와 도구를 준비해야 한다.
비슷하게 새로운 버전의 데이터셋이 오염되었다면 롤백할 수 있도록 모든 버전의 데이터셋을 백업
실습코드링크 : 캘리포니아의 구역의 중간 주택 가격 예측