본문 바로가기

AI

[기초쌓기] Machine Learning 요즘 핫하데? #1


이 글에서 말한 것처럼 기초부터 다시 제대로 쌓고자 하는 마음이 생겨서 머신러닝 파트 부분에 대한 질문을 던져 보고 스스로 답해보려고 한다.

답하는 과정에서 원래 우물쭈물하거나 이런 느낌 아녔어? 하는게 아니라 제대로 '정답'을 찾아가 보려는 공부를 하려고 한다.

블로그에 공부하는 내용 정리해보면서 이제는 안 까먹고 애매하지 않게끔 머릿 속에 박아놔야겠다.

그래서 그냥 처음부터 시작한단 마인드로 공부해보자.

 

* 물론 이 답이 '정답'이 아닐 수 있고 내 개인적인 생각 + 공부 내용이다.

* 참고 깃허브 링크: https://github.com/zzsza/Datascience-Interview-Questions

 

zzsza/Datascience-Interview-Questions

Datascience-Interview-Questions for Korean. Contribute to zzsza/Datascience-Interview-Questions development by creating an account on GitHub.

github.com


1. Cross Validation(교차 검증)은 무엇인가?

 - 모델링 학습 과정에서 데이터셋을 여러 개로 나눠서 학습 후 각각의 학습 모델 성능일 비교하여 평균값을 내는 검증 방법

 

 - 학습 시 기본적으로 Train / Test 데이터셋으로만 나눠서 진행하는데 Train 데이터셋을 K개로 쪼개서 Train set + Validation set으로 분리한 후 학습을 진행한다.

  : 그래서 Iteration이 증가하기 때문에 모델 훈련/평가 시간이 증가하게 된다.

 

 - Validation set을 사용해 검증하는데 K개로 나눴을 때 1개씩 Validation set으로 사용해서 총 K개의 학습 결과를 뽑는다. 그리고 K개의 학습 모델 결과의 평균으로 학습 모델의 성능을 말한다.

 

 - Resampling과 비슷한 개념인 것 같다. 흔히 자주 쓰이는 'K-fold' 방식이 교차 검증의 한 방법이다.

 

 * 사용하는 이유
  > 모든 데이터셋을 훈련과 평가(학습)에 활용할 수 있다.
   : 평가에 사용되는 Overfitting(과적합)을 방지할 수 있다.
   : 정확도를 향상 시킬 수 있다. (실제로 사용해보면 학습 시간은 좀 더 걸리지만 정확도가 올라가는 모습을 보여주긴 함 - 그게 미미하냐 크냐는 역시 학습에 사용되는 데이터를 탓해야지^^)
   : 데이터 부족으로 인한 Underfitting(과소적합)을 방지할 수 있다.
  > K개의 성능 결과를 하나의 결과(평균)로 나타내기 때문에 보다 더 일반화된 모델 성능을 낼 수 있다. (우리의 목표는 모델의 일반화!!!)

2. 회귀 / 분류 시 알맞은 metric은 무엇인가?

 1) 회귀 모델 metric

  : 실제 값과 모델 예측 값의 차이(오차)에 기반을 둔 metric을 사용한다.

  : RSS(단순 오차 제곱), MSE(평균 제곱 오차), MAE(평균 절대값 오차) 등이 있다.

   > RSS: 예측값과 실제값의 오차 제곱합

   > MSE: RSS를 데이터 개수만큼 나눈 값으로 이상치(outlier)를 잡아내는 데 효과적임

     (+ 루트를 씌운 RMSE를 더 자주 쓰는??)

   > MAE: 예측값과 실제값의 오차 절대값의 평균으로 변동치가 큰 지표와 낮은 지표를 같이 예측하는 데 효과적임

     (+ 루트를 씌운 RMAE도 있음)

  : MSE와 MAE가 평균을 이용하기 때문에 데이터 크기에 의존한다는 단점이 있다. 이를 해결하기 위한 metric으로 R2(결정계수)가 있다.

   > R2: 1 - (RSS/전체 분산), 회귀 모델의 설명력을 표현하는 지표로 1에 가까울수록 높은 성능의 모델이라고 말할 수 있다!!

 

 2) 분류 모델 metric

  : 어떤 모델이 데이터를 클래스별로 알맞게 분류했느냐를 측정하기 위해 Confusion Matrix(혼동행렬)의 지표를 이용한다.

  Predicted Negative
