Snoopy [K-mooc] 3. Classification(KNN, 로지스틱 회귀모형)
강의 내용 정리하기/실습으로 배우는 머신러닝

[K-mooc] 3. Classification(KNN, 로지스틱 회귀모형)

Sooyoon Jeong 2022. 11. 21.

성신여대 김영훈 교수님의 K-MOOC 실습으로 배우는 머신러닝 강의 내용을 바탕으로 포스팅하였습니다.


1차시: 머신러닝 분류 모델링

1. Bias-Variance Trade off

가. Bias

예측 값이 실제 값과 얼마나 떨어져 있는가? 혹은 얼마나 치우쳐져 있는가?

쉽게 말해서 error, 오차라고 생각할 수 있다.

 

나.  Variance

우리에게 주어진 데이터는 보통,모집단으로부터 샘플링된 데이터이다.

이때 모집단은 굉장히 큰 데이터 집단이며, 어떤 방식으로 샘플링 하느냐에 따라 여러 종류의 샘플 데이터가 생성될 수 있다.

 

이렇게 생성된 샘플들에는 차이가 있을 것이고, 샘플로 학습시킨 최종적인 모형도 차이가 존재할 것이다.

그리고 이러한 차이가 바로 변동성, variance를 의미한다.

 

다. Bias-variace trade off

출처: 김영훈 교수님 강의 자료

※ 모형의 오차 = Bias + Variance

 

모형의 complexity를 높여주면 bias는 줄어들고 변동성을 커지게 되고 반대로 모형의 complexity를 낮추면 bias는 커지고 변동성은 작아지게 된다.

(즉, 모형이 복잡하면 복잡할 수록  training data에 대해 굉장히 잘 설명할 수 있고 미세한 패턴이나 변동까지도 다 학습시킬 수 있게되지만, 변동성이 너무 커기게 된다는 단점이 생긴다.) 

 

이처럼 model complexity의 높고 낮음에 따라

High Bias Low Variance 또는 Low Bias High Variance이 결정되는 것이 바로  Bias-variace trade off이다.

 

2. 하이퍼파라미터 및 튜닝

가. hyper parameter의 중요성

우리는 이러한 model complexity를 잘 조정하여  Bias-variace trade off 관계를 이용해야하고

bias와 variance가 적합하게 잘 조정된 가장 최적의 prediction error를 보이는 모형을 선택할 필요가 있다.

 

이때 Model Complexity를 결정하는 데 키가 되는 거는 바로 Hyperparameter다.

 

 Complexity가 너무 낮은 거를 Underfitting이라고 하고 너무 높은 걸 Overfitting이라고 하며

이를 잘 피해서 적절하게 하이퍼파라미터 튜닝을 진행해주어야 한다.

 

3. classification

지도학습 중에 예측하고자 하는 값이 범주형 변수일 경우에 사용한다.

(범주형 종속변수: class, label)

 

가. 분류 문제의 예시

제품 불량, 양품 분류

이탈고객, 잔류고객 분류

카드 거래의 정상거래, 사기거래 분류


2차시:KNN

classification의 대표적인 모형 중 하나는 바로 KNN이다.

KNN에 대해 배워보도록 하자!

1. K-nearest neighbors

1️⃣ K개의 이웃들, K는 임의의 수로 우리가 결정할 수 있는 하이퍼파라미터이다.

2️⃣ 두 관측치의 거리가 가까우면 Y(정답값)도 비슷하다. 라는 기본개념을 사용하고 있다.

3️⃣ K개의 주변 관측치의 class에 대한 다수결 투표를 진행한다.

출처: 김영훈 교수님 강의 자료

초록색의 관측치의 성별을 분류할 때(K=3) 남자 2표, 여자 1표이므로 다수결의 원칙에 따라 남자로 분류한다.

4️⃣ K는 하이퍼파라미터이며 K에 따라 결과가 달라질 수 있기 때문에 적절한 수치로 결정을 해주어야 한다.

출처: 김영훈 교수님 강의 자료

K = 3일때 별을 class B로 분류하지만

K = 6일때는 별을 class A로 분류하게 된다.

 

따라서 validation data를 따로 생성하고 내가 지정한 K에 따라 최종적인 validation dataset의 결과가 어떻게 달라지는지 비교를 한 다음 K를 결정하고 train을 다시 학습 시킨 다음에 testing에 대한 예측을 진행하면 된다.

 

2. 거리

선형회귀의 경우 f(x)=β0+β1x1+β2x2+...+, 이런 식의 기본 함수 형태가 존재한다.

하지만, KNN의 경우 기본 함수의 형태와 기본 파라미터가 존재하지 않고 대신 관측치들 간의 거리를 계산해서 알고리즘을 적용하는 모형이다.

 

