오늘은 머신 러닝에서 나오는 기본적인 개념에 대해서 알아보고자 함
- 모델 성능 평가
- 머신 러닝 모델의 성능을 평가하기 위해서는 분석 전에 데이터를 훈련용, 검증용, 테스트용으로 분리함
- 훈련용 데이터는 머신 러닝 모델을 학습하는 용도이며, 테스트 데이터는 학습한 머신 러닝 모델의 성능을 평가하기 위한 용도임
- 검증용 데이터는 모델이 훈련 데이터에 과적합이 되고 있는지 판단하거나 하이퍼파라미터를 조정하기 위한 용도로 사용됨(하이퍼파라미터란 모델의 성능에 영향을 주며, 사람이 값을 지정하는 변수임)
- 검증용 데이터를 이용하여 하이퍼파라미터를 결정하는 과정을 튜닝한다고 표현함
- 분류와 회귀
- 머신 러닝 모델을 이용하여 스팸 메일 분류/과학, 영어, IT, 학습지, 만화라는 레이블이 붙어있는 5개의 책장에 분류/역과의 거리, 인구 밀도, 방의 개수 등을 입력하여 부동산 가격 예측을 해야하는 경우가 있음
- 스팸 메일 분류의 경우 스팸인지, 아닌지 두 개 중 하나를 선택하면 되기 떄문에 이진 분류 문제이며, 과학, 영어, IT, 학습지, 만화 중 하나로 분류하는 것은 다중 클래스 분류, 부동산 가격 예측은 앞의 예시들과 달리 몇 개로 분류하는 것이 아니기 떄문에 회귀 문제임
- 지도학습과 비지도학습
- 머신 러닝은 크게 지도학습, 비지도학습, 강화학습으로 나뉨
- 지도학습은 레이블이라는 정답을 가지고 함께하는 것이며, 비지도학습은 레이블 없이 학습하는 것임
- 자주 언급되지는 않지만 딥러닝 자연어 처리에서 중요한 학습 방법 중 하나인 자기지도 학습은 레이블이 없는 데이터가 주어지면 모델이 학습을 위해 스스로 데이터로부터 레이블을 만들어서 학습하는 경우로 Word2Vec, 워드 임베딩, BERT 등이 해당됨
- 샘플과 특성
- 위의 예에서 역과의 거리, 인구 밀도, 방의 개수를 이용하여 부동산 가격을 예측할 때 부동산 가격을 예측해야 하는 집이 샘플이며, 역과의 거리, 인구 밀도, 방의 개수는 특성이라고 함
- 혼동행렬
- 아래와 같은 행렬을 혼동행렬이라고 하며, 해당 행렬을 통해 정확도, 정밀도 등을 산출할 수 있음
예측 참 | 예측 거짓 | |
실제 참 | TP | FN |
실제 거짓 | FP | TN |
True Positive(TP): 실제 True인 정답을 True라고 예측(정답)
False Positive(FP): 실제 False인 정답을 True라고 예측(오답)
False Negative(FN): 실제 True인 정답을 False라고 예측(오답)
True Negative(TN): 실제 False인 정답을 False라고 예측(정답)
정확도(Accuracy)=(TP+TN)/(TP+FN+FP+TN)
정밀도(Precision)=TP/(TP+FP)
재현율(Recall)=TP/(TP+FN)
- 정확도는 전체 예측한 데이터 중에서 정답을 맞춘 것에 대한 비율로 실생활에서 가장 많이 사용하는 지표임
- 그러나 정확도 아래와 같은 단점이 있음
비가 오는 날을 예측하는 모델이 매일 비가 오지 않는다고 예측했다고 가정했을 때, 실제로 200일 동안 6일만 비가 왔으면 정확도는 194/200=0.97로 97%임
- 이와 같이 비가 온 날은 하루도 맞추지 못했지만 정확도가 높게 나오게 되며, 이를 보완하기 위한 지표로 F1-score가 있음
- 과적합과 과소적합
- 머신 러닝에서 훈련 데이터를 과하게 학습하는 경우를 과적합이라고 하며, 이와 같은 경우 실제 데이터에는 정확도가 떨어질 수 있음
- 반대로 훈련을 덜 한 상태는 과소적합이라고 함
- 딥러닝에서는 과적합을 방지하기 위해 드롭아웃(Dropout), 조기 종료(Early Stopping)과 같은 것이 있음
- 딥러닝 모델의 학습 과정
1. 주어진 데이터를 훈련, 검증, 테스트 데이터로 나눔
2. 훈련 데이터로 모델 학습
3. 검증 데이터로 정확도 및 오차를 계산하여 모델 평가
4. 검증 데이터의 오차가 증가하면 과적합 징후이므로 학습 종료, 아니면 2단계로 이동하여 다시 학습
5. 테스트 데이터로 모델 평가
출처: 유원준/안상준, 딥러닝을 이용한 자연어 처리 입문-1권, p169-p180.
'자연어 처리' 카테고리의 다른 글
[딥러닝을 이용한 자연어 처리 입문] 벡터와 행렬 연산 (0) | 2023.04.16 |
---|---|
[딥러닝을 이용한 자연어 처리 입문] 선형 회귀와 로지스틱 회귀 (0) | 2023.04.16 |
[딥러닝을 이용한 자연어 처리 입문] 벡터의 유사도 (0) | 2023.04.06 |
[딥러닝을 이용한 자연어 처리 입문] 카운트 기반의 언어 모델 (0) | 2023.03.20 |
[딥러닝을 이용한 자연어 처리 입문] 언어모델 (0) | 2023.03.04 |