자주 사용하는 머신러닝 기법 이해

2019-05-01

Data_Engineering_TIL_(20190430)

study program : https://www.fastcampus.co.kr/extension_des

[학습목표]

  • 로지스틱 회귀모델 구현원리 이해

  • 기타 머신러닝시 데이터 전처리 수행 팁 이해

  • 정규화 기초개념 이해

  • 의사결정나무 & 앙상블 알고리즘 기초개념 이해

[학습기록]

1. 로지스틱 회귀모델 구현원리 이해

1) Classification을 위한 로지스틱 회귀

0

참고로 g(z)를 z로 미분한 결과는 추후 Logistic cost function 미분시 유용하게 활용된다.

1

2) Logistic cost function

y가 1과 0중 하나이기 때문에 if문으로 나누어지게 된다.

2

3) Logistic cost function 미분

Logistic cost function를 미분하여 코스트가 작아지도록 만든다.

결론적으로는 Logistic cost function을 미분하면 아래 수식과 같이 매우 간단한 형태로 수렴한다.

3

4) kaggle의 titanic호 생존자 분류 컨텐츠를 이용한 로지스틱 회귀모델 구현실습

이게 titanic호 컨텐츠처럼 피쳐가 별로 없는 경우에는 주어진 피쳐를 이용해서 피쳐임베딩(새로운 피쳐생성)을 시도할 수도 있어야 한다.

로지스틱 모델도 그냥 linear 모델처럼 coef_ 명령어를 이용하면 w 가중치들을 출력할 수 있다. 아래의 그림처럼

피쳐들이 어떻게 조합되서 w가 어떻게 나왔는지 확인 할 수 있다.

그러면 어떤피쳐가 얼마만큼 어떤 영향을 주는지 해석 할 수 있다.

4

2. 기타 데이터 전처리 시 유의사항

  • 여러개의 피쳐가 들어가는 경우에는 Feature scaling, feature 조합, 중복 feature 제거 등 많은 작업이 필요하게 된다.

  • 여러개의 피쳐가 들어가는 경우에는 feature scaling이라고해서 각각의 피쳐의 스케일을 맞춰줘야 한다. 피쳐를 학습시킬때 0 ~ 1 로 하던 -1 ~ 1로 하던지 nomalizing을 시켜줘야 한다. 왜냐하면 스케일이 어떤건 0 ~ 1이고 어떤 피쳐는 1 ~ 10000이라고 하면 벨런스가 안맞아서 그레디언트 디센트할때 한쪽으로 1로 내려갈때 한쪽으로 막 1000이상으로 내려가기 때문에 다시말해서 편향되게 미분되어 학습이 제대로 안되고, 성능도 안나온다.

  • 중복데이터 처리(제거)도 잘 해줘야 한다. 많은 피쳐들이 있으면 실수로(자기가 실수로 넣는지도 모르는 경우가 많다) 넓이가 제곱미터로 표현된 컬럼이 있고, 넓이가 평수로 표현된게 있으면 사실 이 두개는 단위만 다르고 똑같은데 두개 다 모델에 반영할 수도 있다. 이럴경우에도 모델이 제대로 학습이 안된다. 왜냐하면 x1과 x2의 어떤 똑같은 피쳐가 들어가는 건데 피쳐가 결국에는 똑같은게 두개가 있는건데 그러면 세타1과 세타2가 합이 같은이상은 서로 어떤값을 나누어 가져도 상관없게 된다. 만약에 넓이라는 피쳐가 x1 하나만 있었으면 세타가 1이면 되는 것을 피쳐가 중복되는 x1,x2 두개가 있으면 -100에 +101 이런식으로 서로 나누어 갖게되어 전체점수가 왜곡 될 수 있다.

  • 그래서 보통 선형회귀모델을 구현할때 가장 기본적으로 하는 것이 피쳐간에 상관관계가 높은것을 체크하고, 제거하는 것을 가장 먼저한다.

3. Regularization

