본문 바로가기

AI/머신러닝

Ch2. 머신러닝 프로젝트 처음부터 끝까지 (2.4 ~ 2.8)

반응형

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 론칭, 모니터링, 그리고 시스템 유지보수

 

반응형