Estimator, Transformer, Predictor
- 추정기(estimator): 데이터셋을 기반으로 모델 파라미터들을 추정하는 객체를 추정기라고 한다.(예를 들자면 imputer), 추정 자체는 fit() method에 의해서 수행되고 하나의 데이터셋을 매개변수로 전달받는다.(지도 학습의 경우 label을 담고 있는 데이터셋을 추가적인 매개변수로 전달).
- 변환기(transformer): (imputer 같이)데이터셋을 변환하는 추정기를 변환기라고 한다. 변환은 transform() method가 수행한다. 그리고 변환된 데이터셋을 반환한다.
- 예측기(predictor): 일부 추정기는 주어진 새로운 데이터셋에 대해 예측값을 생성할 수 있다. 앞에서 사용했던 LinearRegression도 예측기이다. 예측기의 predict() method는 새로운 데이터셋을 받아 예측값을 반환한다. 그리고 score() method는 예측값에 대한 평가지표를 반환한다.
텍스트와 범주형 특성 다루기
- ordinerencoder를 통해 범주형 데이터를 숫자형 데이터로 바꿔준다.
- 이 표현 방식의 문제점
- "특성의 값이 비슷할수록 두 개의 샘플이 비슷하다"가 성립할 때 모델학습이 쉬워짐
- 위의 문제점의 대안으로 One-hot encoding을 사용할 수 있다.
- sparse matrix 형태로 저장된다.
나만의 변환기(Custom Transformer) 만들기
- fit()
- transform()
- 아래의 transformer는 rooms_per_household, population_per_household 두 개의 새로운 특성을 데이터셋에 추가한다.
- 위의 return 값은 numpy.ndarray 이므로 다시 데이터프레임으로 변환
- 제일 우측 2개의 칼럼을 보면 새로운 feature 두개가 추가되었다.
- 특성 스케일링
- min-max scaling:0과 1사이의 값이 되도록 조정
- 표준화(standardization): 평균이 0 분산이 1이 되도록 만들어 준 것
변환 파이프라인(Transformation Pipeline)
- 여러개의 변환이 순차적으로 이뤄저야 할 경우 pipeline을 쓰면 편하다.
- 각 열마다 파이프라인을 적용할 수도있다. 예를들어 수치형 특성들과 범주형 특성들에 대해 별도의 변환이 필요하다면 아래와 같이 ColumnTransformer를 사용하면 된다.
모델 훈련(Train a Model)
- LinearRegression 사용
- 사이킷런으로 단 세줄이면 충분!
- 모델의 파라미터 값 확인
- 각 feature별 계수값 확인
- 계수값의 절대값을 보고 해당 feature의 중요도를 함부로 넘겨짚는 판단은 위험하다.
- 몇 개의 샘플에 대해 데이터변환 및 예측을 해보자
- 실제 label 값
- 전체 훈련 데이터셋에 대한 RMSE 측정해보기
- 대략 7만불 정도가 에러가 나고 있는 상황
- 과소적합이 일어나는 이유
- 특성들(feature)이 충분한 정보를 제공하지 못한다.
- 모델이 충분히 강력하지 못함
- 강력한 비선형 모델인 DecisionTreeRegressor를 사용해보기
...? 이게 맞나?
- 왜냐면 학습한 데이터로 테스트를 봣으니 당연히 다 암기하고 있는게 당연
- 테스트 데이터 셋을 이용한 검증
- 훈련 데이터셋의 일부를 검증데이터(validation data)셋으로 분리해서 검증
- k-겹 교차 검증(k-fold-cross-validation)
- 교차 검증을 이용해 선형 회귀 모델에 대해서도 평가해보기
- 삼트! RandomForestRegressor 사용해보기
- 테스트 데이터셋으로 검증해보기
모델 세부 튜닝(Fine-Tune Your Model)
- 모델의 종류를 선택한 후에 모델을 세부 튜닝하는 것이 필요하다. 모델 학습을 위한 최적의 하이퍼파라미터를 찾는 과정이라고 할 수 있다.
- 그리드 탐색(Grid Search)
- 수동으로 하이퍼파라미터 조합을 시도하는 대신 GridSearchCV를 사용하는 것이 좋다.
- 가장 좋았던 조합을 찾고 싶다면?
- 랜덤 탐색(Randomized Search)
- 하이퍼파라미터 조합의 수가 큰 경우에 유리. 지정한 횟수만큼만 평가.
- 특성 중요도, 에러 분석
테스트 데이터셋으로 최종 평가하기
런칭, 모니터링, 시스템 유지 보수
- 상용환경에 배포하기 위해서 데이터 전처리와 모델의 예측이 포함된 파이프라인을 만들어 저장하는 것이 좋다.
런칭 후 시스템 모니터링
- 시간이 지나면 모델이 낙후되면서 성능이 저하
- 자동모니터링: 추천시스템의 경우, 추천된 상품의 판매량이 줄어드는지?
- 수동모니터링: 이미지 분류의 경우, 분류된 이미지들 중 일부를 전문가에게 검토시킴
- 결과가 나빠진 경우
- 데이터 입력의 품질이 나빠졋는지? 센서고장?
- 트렌드의 변화? 계절적 요인?
유지보수
- 정기적으로 새로운 데이터 수집(레이블)
- 새로운 데이터를 테스트 데이터로, 현재의 테스트 데이터는 학습데이터로 편입
- 다시 학습후, 새로운 테스트 데이터에 기반해 현재 모델과 새 모델을 평가, 비교
전체 프로세스에 고르게 시간을 배분해야 한다!!
'프로그래머스 AI 데브코스 5기 > Machine Learning' 카테고리의 다른 글
Linear Algebra, Matrix Calculus-2(이 부분은 복습 꼭 하기) (0) | 2023.04.19 |
---|---|
Machine Learning 기초 - Linear Algebra, Matrix Calculus (0) | 2023.04.19 |
End-to-End 머신러닝 프로젝트 (0) | 2023.04.18 |
기계학습 III (0) | 2023.04.16 |
기계학습 II (0) | 2023.04.15 |