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.
'AI > 머신러닝' 카테고리의 다른 글
Ch3. 분류 (3.5~3.7) (0) | 2021.03.06 |
---|---|
Ch3. 분류 (3.1~3.4) (0) | 2021.03.04 |
Ch2. 머신러닝 프로젝트 처음부터 끝까지 (2.4 ~ 2.8) (0) | 2021.03.01 |
Ch1. 한눈에 보는 머신러닝 (1.3.2~1.5) (0) | 2021.02.24 |
Ch1. 한눈에 보는 머신러닝 (1.1 ~ 1.3.1) (0) | 2021.02.23 |