2. 머신러닝 프로젝트 처음부터 끝까지

1. 실전 데이터 활용

데이터를 모아놓은 저장소중 유명한 사이트는 아래와 같다.

2. 큰 그림 그리기

데이터 정보 확인

1990년도에 시행된 미국 캘리포니아 주의 20,640개 구역별 인구조사 데이터는 경도, 위도, 중간 주택 연도, 방의 총 개수, 침실 총 개수, 인구, 가구 수, 중간 소득, 중간 주택 가격, 해안 근접도 등 총 10개의 특성을 포함한다.

훈련 모델 확인

  • 지도 학습: 구역별 ‘중간 주택 가격’을 타깃target으로 지정한다. → 타깃: 구역별 중간 주택 가격
  • 회귀: 중간 주택 가격을 예측한다. 보다 세분화하면 다중 회귀이자 단변량 회귀 모델이다.
    • 다중 회귀multiple regression: 구역별로 여러 특성을 주택 가격 예측에 사용한다.
    • 단변량 회귀univariate regression: 구역별로 한 종류의 값만 예측한다.
  • 배치 학습: 빠르게 변하는 데이터에 적응할 필요가 없으며, 데이터셋의 크기도 충분히 작다.

훈련 모델 성능 측정 지표

선형 회귀 모델의 경우 일반적으로 아래 두 기준 중 하나를 사용한다.

  • 평균 제곱근 오차(RMSE)

    평균 제곱근 오차(RMSE)는 예측값과 타깃 사이의 오차의 제곱의 평균값이다.

    유클리디안 노름 또는 ℓ2 노름으로 불린다. 노름(norm)은 거리 측정 기준을 나타냄

    오차가 작을수록 좋긴 하나 너무 작을경우에도 좋지않다.

    Untitled

    Untitled 1

  • 평균 절대 오차(MAE)

    평균 절대 오차(MAE)는 맨해튼 노름 또는 ℓ1 노름으로도 불리며 예측값과 타깃 사이의 오차의 평균값이다.

    예측을 너무 못하면 MAE가 더 좋다.

    훈련셋에 이상치가 많이 포함된 경우 주로 사용되지만, 그렇지 않다면 일반적으로 RMSE가 선호된다.

3. 데이터 훑어보기

  • 여기서는 housing변수에 주택 가격 데이터를 담고있다.

4. 데이터 탐색과 시각화

지리적 데이터 시각화

Untitled 2

위 그림처럼 주어진 데이터를 산포도로 시각화를 할 수 있다.

alpha인자를 사용해서 투명도를 조절할 수 있다.

Untitled 3

산포도를 지도와 합쳐서 산포도로 시각화가 가능하다.

상관관계 조사

중간 주택 가격 특성과 다른 특성 사이의 선형 상관관계를 나타내는 상관계수는 다음과 같다.

Untitled 4

  • 상관관계의 특징
    • 상관계수는 -1에서 1 사이의 값으로 표현된다.

Untitled 5

산점도를 그리면 위와 같이 나오는데 선이 있는게 보인다.

그 이유는 아래와 같다.

  • 50만 달러에서 보이는 수평선은 가격을 제한한 결과로 보여진다. (시각화하는 과정에서 보이는 가격을 50만으로 제한)
  • 45만, 35만, 28만, 그 아래 정도에서도 수평선이 존재하는데 이유는 알려지지 않았다.
  • 이처럼 이상한 성질을 모델이 형태를 학습하지 못하도록 해당 구역을 제거하는 것이 일반적으로 좋다. 하지만 여기서는 그대로 두고 사용한다.

    5. 데이터 준비

  • 데이터 준비 자동화
    • 모든 전처리 과정을 파이프라인을 이용해 자동화 가능
  • 입력 데이터셋과 타깃 데이터셋
    • 계층 샘플링으로 얻어진 훈련셋 **strat_train_set** 을 다시 입력 데이터셋 과 타깃 데이터셋으로 구분한다.
    • 입력 데이터셋: 중간 주택 가격 특성이 제거된 훈련셋

    housing = strat_train_set.drop(“median_house_value”, axis=1)

    • 타깃 데이터셋: 중간 주택 가격 특성으로만 구성된 훈련셋

    housing_labels = strat_train_set[“median_house_value”].copy()

    • 테스트 세트는 훈련이 완성된 후에 성능 측정 용도로만 사용. 테스트 셋은 건드리지 않는다고 생각하면 됨

데이터 정제와 전처리

  • 데이터 정제: 결측치 처리, 이상치 및 노이즈 데이터 제거
    • 구역별 방 총 개수( total_rooms ) 특성에 결측치 포함됨
  • 데이터 전처리
    • 범주형 특성 전처리 과정 머신러닝은 숫자로 바꿔야 처리가 가능하다.
      • 원-핫-인코딩
    • 수치형 특성에 대한 전처리
      • 특성 크기 조정
      • 특성 조합
  • 파이프라인
    • 여러 사이킷런 API를 묶어 순차적으로 처리하는 사이킷런 API
    • 여러 과정을 한 번에 엮어서 수행하도록 하는 도구
  • 사이킷런 API 활용
    • 사이킷런Scikit-Learn의 API를 간단하게 합성 가능
    • 사이킷런 API의 세 가지 유형
      1. 추정기
        • **fit() 메서드를 제공**하는 클래스의 객체
        • 주어진 데이터로부터 필요한 정보인 파라미터parameter 계산
        • 계산된 파라미터를 객체 내부의 속성attribute으로 저장
        • 반환값: 계산된 파라미터를 속성으로 갖는 객체
      2. 변환기
        • fit() 가 계산한 값을 이용하여 데이터셋을 변환하는 transform() 메서드 지원.
      3. 예측기
        • fit() 가 계산한 값을 이용하여 예측에 활용하는 predict() 메서드 지원.
        • predict() 메서드가 예측한 값의 성능을 측정하는 score() 메서드 지원.
        • 일부 예측기는 예측값의 신뢰도를 평가하는 기능도 제공 - 변환기 예측기는 추정기가 될 수 있지만 추정기는 변환기와 예측기가 아닐 수 있음

