1. 큰 그림 보기
▶ 문제 정의 하기
비즈니스의 목적 파악: 목적에 따라 문제의 구성, 알고리즘의 선택, 평가 지표, 튜닝 정도가 달라지기 때문이다.
학습 방법 정의: 지도 학습, 비지도 학습, 강화 학습 중 어떤 방법을 선택할 것인가? 지도 학습이라면 분류인가 회귀인가?
온라인 학습과 배치 학습 중 무엇이 더 효율적인가?
▶ 성능 측정 지표 선택
분류의 경우 정확도, 회귀의 경우 RMSE, MAE 등 오차 계산법이 있다. 이 중 올바른 것을 선택한다.
▶ 가정 검사
문제를 정의하고 성능지표를 선택하는 등 세운 계획에 대해 검토하는 과정이다.
2. 데이터 가져오기 및 작업 환경 구축
▶ 작업환경 구축
분석 환경에 필요한 프로그램과 패키지를 다운로드하고 필요하다면 가상 환경을 준비한다.
▶ 데이터 구조 확인하기
데이터의 행, 열의 수, 특성들의 데이터 타입을 확인한다. 숫자형 데이터의 경우 통계 값을 조회하여 간략하게 파악한다.
▶ 테스트 세트 만들기
전체 데이터에서 일부 데이터를 떼어내어 테스트 세트를 만든다. 1장에서 설명한 검증을 위한 방법이다.
데이터 세트에서 약 20%(데이터가 많다면 더 적은 양으로)를 테스트 세트로 지정한다.
1. 난수(random)를 이용한 데스트 세트 만들기
실행시마다 테스트 세트가 달라지는 단점이 있다. 난수 초깃값을 입력하면 문제는 해결되지만 데이터가 추가되면 같은 문제가 발생
2. hash값을 기준으로 데스트 세트 만들기
hash는 특정 값의 식별자(id)이다. 데이터의 값마다 고유한 hash(숫자)를 갖는다. 행마다 특정 열의 값을 식별자로 사용한다면 행마다 고유한 hash값을 가질 수 있다. hash는 숫자 값이기 때문에 랜덤 한 방법으로 나눌 수 있다.(ex. 5의 배수만 테스트로 분류) hash값은 변하지 않고 고유 식별자가 있다면 고유한 hash값을 갖기 때문에 일정한 비율로 테스트 세트를 만들 수 있으며 항상 똑같은 테스트 셋을 만들 수 있다.
3. sklean 랜덤 함수 이용하기(train_test_split)
모듈 sklean에는 테스트 세트를 만드는 함수를 제공한다. 초기 난수를 지정하여 인덱스를 기반으로 동일하게 나누는 방법도 제공한다.
4. 계층적 샘플링
데이터가 작을 때 랜덤으로 데스트 세트를 나누면 샘플링 편향이 나타날 수 있다. 예를 들어 인구의 성비가 남 52%, 여 48%라면 설문조사에서 남녀 비율 또한 5.2:4.8을 유지해야 한다. 따라서 카테고리별 비율을 유지한 상태로 샘플링하는 방법을 계층적 샘플링이라 한다.
3. 데이터 이해를 위한 탐색 및 시각화
데이터를 깊게 이해하는 과정이다. 빠른 탐색을 위해 샘플링을 하는 경우도 있다. 테스트 세트를 탐색에 이용하게 되면 테스트 세트에 과대 적합인 데이터 스누핑이 일어날 수 있기 때문에 훈련 세트로만 탐색한다.
▶ 지리적 시각화
지리에 대한 정보(위도, 경도)가 있는 데이터라면 위도, 경도를 기준으로 데이터를 살펴볼 필요가 있다. 또한 군집 알고리즘을 이용하여 군집에 대한 파악 및 군집 중심으로부터 거리 등을 새로운 특성에 사용할 수 있다.
▶ 상관관계 조사
숫자 타입의 데이터들 사이의 관계를 알아보는 방법이다. 그래프를 통해 확인할 수 있고 상관계수를 구해주는 함수를 통해 정도를 파악할 수 있다.
▶ 특성 조합으로 살펴보기
여러 가지 특성을 통해 만들어낸 새로운 특성을 사용해 보는 방법이다. (ex. 야구선수의 안타수를 타수로 나눈 타율)
많은 시도를 통해 흥미로운 특성을 발견할 수 도 있다.
4. 데이터 준비
▶ 데이터 정제
누락된 데이터 처리: 1. None을 갖는 행 또는 열을 삭제한다. 2. 임의의 값으로 채운다.
숫자형 데이터를 범주형 데이터로 변경한다. (필요한 경우, ex. 수입에 대한 수치 데이터를 낮음, 중간, 높음으로 변경)
▶ 텍스트와 범주형 다루기
One-Hot 인코딩: 범주형 데이터 항목별 열을 만들어 해당 열에만 1을 갖고 나머지 열은 0을 갖게 변경하는 방법이다.
4개의 범주가 있다고 가정하자. (좋다, 보통, 나쁘다, 관심 없다.)
텍스트로 모델에 넣을 수 없기 때문에 다음과 같이 변경한다.
좋다 = [1,0,0,0], 보통 = [0,1,0,0], 나쁘다 = [0,0,1,0], 관심 없다. = [0,0,0,1]
▶ 나만의 변환기 만들기
데이터를 변형하고 특성들을 조합하는 과정에서 내가 원하는 방식으로 변경하는 방법을 저장해 놓는 것이 필요하다.
내가 만든 모델과 잘 작동하는 방식이 되기도 하며 재활용성이 좋기 때문이다.
하이퍼 파라미터를 적용하는 과정을 자동화하면 많은 시도를 빠른 시간에 할 수 있다.
▶ 특성 스케일링
min-max 스케일링(정규화): 숫자형 데이터의 최솟값=0, 최댓값은=1이 되도록 하는 방법이다.
$$Xt = (X-Xmin)/(Xmax-Xmin)$$
표준화: 특성의 값이 -1~1의 값을 갖는 정규분포로 만든다.
$$Xt = (X-Xmean)/\sigma $$
5. 모델 선택과 훈련
앞서 결정한 훈련 방법에 안에서 여러 모델에 대한 훈련과 성능지표를 통한 검증으로 평가한다.
여러 가지 모델에 대하여 하이퍼 파라미터를 조정해가며 여러 가지 시도를 해야 한다. 가능성 있는 모델을 추린다.
▶ 교차 검증
마지막 모델이 선택되기 전까지 테스트 세트는 사용하지 않는다. 훈련 세트 중 일부를 이용한 교차검증을 진행한다.
훈련 세트를 다시 훈련과 검증 세츠로 나누어 훈련하고 평가한다. 훈련 세트를 10개로 나누어 1개씩 테스트 세트로 이용하는 방법 등이 있다.
▶ 앙상블 학습
여러 다른 모델을 함께 이용하여 하나의 모델처럼 사용하는 방법이다.
6. 모델 세부 튜닝
▶ 그리드 탐색: 수동으로 하이터 파라미터를 조정하는 방법이다 특성이 적을 경우 사용 가능하다.
▶ 랜덤 선택: 그리드 방법과 같은 방법이지만 하이퍼 파라미터에 임의의 값을 넣는다. 탐색 횟수를 조정할 수 있다. 특성이 많은 때 유리
▶ 앙상블 방법: 여러 모델을 연결하는 방법
테스트 세트로 평가 및 론칭
테스트 세트로 평가 후 론칭을 준비한다. 테스트 세트에서의 오차를 고치려 튜닝하면 안 된다. 새로운 데이터에 일반화하기 어렵기 때문이다.
'python > 핸즈온 머신러닝' 카테고리의 다른 글
[핸즈온 머신러닝] 12장. 텐서플로우를 사용한 사용자 정의 모델과 훈련 (0) | 2021.03.31 |
---|---|
[핸즈온 머신러닝] 11장. 심층 신경망 훈련하기 (0) | 2021.03.28 |
[핸즈온 머신러닝] 3장. 분류 (0) | 2021.01.31 |
[핸즈온 머신러닝] 1장. 한 눈에 보는 머신러닝 (0) | 2021.01.21 |
댓글