머신러닝, 딥러닝을 공부하면서 더 확실하게 공부하고 정리하기 위해 책을 정리하면서 다시 해보고자 합니다.
추천받은 Handsp-on Machine Learning (개정 2판)을 공부하면서 중간중간 궁금한 것도 추가하며 정리하고자 합니다.
Chap1 목차
- 지도 학습, 비지도 학습, 준지도 학습, 강화 학습
- 배치 학습, 점진적 학습
- 사례 기반 학습, 모델 기반 학습
- 예제 코드
- 충분하지 않은 양의 훈련 데이터
- 대표성 없는 훈련 데이터
- 낮은 품질
- 관련 없는 특성
- 과대 적합
- 과소 적합
- 일반화 오차
- 홀드 아웃 검증
1.머신러닝 시스템의 종류
1-1 사람의 감독하에 훈련을 하는가? 지도, 비지도, 준지도, 강화학습
1-1-1 지도학습(Supervised Learning) : 알고리즘에 주입하는 훈련 데이터에 레이블(정답)이 포함
● 대표적인 학습 : 분류(Classification), 회귀(Regression)
● 대표적인 알고리즘
: k-nearest neighbors, Linear regression, Logistic Regression, SVM, Decision tree/RandomForest, Neural networks
1-1-2 비지도 학습(Unsupervised Learning) : 훈련 데이터에 레이블이 없음
● 대표적인 학습 알고리즘
- 군집(Clustering)
: k-means, DBSCAN, HCA(계층 군집 분석), 이상치/특이치 탐지, one-class SVM, Isolation Forest
- 시각화와 차원 축소(Visualization & Dimensionality reduction)
: PCA, Kernel PCA, LLE(지역적 선형 임베딩), t-SNE
- 연관 규칙 학습(Association Rule Learning)
: Apriori, Eclat
1-1-3 준지도 학습(Semisupervised Learning) : 일부만 레이블이 있는 데이터를 학습
● 대부분의 준지도 학습 알고리즘은 지도 + 비지도 학습 조합으로 이루어짐
● DBN(Deep Belif Network; 심층 신뢰 신경망) : 여러 겹으로 쌓은 RBM(Restricted Boltzmann Machine)에 기반함
1-1-4 강화 학습(Reinforcement Learning)
: 에이전트(학습하는 시스템)가 환경을 관찰해 행동하고 보상 | 벌점을 받음 -> 정책을 스스로 학습
1-2 실시간으로 점진적으로 훈련을 하는가? 온라인 학습, 배치 학습
1-2-1 배치 학습(Batch Learning) : 가용 데이터를 모두 사용하여 훈련(= 오프라인 학습)
1-2-2 점진적 학습(Incremental Learning;Online Learning) : 미니배치(작은 묶음 단위)로 주입해 시스템 훈련
: 매 학습 단계가 빠르고 비용이 적게 들어 빠른 변화에 스스로 적응해야 하는 시스템에 적합
※ 학습률(변화하는 데이터에 얼마나 빠르게 적응할 것인가)
if 학습률 高 → 빠르게 적응 But 예전 데이터를 금방 망각
단점 : 나쁜 데이터 주입 시 시스템 성능이 점진적으로 감소 So, 모니터링이 중요
※ 모니터링 e.g. 입력 데이터를 이상치 탐지 알고리즘으로 비정상 데이터를 잡기
1-3 훈련 데이터셋에서 패턴을 발견하여 예측 모델을 만드는가? 사례 기반 학습, 모델 기반 학습
1-3-1 사례 기반 학습(Instance-Based Learning)
: 훈련 샘플을 기억하여 학습 → 유사도 측정 → 새로운 데이터와 학습 데이터를 비교하여 일반화
1-3-2 모델 기반 학습(Model-Based Learning) : 샘플들의 모델을 만들어 예측에 사용
e.g. 돈이 사람을 행복하게 만드는가?
- 데이터셋 : 더 나은 삶의 지표 데이터(OECD) + 1인당 GDP(IMF)
- 데이터 경향 : 무작위성이 있지만 삶의 만족도는 1인당 GDP가 증가할수록 선형으로 올라감
- 모델 선택 : 1인당 GDP라는 특성 하나를 가진 삶의 만족도에 대한 선형 모델
(= 1인당 GDP의 선형함수로 삶의 만족도를 모델링)
- 선형 모델
$$ S = \theta_0 + \theta_1 * G $$
※ 모델 파라미터 : $$ \theta_0, \theta_1 $$
- 모델이 최상의 성능을 내도록 하는 값을 찾기 위해 측정 지표를 설정
※ 측정 지표 : 효용함수 | 적합도 함수(모델이 얼마나 좋은가), 비용 함수(모델이 얼마나 나쁜가)
- 해당 알고리즘이 얻은 최적의 파라미터
$$ \theta_0 = 4.85 $$
$$ \theta_1 = 4.91 * 10^{-5} $$
- OECD 데이터에 없는 키프로스 사람들의 행복도를 모델에 적용
키프로스의 1인당 GDP : 22,587 $
$$ 4.85 + 22,587 * 4.91 * 10^{-5} = 5.96 $$
[사이킷런을 이용한 선형 모델의 훈련과 실행 코드]
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import sklearn.linear_model
# 데이터 적재
oecd_bli = pd.read_csv(datapath + "oecd_bli_2015.csv", thousands=',')
gdp_per_capita = pd.read_csv(datapath + "gdp_per_capita.csv",thousands=',',delimiter='\t',
encoding='latin1', na_values="n/a")
# 데이터 준비
country_stats = prepare_country_stats(oecd_bli, gdp_per_capita)
X = np.c_[country_stats["GDP per capita"]]
y = np.c_[country_stats["Life satisfaction"]]
# 데이터 시각화
country_stats.plot(kind='scatter', x="GDP per capita", y='Life satisfaction')
plt.show()
# 선형 모델 선택
model = sklearn.linear_model.LinearRegression()
# 모델 훈련
model.fit(X, y)
# 키프로스에 대한 예측
X_new = [[22587]] # 키프로스 1인당 GDP
print(model.predict(X_new)) # 출력 [[ 5.96242338]]
2. 머신러닝의 주요 도전 과제
2-1 충분하지 않은 양의 훈련 데이터
2-2 대표성 없는 훈련 데이터
: 앞의 예제에서 선형 모델을 훈련하기 위해 사용한 나라의 집합에서는 일부 나라가 빠져있기에 대표성이 부족
누락된 나라의 데이터를 추가하여 훈련하면 이전에 점선이었던 선형 모델이 실선으로 된 모델을 얻음
(= 모델이 크게 변경되고 간단한 선형 모델은 잘 작동하지 않는다.)
샘플이 작으면 샘플링 잡음(= 우연에 의한 대표성 없는 데이터)이 생기고,
매우 큰 샘플의 경우에도 표본 추출 방법이 잘못된다면 샘플링 편향(= 대표성을 띄지 못함)이 생길 수 있음
e.g. 샘플링 편향의 대표적인 예 : The Literary Digest의 여론 조사
2-3 낮은 품질의 데이터
2-4 관련 없는 특성
특성 공학 : 관련 없는 특성이 적고 관련 있는 특성이 충분하게 할 수 있도록 훈련에 사용할 좋은 특성을 찾는 행위
- 특성 선택(Feature Selection) : 훈련에 가장 유용한 특성을 선택
- 특성 추출(Feature Extraction) : 특성을 결합해 더 유용한 특성을 생성(차원 축소 등)
- 새로운 데이터를 수집해 새로운 특성을 생성
2-5 훈련 데이터 과대 적합(지나친 일반화의 오류와 유사)
: 훈련 데이터에 있는 잡음의 양에 비해 모델이 너무 복잡할 때 발생
<해결 방법>
- 파라미터 수가 적은 모델을 선택, 훈련 데이터의 특성 수를 줄이거나 모델에 제약(규제)을 가해 단순화
- 더 많은 훈련 데이터 수집
- 훈련 데이터의 잡음 줄이기(오류 데이터 수정 | 이상치 제거)
2-6 훈련 데이터 과소 적합
: 모델이 너무 단순해서 데이터의 내재된 구조를 학습하지 못하는 경우
<해결방법>
- 모델 파라미터가 더 많은 모델 선택
- 학습 알고리즘에 더 좋은 특성을 제공 (특성공학)
- 모델 제약 줄이기(규제 하이퍼파라미터 등)
3. 테스트와 검증
모델이 새로운 샘플에 얼마나 잘 일반화될지 아는 방법은 새로운 샘플에 실제로 적용해 보기
이를 위해 실제 서비스에 모델을 넣고 잘 작동하는지 모니터링하는 방법이 존재
하지만 모델이 나쁘다면 좋은 방법은 아니기에 다른 방법을 제시
- 훈련 데이터를 훈련세트와 테스트 세트로 나누기 → 훈련 세트에서 모델을 훈련
→ 테스트 세트에서 모델 평가 → 일반화 오차에 대한 추정값을 얻음
- IF 훈련 오차 低(= 훈련 세트에서 모델 오차) && 일반화 오차 高 → 모델이 훈련 데이터에 과대적합된 상태
※ 일반화 오차(Generalization Error; 새로운 샘플에 대한 오류비율; 외부 샘플오차)
3-1 하이퍼파라미터 튜닝과 모델 선택
3-1-2 홀드아웃 검증(holdout validation) : 훈련 세트 일부를 떼어내어 여러 후보 모델을 평가하고 가장 좋은 하나 선택
※ 검증 세트 : 새로운 홀드 아웃 세트(= 개발 세트, 데브세트)
- 줄어든 훈련세트(전체 훈련 세트에서 검증 세트를 뺀 데이터)에서 다양한 하이퍼파라미터 값을 가진 여러 모델 훈련
- 검증 세트에서 가장 높은 성능을 내는 모델을 선택(홀드아웃 검증)
- 최선의 모델을 전체 훈련 세트(검증 세트를 포함한 데이터)에서 다시 훈련하여 최종 모델 생성
- 최종 모델을 테스트 세트에서 평가하여 일반화 오차 추정
IF 검증 세트가 적으면 정확하게 평가 못함 So, 작은 검증 세트를 여러 개 사용하여 반복적인 교차 검증을 수행할 수 있음
But 훈련 시간이 검증 세트의 개수에 비례하여 늘어남
'Networks > Hands-On 머신러닝 정리' 카테고리의 다른 글
Hands-On Machine Learning 정리 - 머신러닝(Chapter 6: 결정 트리) (0) | 2024.10.21 |
---|---|
Hands-On Machine Learning 정리 - 머신러닝(Chapter 5: SVM) (4) | 2024.10.20 |
Hands-On Machine Learning 정리 - 머신러닝(Chapter 4: 모델 훈련) (1) | 2024.10.19 |
Hands-On Machine Learning 정리 - 머신러닝(Chapter 3: 분류) (0) | 2024.10.19 |
Hands-On Machine Learning 정리 - 머신러닝(Chapter 2: 프로젝트) (3) | 2024.10.18 |