데이터 정제

  • 결측치 처리, 이상치 및 노이즈 데이터 제거

total_bedrooms 특성에 207개 구역에 대한 값이 NaN (Not a Number)로 채워져 있음, 즉, 일부 구역에 대한 정보가 누락됨.

Untitled 6

  • 누락치 처리 방법
    1. 해당 샘플(구역) 제거
    2. 해당 특성 삭제
    3. 평균값, 중앙값, 0, 주변에 위치한 값 등 특정 값으로 채우기. 여기서는 중앙값 사용.
  • SimpleImputer 변환기
    • 3번 방법을 지원하는 사이킷런 변환기
    • 중앙값 등 통계 요소를 활용하여 누락치를 지정된 값으로 채움

범주형 특성 다루기(원-핫 인코딩)

  • 범주형 특성을 why 사용하는가? - 단순 수치화의 문제점
    • 뷰가 좋은 곳은 가격이 비쌈
    • 머신러닝은 숫자가 높다면 중요하다고 인지하기 때문에 잘못된 학습이 될 수 있음
  • 원-핫 인코딩(one-hot encoding)
    • 수치화된 범주들 사이의 크기 비교를 피하기 위해 더미(dummy) 특성을 추가하여 활용
    • 해안 근접도 특성 대신에 다섯 개의 범주 전부를 새로운 특성으로 추가한 후 각각의 특성값을 아래처럼 지정
      • 해당 카테고리의 특성값: 1
      • 나머지 카테고리의 특성값: 0
    • 예제: INLAND 특성을 갖는 구역은 길이가 5인 다음 어레이로 특성으로 대체됨.

      [0, 1, 0, 0, 0]

    • 더미 특성에 대해 한 곳은 1, 나머지는 0의 값을 취하도록 모델의 훈련이 유도됨
    1
    2
    3
    4
    5
    
      from sklearn.preprocessing import OneHotEncoder
        
      cat_encoder = OneHotEncoder()
      housing_cat_1hot = cat_encoder.fit_transform(housing_cat)
      # fit은 범주가 몇개인지 확인
    

수치형 특성 전처리: 크기 조정

머신러닝 알고리즘은 입력 데이터셋의 특성값들의 크기scale가 다르면 제대로 작동하지 않는다. 따라서 모든 특성의 크기를 통일하는 크기 조정scaling이 요구된다.

크기 조정은 보통 아래 두 가지 방식을 사용한다.

  • min-max 크기 조정(정규화)
    • 정규화(normalization)라고도 불리는 min-max 크기 조정은 아래 식을 이용하여 모든 특성값을 0에서 1 사이의 값으로 변환한다. 단, maxmin 각각 특성값들의 최댓값과 최솟값을 가리킨다.

      Untitled 7

    • 변환 결과: 0에서 1 사이
    • 이상치가 있는경우 문제가 발생함 ex) max나 min값이 너무 작거나 큰 경우 대부분의 표본들이 한쪽에 치우치게 됨
    • 사이킷런의 MinMaxScaler 변환기 활용 가능
  • 표준화
    • 특성값을 다음과 같이 변환. 단, 는 특성값들의 평균값mean, 는 특성값들의 표준편차

      Untitled 8

    • 변환된 데이터들이 표준정규분포에 가까워 지며, 이상치에 상대적으로 영향을 덜 받음.
    • 사이킷런의 StandardScaler 변환기 활용 가능
  • 사용자 정의 변환기

    사용자 정의 변환기

    FunctionTransformer변환기

    • fit() 메서드를 먼저 사용하지 않고 transform() 메서드를 바로 적용해도 되는 변 환기를 선언할 때 사용

    로그 함수 적용 변환기

    • 데이터셋이 두터운 꼬리 분포를 따르는 경우, 즉 히스토그램이 지나치게 한쪽으로 편향된 경우
    • 크기 조정을 적용하기 전에 먼저 로그 함수를 적용 추천

      FunctionTransformer(np. log, inverse_func= np. exp)

    Untitled 9

비율 계산 변환기

  • 두 개의 특성 사이의 비율을 계산하여 새로운 특성을 생성하는 변환기

    FunctionTransformer(l a m b d a X: X[:, [0]] / X[:, [1]])

  • 비율 계산 변환기를 이용하여 아래 특성을 새로 생성 가능

    • 가구당 방 개수(rooms for household)
    • 방 하나당 침실 개수(bedrooms for room)
    • 가구당 인원(population per household)

군집 변환기

  • 캘리포니아 주 2만 여개의 구역을 서로 가깝게 위치한 구역들로 묶어 총 10개의 군집으로 구분하는 변환기 클래스 선언
  • 사이킷런의 다른 변환기와 호환이 되도록 하기 위해 fit() , transform(), get_feature_names_out() 선언 필요
  • 모든 구역을 10개의 군집으로 분류
  • 🗙는 각 군집의 중심 구역

Untitled 10

ColumnTransformer을 사용하면 여러 변환기를 병렬로 독립적으로 실행이 가능하다.

댓글남기기