거리를 계산하는 방법은 여러가지가 있다.

1️⃣ 유클리드 거리

2️⃣ 맨하튼

3️⃣ 민코우스키

 

유클리드 거리를 자주 사용하기는 하지만, 경우에 따라 적절한 거리 계산 방법을 채택하면 되고

범주형 변수의 경우 dummy variable으로 변환하여 거리를 계산한다.

 

3. KNN의 영향

K는 하이퍼파라미터이기 때문에, 모델의 복잡도를 결정하기도 한다.

K가 크다: 모델이 단순하다, 주변보다는 크게 크게 본다, underfitting 

K가 작다: 모델이 복잡하다, 주변의 미세한 변동을 파악한다, overfitting

 

validation dataset을 이용해 최적의 K를 결정해야 한다.


3차시:Logistic Regression

1. Logistic Regression

가. 정의

Logistic Regression은 선형회귀모형의 Classification 버전이다.

logistic function을 사용하기 때문에 로지스틱이라는 이름을 사용한다.

 

따라서 로지스틱 회귀는 로지스틱 함수를 사용하는 선형회귀모형이라고 생각하면 된다.

 

💡 선형회귀와 로지스틱 회귀의 차이

선형회귀는 회귀식을 통해 y의 값을 예측하는 지도학습 알고리즘이라면

로지스틱 회귀는 데이터가 어떤 범주에 속할 확률을 0에서 1 사이의 값으로 예측하고 그 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류해주는 지도학습 알고리즘이다.

 

나. 필요성

로지스틱 회귀분석의 목적은 이진형의 형태를 갖는 종속변수에 대해 회귀식의 형태로 모형을 추정하는 것이다.

이때 회귀식으로 표현하는 이유는 변수의 통계적 유의성 분석 및 종속변수에 미치는 영향력 등을 알수 있기 때문이다.

 

그런데, 로지스틱은 선형회귀와 다른 방식으로 접근해야 한다.

 

Q. 종속변수의 속성이 이진변수일 경우 확률 값을 선형 회귀분석의 종속변수 Y로 사용하는 것이 타당할까?

A. 타당하지 않다. 선형회귀분석의 우변의 범위에 대한 제한이 없기 때문에 우변과 좌변의 범위가 다른 문제가 발생한다.

 

출처: 김영훈 교수님 강의 자료

그냥 Y를 사용할 경우 위처럼 우리가 예상하는 그래프처럼 값이 예측되고

기존 회귀식으로는 우리가 궁극적으로 하고 싶은 분류 확률 모델링이 잘 되지 않음을 확인할 수 있다.

 

따라서 로지스틱 회귀분석은 이진형 종속변수 Y를 그대로 사용하는 것이 아니라

Y에 대한 로짓함수(logit function)를 회귀식의 종속변수로 사용해서 최종적인 결과물을 분류확률로 나타낼 수 있게끔 표현해주어야 한다.

 

다. 로짓함수

그렇다면 로짓함수란 무엇일까?

 

로짓함수, 시그모이드함수, logistic funtion 모두 같은 의미이며 설명변수의 선형결합으로 표현된다.

또한, 로짓함수의 값은 종속변수에 대한 성공확률로 역산될 수 있다.

(이러한 원리 덕분에 분류 문제에 적용할 수 있는 것이다.)

 

말이 좀 어려울 수 있는데 간단히 정리하면

로짓함수는 0부터 1 사이의 값으로 예측(변환)해주는 함수로 어떤 결과 값이 확률로 모델링하기 굉장히 적합한 함수이다.

 

선형회귀에서 사용했던 기존의  β0+β1x 함수를 시그모이드 함수에 넣어서 출력해주는 것이고

최종적인 결과는 S형태 처럼, 증가하다가 수렴하는 형태가 나오게 되는 것이다.

출처: 김영훈 교수님 강의 자료

 

2. 머신러닝에 적용하기

1️⃣ 모형 구축하기
기본적인 logistic regression에서 함수의 가정은 1/(1+e^-(β0+β1x+...+βpxp))이라고 정의할 수 있다.

 

2️⃣ loss 정의하기

로지스틱 회귀에서는  cross-entropy를 많이 사용한다.

※ i는 관측치, j는 클래스

 

[참고] cross-entropy loss 계산 예시

출처: 김영훈 교수님 강의 자료

실제 클래스의 값만 유의미하다. (실제 클래스가 아닌 경우에는 0을 곱해주어 값이 0이 되기 때문에)

따라서, loss 값을 minimize한다는 것은 실제 클래스로 분류될 확률을 키워준다는 것을 의미한다.

댓글