(예측 부정)
Predicted Positive
(예측 긍정)
Actual Negative
(실제 부정)
TN
(True Negative)
FP
(False Positive)
Actual Positive
(실제 긍정)
FN
(False Negative)
TP
(True Positive)
  • TN: 실제 데이터가 부정(N)이며 모델 결과 부정(N)이라고 예측한 경우 (예측 O)
  • FP: 실제 데이터가 부정(N)인데 모델 결과 긍정(P)라고 예측한 경우 (예측 X)
  • FN: 실제 데이터가 긍정(P)인데 모델 결과 부정(N)이라고 예측한 경우 (예측 X)
  • TP: 실제 데이터가 긍정(P)이며 모델 결과 긍정(P)라고 예측한 경우 (예측 O)

  > Accuracy (정확도)

   - 모델이 얼마나 데이터를 정확하게 분류했는지를 측정

   - 예측값 결과와 실제값이 동일한 건수 / 전체 데이터 수 = (TP+TN) / (TP+TN+FN+FP)

   - 분류 모델의 주요 평가 지표지만 클래스별 데이터 수가 불균형할 경우 신뢰도가 떨어진다.

  

  > Precision (정밀도)

   - 모델이 P라고 분류한 데이터 중 실제로 P인 데이터의 비율을 측정

   - 예측 결과와 실제값이 긍정인 건수 / 긍정으로 예측한 데이터 수 = TP / (TP+FP)

   - 실제 N인 데이터를 P라고 판단하면 안 될 때 많이 사용한다. (N인 데이터가 중요할 때)

 

  > Recall (재현율) / TPR(True Positive Rate)

   - 실제 P인 데이터 중에서 모델이 P라고 잘 예측한 데이터의 비율을 측정

   - 예측 결과와 실제값이 긍정인 건수 / 실제 긍정인 데이터 수 = TP / (TP+FN)

   - 실제로 P인 데이터를 N이라고 판단하면 안 될 때 많이 사용한다. (P인 데이터가 중요할 때)

 

  > FPR(False Positive Rate)

   - 실제 N인 데이터 중에서 모델이 P라고 잘못 분류한 데이터의 비율을 측정

   - FP / (FP+TN)

  * ROC curve의 x축이 FPR, y축이 TPR(Recall)이다. ROC curve가 y축으로 붙을 수록 AUC(ROC curve 아래쪽 면적)이 커지는데 AUC가 클수록 모델 성능이 높아짐을 의미 -> TPR쪽으로 그래프가 붙는 것!

 

  > F1-score

   - Precision과 Recall을 혼합해 사용하는 지표로 두 결과값의 조화평균을 계산한다.

   - Precision과 Recall의 관계는 한 쪽이 높아질 수록 다른 쪽은 낮아지는 상관관계를 가지고 있다.

   - F1-score = (2 * Precision * Recall) / (Precision + Recall)

   - Precision과 Recall이 비슷할 수록 F1-score는 높은 값을 갖기 때문에 해당 값이 높다고 무조건 좋은 분류 모델은 아니기 때문에 원하는 문제에 따라 잘 조절해주자!!

   

  * 방범 시스템의 경우, high Recall + row Precision이 좋음 (방범 시스템이 자주 작동해도 도둑을 확실히 잡아야 하기 때문)

 * 광고 차단의 경우, row Recall + high Precision이 좋음 (유용한 광고 몇 개를 못 봐도 불쾌한 불법 광고는 확실히 차단하는게 좋기 때문)

  * 심각한 질병 검사기의 경우, high Recall + high Precision이 좋음 (둘 다 높은 시스템 만들기란...ㅎㅎ 어렵...)

