2.4 데이터 이해를 위한 탐색과 시각화
2.4.1 지리적 데이터 시각화
■ 지리정보 (경도와 위도)를 통해 데이터 시각화
- pandas.DataFrame.plot(kind, x, y)
• kind: plot의 종류 ('line', 'bar', 'scatter' ...)
• x: x축
• y: y축
- 캘리포니아의 주택가격이 지역(바다와 인접), 인구 밀도에 관련이 크다는 것을 확인할 수 있다.
2.4.2 상관관계 조사
■ 표준 상관계수, standard correlation coefficient
- 피어슨의 r
- pandas.DataFrame.corr(): 각 컬럼간의 상관계수를 계산해준다.
- 상관관계의 범위: -1 ~ 1
• 1에 가까울수록 양의 상관관계를 가진다. (비례관계)
• -1에 가까울수록 음의 상관관계를 가진다. (반비례관계)
•0에 가까울수록 선형적인 관계가 없음.
※ 선형적인 관계만 측정한다.
2.4.3 특성 조합으로 실험
■ 여러 특성의 조합
- 특정 구역의 방 개수, 가구수 등의 특성 조합 생성
2.5 머신러닝 알고리즘을 위한 데이터 준비
2.5.1 데이터 정제
■ 누락된 특성 문제
- 해당 구역 제거
• pandas.DataFrame.dropna(): 누락된 값을 삭제한다.
- 전체 특성 삭제
• pandas.DataFrame.drop(): 행이나 열에서 해당 레이블을 삭제한다.
- 특정한 값으로 채우기 (0, 평균, 중간값 등)
• pandas.DataFrame.fillna(): null 값에 특정 메소드를 통해서 값을 채워준다.
- sklearn.Imputer.SimpleImputer(): 누락된 값을 다룰 수 있도록 하는 객체
■ scikit-learn api 구성
- 추정기, estimator
• 데이터 셋을 기반으로 일련의 모델 파라미터들을 추정하는 객체
• fit() 메서드에 의해 수행
• SimpleImputer 객체는 데이터셋의 값을 통해서 median을 구한다.
- 변환기, transformer
• 데이터셋을 변환하는 추정기
• transform() 메서드에 의해 수행
• median 값으로 학습된 SimpleImputer를 통해서 데이터 셋에 적용한다.
- 예측기, predictor
• 주어진 데이터 셋에 대한 예측을 만드는 추정기
• LinearRegression 모델
• predict(), score()
2.5.2 텍스트와 범주형 특성 다루기
■ 텍스트 특성 -> 숫자 특성 변환
- 텍스트 특성 ocean_proximity를 숫자형으로 변환해준다.
- 해당 특성의 각 카테고리를 숫자와 매핑해주고 해당 카테고리 번호로 데이터를 변환해준다.
■ 원-핫 인코딩, one-hot encoding
- 카테고리 변환 시 카테고리 번호가 데이터간의 차이로 인식되는 문제가 발생 가능하다.
- 원-핫 인코딩으로 한 특성의 카테고리가 1인 경우 나머지가 모두 0이 되도록하여 서로간의 차이로 인식되는 문제를 해결한다.
- sklearn.preprocessing.OneHotEncoder(): one hot encoding하는 객체 생성
• fit_transform(X): X에 인코더를 적용하고 X의 값을 변환시킨다
2.5.3 나만의 변환기
■ 변환기 생성하여서 scikit-learn과 연동하기
- fit(), transform(), fit_transform() 메서드를 구현한 파이썬 클래스 생성
- TransformerMixin 상속시 fit_transform() 자동 생성
- BaseEstimator 상속시 하이퍼파라미터 튜닝을 위한 두 메서드 get_params(), set_params() 자동 생성
2.5.4 특성 스케일링
■ 특성 스케일링, feature scaling
- 입력 숫자 특성들의 범위를 같게 맞춰주는 방법
- min-max 스케일링, 정규화, normalization
• 0 ~ 1 사이의 범위로 특성의 범위를 조정한다.
• 데이터에서 최솟값을 뺀 후 최댓값과 최솟값의 차이로 나눈다.
• sklearn - MinMaxScaler 변환기 제공
- 표준화, standardization
• 평균을 뺀 후 표준 편차로 나누어 결과 분포의 분산이 1이 되도록 한다.
• 항상 평균은 0이 된다.
• 범위의 상한, 하한이 없다.
• 이상치에 영향을 덜 받는다.
• sklearn - StandardScaler 변환기 제공
※ 항상 training set에 대해서만 fit()을 적용해야한다. training set과 test set 둘 다에 transform() 적용한다.
2.5.5 변환 파이프라인
■ Pipeline
- scikit-learn에서 연속된 변환을 순서대로 처리할 수 있도록 해주는 클래스
- 연속된 단계를 이름 / 추정기 쌍의 목록으로 입력 받는다.
- 마지막 단계는 추정기와 변환기 모두 사용할 수 있어야하고, 그 외에는 변환기여야 한다.
• fit_transform() 메서드를 가지고 있어야 한다.
- pipeline의 fit() 메서드 호출 시 모든 변환기의 fit_transform() 메서드를 순서대로 호출하면서 해당 순서의 출력을 다음 순서의 입력으로 전달한다.
- 마지막 단계에서는 fit() 메서드만 호출한다.
2.6 모델 선택과 훈련
2.6.1 훈련 세트에서 훈련하고 평가하기
- 학습 모델 fit으로 학습 후 predict로 예측
• LinearRegressor
• DecisionTreeRgressor
- predict 값과 실제 label 비교
- RMSE 측정
• sklearn.metrics_mean_squared_error() 객체 사용
2.6.2 교차 검증을 사용한 평가
■ 교차 검증, cross-validation
- K-fold cross-validation
• 훈련세트를 fold라는 10개의 서브셋으로 무작위 분할
• 결정 트리 모델을 10번 훈련하고 평가
• 매 차례에 매번 다른 폴드를 선택해서 평가에 사용하고 나머지 9개 폴드로 훈련한다.
■ RandomForestRegressor
- 랜덤 포레스트
- 특성 무작위 선택하여 결정트리 생성 후 그 예측을 평균내는 방식으로 작동
- 앙상블 학습: 여러 다른 모델을 모아서 하나의 모델을 만드는 것
2.7 모델 세부 튜닝
2.7.1 그리드 탐색
■ 하이퍼파라미터 조정
- sklearn.model_selection.GridSearchCV: 지정된 하이퍼파라미터 조합에 대한 학습을 교차 검증을 통해 평가한다.
• best_params_: 최적의 하이퍼파라미터 조합
• best_estimator_: 최적의 추정기
2.7.2 랜덤 탐색
- RandomizedSearchCV: 각 반복마다 하이퍼파라미터에 임의의 수를 대입하여 지정한 횟수만큼 평가한다.
2.7.3 앙상블 방법
- 최상의 모델을 연결해보는 방법
- 모델의 그룹이 최상의 단일 모델보다 더 나은 성능을 발휘할 때가 많다.
2.7.4 최상의 모델과 오차 분석
- best_estimator_.feature_importances_: 각 특성의 상대적인 중요도 출력
• 덜 중요한 특성 제외 가능
2.7.5 테스트 세트로 시스템 평가하기
- test set으로 최종 모델 평가
- training set에 맞춰 튜닝되었기 때문에 test set에서는 그보다 낮은 성능을 보일수도 있다.
- 그렇다고 test set에 맞춰서 하이퍼파라미터 튜닝을 시도한다면 새로운 데이터에 일반화하기 어렵기 때문에 오히려 더 좋지 않은 방향으로 학습될 수 있다.
2.8 론칭, 모니터링, 그리고 시스템 유지보수
'AI > 머신러닝' 카테고리의 다른 글
Ch3. 분류 (3.5~3.7) (0) | 2021.03.06 |
---|---|
Ch3. 분류 (3.1~3.4) (0) | 2021.03.04 |
Ch2. 머신러닝 프로젝트 처음부터 끝까지 (2.1 ~ 2.3) (0) | 2021.02.28 |
Ch1. 한눈에 보는 머신러닝 (1.3.2~1.5) (0) | 2021.02.24 |
Ch1. 한눈에 보는 머신러닝 (1.1 ~ 1.3.1) (0) | 2021.02.23 |