1) Overfitting 문제

  • 현실세계의 실제 모델보다, 학습시킨 모델이 복잡도가 더 높아져서 주어진 학습셋에만 과도하게 최적화된 상황

  • 통상 test set과 train set으로 데이터를 분리해서 train으로 학습을 하고, test로 테스트를 하는데 train 퍼포먼스와 테스트 퍼포먼스의 차이가 클 경우 오버피팅이라고 판단하게 된다.

  • 오버피팅이 발생하면 training set 이 아닌 새로운 문제를 오버피팅된 모델이 제대로 예측할 수 없게 된다

2) 해결방법

  • 쓸때없는 Feature 의 갯수를 줄이거나, 데이터를 더 확보하거나, Regularization으로 해결

3) Regularization

  • Cost function에 의도적으로 상수항을 추가시켜 학습을 방해함

  • 세타값이 문제를 푸는 것에 최적화되지 않도록 방하는 효과가 있다.

  • 그래서 모델이 과도하게 학습되는 것을 방지한다.

4. 의사결정나무 & 앙상블 알고리즘 기초개념

  • 현업에서 매우 많이 쓰이는 중요한 알고리즘이다.

  • Decision Tree, Random Forest, Boosted Tree (XGBoost) 등의 종류가 있다.

  • 대략적인 원리

1) 어떻게 데이터를 가지치기해야 당뇨병이냐 아니냐 0과 1의 y값을 잘 가를 수 있는가를 따져서 피쳐를 선택한다.

2) 가지치기를 한다.

3) 가지치기를 한 데이터를 또 잘 가를 수 있는 피쳐를 선택한다.

4) 1) ~ 3)을 반복한다.

5

  • Decision Tree는 오버피팅할 가능성이 높은 단점이 있다.

  • 이런 단점을 해결하기 위해 나온 알고리즘

1) 배깅(Bootstrapping과 Aggregating) 방법

  • Random Forest에서 주로 쓰이는 알고리즘이다.

  • Bootstrap(데이터를 조각조각 임의로 나누어 샘플링) 을 먼저 한 후, 그 샘플링한 데이터를 이용해 학습하여 트리하나를 만들고, 또 Bootstrap한 후에 그 샘플링한 데이터를 이용해 학습하여 트리하나를 만드는 식으로 여러개의 이런 트리들을 만든다.

  • 이 과정에서 각각의 트리는 feature도 전체중에 몇개만을 선택함

  • 이렇게 하므로써 학습데이터에 지나치게 fitting되지 않도록 하는 효과를 얻을 수 있다.

  • 이렇게 학습된 여러개의 트리를 voting 방식으로 결과값을 결정한다.

  • 이렇게 하면 오버피팅 될 소지가 매우매우 적어지게 된다. 왜냐하면 랜덤포레스를 구성하는 트리들이 데이터도 얼마 못쓰고, 피쳐도 얼마 못쓰기 때문이다. 그리고 이 트리들의 집단지성(voting 방법)을 이용해서 문제를 풀게된다.

2) 부스팅 방법

  • Boosted Tree (XGBoost)에서 주로 쓰이는 알고리즘이다.

  • 아주 단순한 트리를 하나 만든 후, 에러를 증폭시켜 트리를 하나 더 학습(틀린문제를 중점적으로 잘 푸는 오답노트와 유사한 방법) 한 다음에 이 과정을 반복하는 방식이다.

  • 틀린얘들을 오답노트 기록하듯이 계속 강조해서 얘 위주로 학습하는 트리들을 만든다. 그러면 얘도 트리들이 여러개가 생기는데 고것들을 조합시켜서 voting 방법을 쓴다. 이 방법을 적용하면 마찬가지로 오버피팅의 소지를 매우매우 많이 줄일 수 있다.

  • decision tree 계열의 모형들은 feature importance라고 어떤 피쳐가 좋은 결과를 미쳤는지 통계치처럼 모아서 주는 기능이 있다. 분기들의 중요도를 따져서 점수를 매겨서 보여주게 된다. 피쳐를 골라내는데 매우 유용하고, 모델이 잘 작동하고 있는지 문제는 없는지를 파악하는데도 쓰인다.

3) 랜덤포레스트 알고리즘이 오버피팅 되기 힘든이유

여러개의 앙상블인데다가, 이것들이 피쳐를 조금씩 나누어가져서 학습이 되기 때문에 또한 데이터도 쪼개져서 일부분의 데이터를 가지고 학습하기 때문이다.