3. 정규화가 필요한 이유와 정규화의 방법들은 무엇이 있는가?

 - 데이터 전처리 과정을 통해 모델에 학습 시키기 위한 데이터셋을 만들 때 데이터의 feature들 중 이상치가 존재할 수 있다. (그것도 많이 많이)

 - 이럴 경우, 모델이 학습을 진행할 때 이상하게 해석할 수가 있으며 당연히 학습 결과에 악영향을 끼친다.

 - 이를 위해 스케일링을 적용해서 모든 데이터가 같은 정도의 스케일(중요도)이 반영되도록 해줄 필요가 있다. (정규화의 목적!!)

  * 모델링에 필요한 데이터셋을 균일한 상태로 만들어 주는 방법 = 정규화

 

  1) Standardization

   : 평균을 제거하고 데이터를 단위 분산으로 조정함

   : 이상치가 있는 경우 균형 잡힌 척도를 보장할 수 없다. (이상치가 당연히 평균/표준편차에 영향이 크기 때문에!)

 

  2) MinMax Normalization

   : 모든 feature값이 일정 범위(보통 0 ~ 1 범위) 사이에 있도록 데이터를 재조정함

   : 매우 큰 이상치가 있을 경우 변환된 feature값들이 매우 좁은 범위로 압축될 수 있다.

 

  3) MaxAbs Normalization

   : 절대값이 0 ~ 1 사이에 mapping 되도록 모든 feature값들을 (-1 ~ 1) 사이로 재조정함

   : MinMax와 마찬가지로 매우 큰 이상치에 민감!!

 

  4) Robust Normalization

   : 평균과 표준편차 대신에 사분위값을 이용하여 이상치의 영향을 최소화 시킴

   : 중앙값(median)과 IQR(interquartile range)을 사용해서 Standard 보다 동일한 값을 더 넓게 분포 시켜준다.

 

  5) Z-Score Normalization

   : feature값을 Z-score로 변환 시켜서 사용한다. (즉, 표준 정규 분포를 따르도록 바꿈 - 가우시안 분포)

 

 * 어쨋든 정규화(스케일링)를 진행할 때는 이상치를 최대한 제거해주자^^

4. Local Minima와 Global Minima란 무엇인가?

 - 도함수의 관점에서 극솟값들은 Local Minima가 된다.

 

 - Local Minima가 여러 개일 경우 그 중 가장 최솟값이 Global Minima가 된다.

  : Local Minima가 1개라면 그 점이 Global Minima임!

 

 - 모델링의 목표는 Global Minima를 찾아가는 것!!

  : 하지만 gradient descent(경사 하강법)을 주로 쓰는 ML/DL 훈련에서는 Local Minima에 빠지면 빠져나오기 쉽지 않다. Global Minima가 어디인지도 알 수 없고 Local Minima도 극솟값으로 수렴되는데 컴퓨터가 여기까지 잘 알아차리기가 쉽지 않은듯..?

5. 차원의 저주란 무엇인가?

 - 데이터의 학습을 위해 차원이 증가하면서 학습데이터 수가 차원의 수보다 적어져 성능이 저하되는 현상이라고 한다.

 

 - 차원이 증가할 수록 각 차원별로 학습할 데이터 수가 적어지는 현상이 발생하기 때문 (선형대수의 sparse matrix 처럼)

  : 차원이 증가하면 빈 공간도 그만큼 늘어난다. (1차원 '선' - 2차원 '평면' - 3차원 '입체' 안에 같은 수의 점들이 있다고 생각해보면 빈 공간이 많은 곳은?? 고차원일 수록 많다.)

  * 차원이 증가할 수록 빈 공간(sparse)이 생기는 것을 의미!!

  * 이를 해결하기 위해 차원을 축소시키거나 데이터를 더욱 늘려야 한다.

6. Dimension Reduction(차원 축소) 기법의 종류는?

 - Feature Extraction(특징 추출)과 Feature Selection(특징 선택)으로 나눌 수 있다.

 1) Feature Extraction

  : 높은 차원의 raw feature들을 더 필요한 요소로 추출하는 기법

  : 기존의 feature들로 새로운 feature를 생성하며 줄이는 방식!!

  : PCA, LDA, SVD, MF 등의 기법이 있음.

 

 2) Feature Selection

  : 모든 feature들 중 필요한 것들만 선택하는 기법

  : 간단하거나 무시할 수 있는 feature들을 제거하는 방식!!

  : Filtering, Wrapper, Embedded 방식이 있음.

   > Filtering: 필요없는 특징들을 필터링으로 제거

   > Wrapper: 어떤 외적 경험, 실험 등에 의한 특징들을 선택

   > Embedded: 손실함수를 통한 특징들을 선택

