issues
search
njs03332
/
ml_study
3
stars
0
forks
source link
2022/02/24 - 2022/03/03
#21
Open
givitallugot
opened
2 years ago
givitallugot
commented
2 years ago
3/3(목) 10시
givitallugot
commented
2 years ago
2.4 데이터 이해를 위한 탐색과 시각화
2.4.1 지리적 데이터 시각화
위도와 경도 정보가 있으므로 x, y로 두고 시각화
alpha 옵션으로 데이터 밀집 영역 확인
두드러진 패턴을 보기 위해서는 매개변수를 함께 활용(ex 원의 반지름으로 인구, 색상으로 주택 가격 정보 표시)
인구 밀도와 주택 가격의 연관 (군집 알고리즘으로 군집을 나눠볼 수 있음)
2.4.2 상관관계 조사
(숫자) 표준 상관계수 corr() 메서드로 계산
중간 주택 가격(Y)과 중간 소득 0.68 양의 상관관계
중간 주택 가격(Y)과 위도-0.14 음의 상관관계
(시각화) scatter_matrix() 산점도로 상관계수 확인
중간 주택 가격과 중간 소득 산점도 확인 시, $450,000, $350,000, $280,000 근처에 수평선이 보임 -> 이상한 형태 학습하지 않도록 제거 필요
2.4.3 특성 조합으로 실험
꼬리가 두꺼운 분포라면 로그 스케일 등으로 데이터 변형
특성 조합 추가 (ex 가구당 방 개수, 방당 침대 수, 가구당 인원 -> Y와 상관관계가 더 높은 변수 생성 가능)
2.6 모델 선택과 훈련
2.6.1 훈련 세트에서 훈련하고 평가하기
선형 회귀를 예시로, 훈련 데이터에
과소 적합
(훈련 데이터 예측 오차가 너무 큼)
과소 적합 이유
데이터가 충분한 정보를 제공하지 못함
모델이 충분히 강력하지 못함
해결 방법
더 좋은 특성 주입
더 강력한 모델 선택
모델 규제 감소
의사 결정 트리를 예시로, 훈련 데이터에
과대 적합
(훈련 데이터 예측 오차 0)
테스트셋은 모델 론칭 준비 전까지 사용하지 않음
2.6.2 교차 검증을 사용한 평가
훈련 세트에서 검증 세트를 분리, K-Fold Cross Validation 이용
의사 결정 트리 결과가 선형 회귀보다 더 안 좋음
(앙상블 학습하는) 랜덤 포레스트 결과가 가장 좋음, 그러나 여전히 훈련 세트에
과대적합
(검증 세트 점수가 더 안좋음)
과대 적합 해결 방법
모델을 간단히 변형
모델 규제
더 많은 훈련 데이터 축적
여러 머신러닝 알고리즘을 사용하며 가능성있는 2~5개의 모델을 선정
danbi5228
commented
2 years ago
2장 진행 단계
큰 그림을 보기
데이터를 구하기
데이터로부터 통찰을 얻기 위해 탐색하고 시각화
머신러닝 알고리즘을 위해 데이터를 준비
모델을 선택하고 훈련
모델을 상세하게 조정
솔루션 제시
시스템 론칭 후 모니터링 및 유지보수
2.1 실제 데이터로 작업하기
2장에서 사용하는 데이터 셋
StatLib 저장소에 있는 캘리포니아 주택 가격 데이터셋
공개된 실제 데이터 셋 저장소 링크
유명한 공개 데이터 저장소
UC Irvine 머신러닝 저장소 (
http://archive.ics.uci.edu/ml
)
Kaggle 데이터셋 (
http://www.kaggle.com/datasets
)
아마존 AWS 데이터셋 (
http://registry.opendata.aws
)
메타 포털(공개 데이터 저장소가 나열되어 있음)
Data Portals (
http://dataportals.org
)
Open Data Monitor (
http://opendatamonitor.eu
)
Quandl (
http://quandl.com
)
인기 있는 공개 데이터 저장소가 나열되어 있는 다른 페이지
위키백과 머신러닝 데이터셋 목록 (
https://goo.gl/SJHN2k
)
Quora.com (
https://homl.info/10
)
데이터셋 서브레딧 (
http://www.reddit.com/r/datasets
)
2.3 데이터 가져오기
2.3.1 작업 환경 만들기
시스템에 설치된 패키지를 사용하고 싶다면 virtualenv 환경 만들 때 --system-site-packages 옵션 사용
자세한 내용은 virtualenv 문서 확인 :
https://virtualenv.pypa.io
2.3.2 데이터 다운로드
방법1. 웹 브라우저를 통해 데이터 다운받은 뒤 tar xzf housing.tgz 명령을 통해 압축풀기
방법2. 데이터 내려받는 코드 생성 (p.80 fetch_housing_data 함수)
2.3.3 데이터 구조 훑어보기
info() : 데이터 프레임의 전체 행 수, 각 특성의 데이터 타입과 널이 아닌 값의 개수를 확인하는데 유용
value_counts() : 특정 컬럼에 대해 어떤 카테고리가 있는지, 얼마나 있는지 확인
describe() : 숫자형 특성의 요약정보 확인
%matplotlib inline : 맷플롯립이 주피터 자체에 백엔드를 사용하도록 하는 명령. 노트북 안에 그래프가 그려지게 됨
히스토그램을 통해 데이터 확인하기
중간소득 특성이 US 달러로 표현되지 않은 것으로 보임
스케일 조정 등이 되어 그런 것. 추후 전처리된 데이터 사용시, 데이터가 어떻게 계산된 것인지 이해하고 있을 것
중간 주택 연도와 중간 주택 가격의 최댓값과 최솟값 한정
한계값을 넘어가더라도 정확한 예측값을 필요로 할 경우
한계값 밖의 구역에 대한 정확한 레이블 구하기
훈련/테스트 세트에서 한계값 밖의 구역을 제거
특성들의 스케일 차이
히스토그램의 꼬리가 두꺼움. 오른쪽으로 더 멀리 뻗어있는 형태
일부 머신러닝 알고리즘에서 패턴을 찾기 어렵게 만드는 요소. 종 모양의 분포가 되도록 변형 (아마 2장 뒷부분?)
2.3.4 테스트 세트 만들기
데이터 스누핑: 테스트 세트가 고려되어 머신러닝 모델이 선택되면 낙관적인 추정이 되어, 시스템 론칭 후 기대한 성능이 나오지 않을 것
무작위 샘플링도 데이터 세트가 충분히 크다는 조건 내에서는 일반적으로 괜찮지만, 그렇지 않은 경우 샘플링 편향이 생길 가능성이 큼
만약 중간 소득이 가장 중요하다고 가정한다면, 이 소득 카테고리 비율을 고려하여 샘플링 (계층적 샘플링) 필요
p. 90 계층 샘플링, 무작위 샘플링의 샘플링 편향 비교 참고
njs03332
commented
2 years ago
2.2 큰 그림 보기
데이터: 블록 그룹마다 인구, 중간 소득, 중간 주택 가격 등을 포함
블록 그룹: 미국 인구조사국에서 사용하는 최소한의 지리적 단위
중간 주택 가격을 예측하는 모델을 만들어야 함
참고: 머신러닝 프로젝트 체크리스트 - 부록 B
2.2.1 문제 정의
비즈니스의 목적 정의
문제 구성, 알고리즘 선택, 평가 성능 지표 선택, 모델 튜닝에 노력을 얼마나 투여할지 등을 결정
목적: 이 모델의 출력이 여러 가지 다른 신호와 함께 다른 머신러닝 시스템에 입력으로 사용됨. 해당 시스템은 해당 지역에 투자할 가치가 있는지 결정
파이프라인: 데이터 처리 컴포넌트들이 연속되어 있는 것
보통 컴포넌트들은 비동기적으로 동작
각 컴포넌트는 완전히 독립적 (컴포넌트 사이의 인터페이스는 데이터 저장소 뿐)
시스템을 이해하기 쉽게 만듦
각 팀은 각자의 컴포넌트에 집중할 수 있음
한 컴포넌트가 다운되더라도 하위 컴포넌트는 마지막 출력을 사용해 계속 동작 가능
모니터링이 적절히 되지 않으면 고장난 컴포넌트를 한동안 모를 수 있음
현재 솔루션이 어떻게 구성되어있는지 알아보기
문제 해결 방법에 대한 정보임
참고 성능으로 사용할 수 있음
현재 솔루션: 전문가가 수동으로 복잡한 규칙을 사용하여 추정함
비용과 시간이 많이 듦
20% 이상 벗어나는 결과가 나올 때가 많음
문제 정의
레이블된 훈련 샘플이 있음 -> 지도 학습
값을 예측해야 함 -> 회귀
예측에 사용할 특성이 여러 개 -> 다중 회귀
각 구역마다 하나의 값을 예측 -> 단변량 회귀
빠르게 변하는 데이터에 적응하지 않아도 되고, 데이터가 메모리에 들어갈 만큼 충분히 작음 -> 일반적인 배치 학습
데이터가 매우 큰 경우에는
맵리듀스 기술(하둡/스파크)을 사용하여 배치 학습을 여러 서버로 분할하거나
온라인 학습 기법 사용
2.2.2 성능 측정 지표 선택
평균 제곱근 오차 (RMSE) - 회귀 문제의 전형적인 성능 지표
표기법
m: 데이터셋에 있는 샘플 수
x(i): i번째 샘플의 전체 특성값의 벡터
y(i): i번째 샘플의 레이블
X: 데이터셋에 있는 모든 샘플의 모든 특성값 (레이블 제외)을 포함하는 행렬
h: 시스템의 예측함수 (가설이라고도 함)
시스템이 하나의 샘플 특성 벡터 x(i)를 받으면 그 샘플에 대한 예측값 ^y(i) = h(x)i))를 출력함
예측 오차는 ^y(i) - y(i)
RMSE(X, h): 가설 h를 사용하여 일련의 샘플을 평가하는 비용 함수
이상치로 보이는 구역이 많은 경우, 평균 절대 오차(MAE)를 사용할 수도 있음
거리 측정의 여러 가지 방법(norm)
유클리디안 노름, l2 노름: 제곱항을 합한 것의 제곱근(RMSE)
맨해튼 노름, l1노름: 절댓값의 합을 계산(MAE)
원소가 n개인 벡터 v의 lk노름은 (|v0|^k + |v1|^k + ... + |vn|^k)^(1/k) 로 정의
l0: 벡터에 있는 0이 아닌 원소의 수
l무한대: 벡터에서 가장 큰 절댓값
노름의 지수가 클수록 큰 값의 원소에 치우치며 작은 값은 무시됨. 따라서 RMSE가 MAE보다 이상치에 조금 더 민감
2.2.3 가정 검사
지금까지 만든 가정을 나열해보고 검사해보기
2.5 머신러닝 알고리즘을 위한 데이터 준비
데이터 준비 과정을 함수로 만들어 자동화해야 하는 이유
어떤 데이터셋에 대해서도 데이터 변환을 손쉽게 반복할 수 있음
향후 프로젝트에 사용할 수 있는 변환 라이브러리를 점진적으로 구축 가능
실제 시스템이서 함수를 사용할 수 있음
여러 가지 데이터 변환을 시도해보고 어떤 조합이 가장 좋은지 확인하는 데 편리
예측 변수와 레이블 분리함
2.5.1 데이터 정제
누락된 특성 처리하는 방법 (예: total_bedrooms 특성에 값이 없는 경우가 있음)
해당 구역 제거
전체 특성 삭제
특정한 값으로 채우기 (0, 평균, 중간값 등)
dropna(), drop(), fillna() 메서드 사용
중간값 사용시, 해당 값을 저장하여 이후 시스템 평가할 때와, 시스템이 실제 운영될 때 새로운 데이터가 들어오면 해당 값을 사용하여 누락된 값을 채워넣어야 함. (테스트 세트에서의 중간값을 사용하면 안됨. 훈련 세트에서 학습한 것이 소용 없어지기 때문)
SimpleImputer를 이용하여 누락된 값 손쉽게 다루기
fit(): 훈련 데이터에 적용하여 파라미터들을 추정하는 함수 (중간값을 계산함)
transform(): 데이터셋을 변환 (중간값을 채워넣음)
누락된 값이 없는 특성이더라도 모든 수치형 특성에 imputer를 적용하는 것이 좋음 (나중에 시스템이 서비스될 대 새로운 데이터에서 어떤 값이 누락될지 모르므로)
사이킷런의 설계 철학
skip..
2.5.2 텍스트와 범주형 특성 다루기
범주형 특성의 텍스트를 수치로 변환하기
OrdinalEncoder 클래스 사용 -> 머신러닝 알고리즘이 가까이 있는 두 값이 떨어져 있는 두 값보다 더 비슷하다고 생각한다는 문제
OneHotEncoder 클래스 사용 -> 한 특성만 1이고 나머지를 0으로 만듦 (더미 특성)
scipy 희소 행렬 (sparse matrix): 0 값이 대부분이기 대문에 0이 아닌 원소의 위치만 저장함
카테고리 수가 너무 많은 경우 원-핫 인코딩은 많은 수의 입력 특성을 만듦 -> 시간 증가, 성능 감소
특성과 관련된 숫자형 특성으로 바꾸는 방법 (예: ocean_proximity 특성을 해얀까지의 거리로 바꾸기)
각 카테고리를 임베딩으로 바꾸는 방법
임베딩: 학습 가능한 저차원 벡터 (표현학습의 한 예)
2.5.3 나만의 변환기
사이킷런은 duck typing을 지원 -> fit(), transform(), fit_transform() 메서드를 구현한 파이썬 클래스를 만들면 됨
2.5.4 특성 스케일링
min-max scaling (normalization 정규화)
standardization