(6) 지도학습
머신러닝은 크게 두가지로 나눌 수 있다. 데이터와 정답을 비교하며 학습하는 지도학습, 정답 없이 데이터만을
보고 판단하는 비지도학습이다. 이번 주차에는 그 중 지도학습에 대해 알아본다. 지도학습의 두 방법인 분류와
회귀에 대해 알아보고, 이들의 차이와 수행 방법에 대해 알아보자.
1. 회귀(Regression)
예측하고자 하는 종속변수가 숫자일때 회귀라는 머신러닝의 방법을 많이 사용한다. 예를 들어 레모네이드의 온도에 따른 판매량을 알아보고자 할때 종속변수인 판매량은 숫자이므로 회귀를 사용하는 것이 적절하다.
독립변수 | 종속변수 | 학습시킬 데이터를만드는 방법 |
---|---|---|
공부시간 | 시험점수(10점, 20점) | 사람들의 공부시간을입력받고 점수를 확인한다. |
온도 | 레모네이드판매량 | 온도와 그날의 판매량을기록한다. |
역세권,조망 등 | 집 값 | 집과 역까지의 거리,수치화된 조망의 평점 등을집 값과 함께 기록한다 |
온실기체량 | 기온변화량 | 과거에 배출된 온실 기체량과기온의 변화량을 기록한다. |
자동차속도 | 충돌 시사망 확률 | 충돌시 속도와 사상자를기록한다. |
나이 | 키 | 학생들의 나이에 따른 키를기록한다. |
2. 분류(Classification)
어떤 문제를 만났는데 그 문제에서 추측하고 싶은 결과가 이름 혹은 문자라면 분류의 방법을 사용하면 된다.
독립변수 | 종속변수 | 학습시킬 데이터를만드는 방법 |
---|---|---|
공부시간 | 합격 여부(합격/불합격) | 사람들의 공부시간을입력받고, 최종 합격여부를확인한다. |
X-ray 사진과영상 속 종양의크기, 두께 | 악성 종양여부(양성/음성) | 의학적으로 양성과 음성이확인된 사진과영상 데이터를 모은다. |
품종, 산도,당도, 지역, 연도 | 와인의등급 | 소믈리에를 통해서 등급이확인된 와인을 가지고품종, 산도 등의 독립변수를정하고 기록한다. |
키, 몸무게,시력, 지병 | 현역, 공익,면제 | 키, 몸무게, 시력, 지병 등을토대로 현역, 공익,면제인지를 확인한다. |
메일 발신인,제목, 본문 내용(사용된 단어, 이모티콘 등) | 스팸 메일여부 | 이제까지 받은 메일을모으고, 이들을스팸 메일과 일반 메일로구분한다. |
고기의 지방함량,지방색, 성숙도, 육색 | 소고기등급 | 소고기의 정보를 토대로등급을 측정한다. |
분류와 회귀의 차이점
가지고 있는 데이터에 독립변수와 종속변수가 있고 종속 변수가 숫자일 때 회귀를 사용하면 된다.
반대로 종속변수가 이름일때 분류를 사용하면 된다.
양적 데이터와 범주형 데이터
양적(Quantitative)이란 얼마나 큰지, 얼마나 많은지, 어느 정도인지를 의미하는 데이터라는 뜻이다.
즉, 양적 데이터란 숫자라고 생각하면 된다. 반대로 이름이란 표현 대신에 범주(Categorical)이라는 표현을 쓴다.
면적(평) | 온도 (섭씨) | 판매량 (개) |
---|---|---|
1000 | 10 | 100 |
200 | 28 | 200 |
300 | 31 | 300 |
위 데이터는 양적 데이터이고 종속 변수가 양적 데이터라면 회귀를 사용하면 된다.
계절 | 날씨 | 휴가지 |
---|---|---|
봄 | 비 | 바다 |
여름 | 흐림 | 산 |
산 | 맑음 | 강 |
위 데이터는 범주형 데이터이고 종속변수가 범주형 데이터이면 분류를 사용하면 된다.
미니문제
1. 분류는 정답 데이터(Label)이 있는 것을 의미하고, 회귀는 정답 데이터가 없는 것을 의미한다.
정답은 X이다. 분류와 회귀 모두 정답 데이터가 존재한다. 다만 그 종속변수의 데이터형에 차이가 있다.
2. 분류는 정답값이 범주형(Categorical)으로 이루어져 있고, 회귀는 정답값이 연속형(Continuous)으로 이루어져 있다. (O, X)
정답은 O이다. 분류는 종속변수, 즉 정답 값이 범주형으로 되어있고 회귀는 정답 값이 양적 데이터(숫자) 즉, 연속형으로 이루어져있다.
3. 분류 성능 지표(Classification Evaluation Metrics)
분류 성능 지표에는 accuracy(정확도), precision(정밀도), recall(재현율), f1 score, AOC-AUC이 있다.
혼동 행렬(Confusion Matrix)
Confusion Matrix란, 모델이 예측한 Label값과 target의 실제 label값을 비교하기 위한 표이다.
True Positive(TP) : 실제 class가 Positive인데 예측 class도 Positive로 맞게 예측
True Negative(TN) : 실제 class가 Negative인데 예측 class도 Negative로 맞게 예측
False Positive(FP) : 실제 class가 Negative인데 예측 class는 Positive로 다르게 예측
False Negative(FN) : 실제 class가 Positive인데 예측 class는 Negative로 다르게 예측
정확도(Accuracy)
Accuracy는 정확하게 분류 된 data sample의 개수를 총 data sample의 개수로 나눈 것으로, 가장 직관적이고 간단한 분류성능 평가지표.
$$
Accuracy = \frac{TP+TN}{TP+FN+FP+TN}
$$
정확도는 class별 data sample 비율에 영향을 많이 받는다. 데이터 구성이 99%가 Negative class인 경우 이 모델은 모든 샘플에 대해 Negative class로 예측해도 99%의 정확도를 보인다.
따라서, 다른 분류성능 평가지표도 확인을 해야한다.
정밀도와 재현율(Precision & Recall)
정밀도와 재현율은 Positive class로 예측한 샘플에 대한 평가지표이다. 두 평가지표 모두 TP를 높이기 위한 목적이 있지만, 경우에 따라 FP나 FN이 낮아야하는 경우가 있다.
정밀도
정밀도는 모델이 Positive class로 예측한 샘플 중 target이 실제 Positive class인 샘플의 비율을 보여주는 평가지표이다. 즉, FP를 줄이는데 초점을 둔다.
$$
Precision = \displaystyle \frac{TP}{TP+FP}
$$
스팸 메일 분류시, 일반 메일(N)을 스팸(P)으로 분류하면 사용자가 불현함을 느낀다.
재현율
재현율은 target이 실제로 Positive class를 가진 샘플중 Positive로 예측된 샘플의 비율을 보여주는 평가지표이다. 즉, FN을 줄이는데 초점을 두며, True Positive Rate(TPR) 또는 민감도(sensitivity)라고도 불린다.
$$
Recall = \displaystyle \frac{TP}{TP+FN}
$$
암 검출, 테러범 및 금융사기 적발과 같이 생명이나 큰 손해를 주는 심각한 케이스를 positive로 분류해야 할때 재현율이 높아야한다. 보통 recall이 precision보다 중요한 경우가 많다.
F1 Score
Precision과 Recall이 서로 상충관계이므로 이 둘을 적절히 고려해서 종합적인 평가를 하기 위해 F1 Score가 탄생했다. 이를, Precision과 Recall의 조화평균이라 한다.
$$
F1\space Score= \frac{2\times precision\times + recall}{precision \space + recall}
$$
Accuracy vs F1 Score
Accuracy는 dataset의 class 분포가 균일하거나 비슷할 때와 positive 예측과 negative 예측이 옳게 분류가 되었을 지 볼 때 적합하다.
F1 score는 class 분포가 불균일할 때 사용되기 때문에 대부분의 실세계 분류 문제에서는 class 분포가 불균일하여 F1 score가 모델을 평가하기에 더 적합하다. 또한, F1 score는 positive class 예측에 대한 precision과 recall의 균형을 고려할 때 적합하다.
AUC-ROC curve
Area Under the Curve - Receiver Operating Characteristic
$$
x축 : FPR = \frac{FP}{FP+TN}
$$
FPR(1 - Specificity) : 실제로 Negative Label인 cases 중에 모델이 Positive로 예측한 비율.
예를 들어, 게임 내에서 어뷰징 유저는 Positive로 놓을때 클린한 유저를 어뷰징 유저로 판단할 경우
게임 충성도에 타격을 입는다.
$$
y축 : TPR = Recall = \frac{TP}{TP+FN}
$$
AUC-ROC curve는 머신러닝 알고리즘의 성능을 평가하는데 매우 일반적으로 사용된다. ROC는 모든
임계값에서 분류 모델의 성능을 보여주는 그래프이다. AUC는 ROC 곡선 아래의 영역이다. AUC가 높다는
것은 클래스를 구별하는 모델의 성능이 훌륭하다는 뜻이다.
4. 불균형 데이터 다루는 법
fit_resample() :
SMOTE
ADASYN
5. 회귀
1)회귀란?
2) 회귀 모델을 평가하는 평가 지표
MAE(Mean Absolute Error)
$$
MAE = \frac{1}{n}\sum_{i=1}^{n}{|x_{i}-x|}
$$
MAE란 모델이 예측한 값과 실제 값 사이의 절대값의 평균이다. 절대값을 취하기 때문에 가장 직관적으로
알 수 있는 지표이다. 하지만, 오차를 절대값으로 취하기 때문에 모델이 실제보다 낮게 예측했는지(Underperformance) 아니면 높게 예측했는지(Overperformance)는 알 수 없다.
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y, y_pred)
MSE(Mean Squared Error)
$$
MSE = \frac{1}{N}\sum_{i=1}^{N}{(y_{i}-\hat y_{i})^2}
$$
제곱을 하기 때문에 MAE와는 다르게 모델의 예측값과 실제값 차이의 면적(제곱)의 합이다. 제곱을 하기
때문에 이상치(outlier)에 취약하다.
from sklearn.metrics import mean_squared_error
mean_squared_error(y, y_pred)
RMSE(Root Mean Squared Error)
$$
RMSE = \sqrt{MSE}=\sqrt{\frac{\sum{}(\hat y-y)^2}{n}}
$$
RMSE는 MSE를 루트로 씌운 값이다. MSE는 제곱을 하다보니 이상치에 취약했는데 제곱을 하면서 커진 값을 다시 루트를 씌워 작아졌으므로 MAE보다 이상치에 강하다. 또한 오류 지표를 실제 값과 유사한 단위로
변환하여 해석이 용이하다.
from sklearn.metrics import mean_squared_error
rmse = mse**0.5
R-squared(Coefficient of determination, 결정 계수)
$$
R^2 = \frac{SSR}{SST}=1-\frac{SSE}{SST}=1-\frac{\sum(\hat y_{i}-\bar y)^2}{\sum(y_{i}-\bar y)^2)}
$$
SSE(Sum of Squares Error) : 관측치와 예측치의 차이
SSR(Sum of Squares Regression) : 예측치와 평균 차이
SST(Sum of Squares Total) : 관측치와 평균 차이
R-squared는 현재 사용하고 있는 x 변수가 y 변수의 분산을 얼마나 줄였는가이다. 단순히 y평균값 모델(기준모델)을 사용했을 때 대비 우리가 가진 x변수를 사용함으로서 얻는 성능 향상의 정도이다. 즉, R-squared 값이 1에 가까우면 데이터를 잘 설명하는 모델이고 0에 가까울수록 설명을 못하는 모델이라고 생각할 수 있다.
TMI
tabulate
python DataFrame을 가독성 좋게 만들어주는 함수이다.
parameter
DataFrame : 우선 tabulate를 적용할 DataFrame을 전달해야한다.
headers = ‘keys’ :
각 컬럼의 이름(header)를 명시할지 정하는 것이다. headers 옵션을 생략하면 컬럼의 이름이
출력되지 않는다.
tablefmt :
tabulate의 보여지는 형식을 정하는 옵션이다. tablefmt = ‘psql’
의 경우 형식을 psql format으로
정한 예이다. 다른 형식으로는 ‘fancy_grid’
, ‘html’
, ‘pretty’
,‘plain’
, ‘rst’
, ‘github’
, ‘tsv’
, ‘.4f’
등이 있다.
showindex :
DataFrame의 row index를 표시할지 결정하는 부분이다. 이 옵션이 True인 경우 row index를 표시하고
False인 경우 row index를 표시하지 않는다.
numalign :
숫자 데이터를 정렬할 위치를 설정하는 옵션. 옵션 값으로는 left, right, center가 있다.
stralign :
텍스트 데이터를 정렬할 위치를 설정하는 옵션. 옵션 값으로는 left, right, center가 있다.