7. PCA는 차원 축소 기법이면서 데이터 압축 기법이기도 하며 노이즈 제거기법이기도 한 이유는?

 - 차원 축소 기법: 주성분 분석(PCA)의 기본 개념은 차원이 큰 벡터에서 선형 독립하는 고유 벡터만을 남기고 차원 축소를 한다.

  : 남겨진 주요 성분은 기존에 있던 feature가 아닌 기존 feature들을 가지고 새롭게 정의된 성분임!!!

 

 - 데이터 압축 기법: 상관성이 높은 독립 변수들을 N개의 선형 조합으로 만들며 변수의 개수를 요약, 압축을 한다. 

  : 압축된 각각의 독립 변수(feature)들은 선형 독립으로 서로 직교하며 낮은 상관성을 보임.

  : 낮은 상관성이란 차원 결정 성분 중 다양성을 최대한 보전하는 성분으로 변환하기 때문.

 

 - 노이즈 제거 기법: 주성분 분석 결과를 통해 데이터들의 설명력이 낮은 특징들로 구성된 컬럼(=노이즈)들을 배제한다.

  : 대표가 될 수 있는 성분(주성분)이 아닌 성분들은 노이즈로 인식하고 제거!!

8. LSA, LDA, SVD 등은 어떤 의미이며 서로 어떤 관계를 가지고 있는가?

 - SVD를 진행 결과부터 더 작은 크기로 분석하는 LSA로 이어지고 데이터 분포에 대한 약점을 보완하기 위해 LSA에 디리클레 분포를 적용한 것이 LDA이다.

 : 디리클레 분포는 0과 1사이의 값을 가지는 다변수 확률 모형이라 생각하면 되고 각 모든 변수의 확률 합은 1을 만족한다. (소프트맥스 함수와 비슷한 특징을 지닌건가!)

 1) LSA(Latent Semantic Analysis): 잠재의미분석으로 말그대로 데이터의 잠재적인 의미를 끌어내는 분석

 2) LDA(Latent Dirichlet Allocation): 잠재 디리클레 할당

 3) SVD(Singular Value Decomposition): 특이값 분해

9. Markov Chain은 무엇인가?

 - 마르코프 성질: 특정 상태의 확률은 오직 과거의 상태에 의존한다라는 의미

 

 - 마르코프 체인은 위의 '마르코프 성질'을 가진 이산 확률과정을 의미한다. '상태 전이'를 표현하는 전이확률 행렬을 이용해서 특정 상태의 확률을 구한다.

  : 예를 들면 오늘 날씨가 맑음이라면 내일 날씨는? 모레 날씨는? 여기에 이전 날의 날씨에 영향을 받을 것이라고 가정해보자.

 

 - 충분히 많은 횟수가 반복되면 전이행렬이 그 확률들이 변하지 않는 상태인 안정상태(steady state)가 된다.

  : 확률이 직전 상태와 동일하게 수렴하게 되는 것!!

  : 이를 정적분포(Stationary Distribution)라고 부른다.

10. SVM(Support Vector Machine)의 원리는 무엇인가? 장점은?

 1) SVM이란?

 - 데이터의 각 feature별로 구분할 수 있는 기준 선인 결정 경계(Decision Boundary)를 정의한다. 예를 들어 2가지 feature를 구분하려면 2차원 위의 1개의 선이면 된다. (결정 경계 = 선) feature가 3가지로 늘어난다면 이를 구분하기 위해 3차원 위의 1개의 면이 된다. (결정 경계 = 면)

  : feature가 늘어나면 이를 구분짓기 위한 결정 경계를 정의하기 위해 차원이 점점 복잡해진다.

  : 우리가 인지할 수 있는건 3차원까지니까 feature가 아주 많아지면 결정 경계도 단순 평면이 아닌 고차원이 된다고 한다!! (초평면 - Hyperplane)

 

 - 즉, feature가 증가할 수록 결정 경계도 복잡해지며 최적의 결정 경계는 각 데이터 군으로부터의 마진(Margin)을 최대화한다.

  : 마진은 결정 경계로부터 서포트 벡터 사이의 거리를 의미한다.

  : 서포트 벡터는 결정 경계와 가까이 있는 각 데이터들을 의미한다. (각 데이터 군에서 결정 경계와 가장 가까이 있는 데이터들을 의미하는 것 같다.)

 

 2) SVM의 장점은?

 - 대부분의 머신러닝 알고리즘은 학습 데이터 모두를 사용하여 모델을 학습한다. 하지만 SVM은 결정 경계만 정의하면 되는데 이 때 필요한 것은 '서포트 벡터'들 뿐!!

 

 - 여러 데이터들 중에서 서포트 벡터만 잘 골라낸다면 나머지는 무시 가능하기 때문에 학습 속도가 매우 빠르다!! (확실히 XGB나 LightGBM 같은 트리 방식 알고리즘보다 훨씬 빠르더라)