본문 바로가기

AI/머신러닝

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

반응형

2.1 실제 데이터로 작업하기

    - 예제 깃허브에 있는 dataset/housing 데이터 사용

    - https://github.com/rickiepark/handson-ml

 

 

2.2 큰 그림 보기

    - 캘리포니아 인구조사 데이터를 사용해 캘리포니아 주택 가격 모델 생성

      • 인구, 중간 소득, 중간 주택 가격 등의 데이터

 

2.2.1 문제 정의

  ■ 비즈니스의 목적이 무엇인가?

    - 모델을 생성해서 어떤 이익을 얻으려고 하는가?

    - 알고리즘 선택, 모델 평가에 사용할 성능 지표, 모델 튜닝

 

  ※ 파이프라인

    - 데이터 처리 컴포넌트들이 연속되어 있는 것

    - 각 컴포넌트는 많은 데이터를 추출해 처리하고 그 결과를 다른 데이터 저장소로 보낸다.

 

  ■ 현재 솔루션은 어떻게 구성되어 있는가?

    - 문제 해결 방법에 대한 정보 & 참고 성능

 

  ■ 캘리포니아 주택 가격 예측 모델

    - 레이블된 훈련 샘플 존재 -> 지도학습

    - 주택 가격 값을 예측 -> 회귀문제

      • 다변량 회귀, multivariate regression: 예측할 특성이 복수

    - 데이터에 연속적인 흐름이 없음/빠르게 변화하는 데이터에 적응할 필요 없음/데이터의 크기가 작음 -> 배치학습

 

  ※ 데이터가 매우 크면 맵리듀스, map rerduce 기술을 활용하여 배치 학습을 여러 서버로 분할하거나 온라인 학습 기법을 사용할 수 있다.

 

2.2.2 성능 측정 지표 선택

  ■ 평균 제곱근 오차, Root Mean Square Error (RMSE)

    - 회귀문제에서 사용하는 성능 지표

    - 오차가 커질수록 값이 더욱 커지므로 예측에 얼마나 많은 오류가 있는지를 가늠할 수 있도록 해준다.

# 평균 제곱근 오차
RMSE(X, h) = (1/m 𝜮(h(x^(i)) - y^(i))^2)

- m: 데이터셋에 있는 샘플 수
- x^(i): 데이터셋에 있는 i번째 샘플의 전체 특성값의 벡처
- y^(i): 해당 레이블, 해당 샘플의 기대 출력값
h: 가설, hypothesis, 샘플 특성 벡터 x^(i)를 받으면 예측값을 반환한다.
  • ŷ, y-hat: 샘플에 대한 예측값
- RMSE(X, h): 가설 h를 사용하여 샘플을 평가하는 비용 함수

 

  ■ 평균 절대 오차, Mean Absolute Error (MAE)

    - 평균 절대 편차, Mean Absolute Deviation 라고도 한다.

# 평균 절대 오차
MAE(X, h) = 1/m𝜮|h(x^(i) - y^(i))|

 

  ※ 벡터 크기 (거리) 측정방법 (norm)

    - 유클리디안 노름

      • 제곱근을 합한 것의 제곱근 (RMSE)

      • 기본적인 거리 계산 방법

    - 맨해튼 노름

      • 절댓값의 합 계산

      • 도시 구획이 직각으로 나뉘어 있을 때 이 도시의 두 지점 사이의 거리를 측정하는 방법

    - 원소가 n개인 벡터 v의 norm

      •||v||k = (|v0|^k + |v1|^k + ... + |vn|^k)^1/k

    - norm의 지수가 클수록 큰 값의 원소에 치우치며 작은 값은 무시된다. (k제곱을 합하기 때문에 큰 값의 경우에 더 큰 차이를 발생시키게 된다.) -> 이상치에 민감하다. (RMSE가 MAE보다 이상치에 민감하다.)

 

2.2.3 가정 검사

    - 시스템의 출력 형식 ex) 주택 가격의 값이 아닌 카테고리의 출력이 필요한지

 

 

2.3 데이터 가져오기

 

2.3.1 작업환경 만들기

    - jupyter, numpy, pandas, matplotlib, scikitlearn 패키지 설치

 

2.3.2 데이터 다운로드

    - housing.csv를 압축한 housing.tgz 파일을 내려받고 tar xzf housing.tgz 실행하여 압축해제 후 csv 파일 얻기

    - https://raw.githack.com/ageron/handson-ml/master/datasets/housing/housing.tgz 파일 다운로드

 

2.3.3 데이터 구조 훑어보기

    - pandas.Dataframe.head(n = 5): 파일의 처음 n행을 반환한다.

    - pandas.Dataframe.info(): 데이터에 대한 간략한 설명과 전체 행 수, 각 특성의 데이터 타입과 널이 아닌 값의 개수 등의 정보 제공

    - pandas.Series.value_counts(): Return a Series containing counts of unique values.

    - pandas.DataFrame.describe(): 숫자형 특성의 요약 정보를 보여준다.

      • null값은 제외된다.

      • 백분위수 - 25%, 50%, 75%: 전체 관측값에서 주어진 백분율이 속하는 하위 부분의 값

    - pandas.DataFrame.hist(): Dataframe의 히스토그램을 만드는 메소드이다.

    - matplotlib.pyplot.show(): 그래프를 출력한다.

 

  ※ 데이터 깊게 분석 전에 test set을 따로 분리해야한다.

 

2.3.4 테스트 세트 만들기

    - 데이터 스누핑, data snooping: test set을 통해 일반화 오차를 추정하게 되면서 실제 시스템 실행시에 기대했던 성능이 나오지 않는 편향오류

 

  ■ 테스트 세트 생성

    - 무작위 샘플 선택해서 데이터 세트의 20%를 분리한다.

    - numpy.random.permutation(x): x만큼의 랜덤 순열을 리스트 형식으로 반환한다.

    - 단순 random permutation을 통해서 데이터 셋 생성시에 매번 전체 데이터 셋을 보게된다.

     • 샘플의 고유 식별자를 생성해서 고유식별자의 해시값을 계산하여 샘플 분리한다.

 

    - sklearn.model_selection.train_test_split(data, test_size=x, random_state=n)

      : 사이킷 런의 모듈, 입력받은 파라미터 값을 기반으로 데이터 셋을 분리시켜준다. (test set, training set)

 

  ■ 계층 샘플링, stratified smapling

    - 무작위로 데이터를 선택하는 경우 편향이 발생할 수 있다.

    - 샘플링 시에 각 데이터의 계층 비율을 잘 따져야 한다. ex) 성별, 소득분위 ...

    - 소득 카테고리를 기반으로 계층 샘플링을 실행한다.

    - sklearn.model_selection.StratifiedShuffleSplit(n_splits=n, test_size, random_state): train set과 test set의 인덱스를 반환해준다.

      • n_splits: Number of re-shuffling & splitting iterations.

반응형