Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

이지훈님의 블로그

Linear Classifier 본문

ML

Linear Classifier

개발자입니다. 2016. 7. 13. 19:00

Linear Classifier

1. 개요

기계학습 분야에서 통계적 분류는 개체의 속성을 이용하여 그 개체가 속하는 그룹, 또는 클래스를 판별하는 것을 목표로 한다. 선형 분류에서는 주어진 속성의 선형결합을 바탕으로 분류를 수행한다. 개체의 속성은 피쳐 값이라고 부르기도 하는데, 보통 피쳐 벡터라는 벡터 형태로 제공한다.  - 위키피디아 < 선형분류 >




<그림 : 선형분류>



선형분류는 두 개의 집합(혹은 그 이상)을 나눌 때 사용할 수 있다. 분류를 할 때 주로 Neural Network, SVM을 많이 사용하지만, 개인적인 생각이지만 가장 간단한 Linear Classifier을 먼저 이해하고 neuralnet이나 다른 머신러닝 알고리즘을 공부하는 것이 더 효율적인 것 같다.



2. 방법

2차원 그래프 위에 두 집합의 특징을 나타내는 (X, Y)의 점들이 있을 때 사람은 두 집합을 분류하는 직선을 쉽게 그릴 수 있을 것이다. 하지만 컴퓨터는 직관적으로 두 집합을 구별할 수 없을 것이다. 컴퓨터가 두 집합을 나눌 수 있는 선을 그리려면 어떻게 해야 할까?

0) 데이터

총 4개의 데이터가 있고 각각 x, y, label(답)이 있다. 우리의 목표는 2차원 그래프에서 사람과 동물을 나누는 하나의 선을 찾는 것이다. 

1번 데이터 x:2.9781 y:4.5651 label:사람
2번 데이터 x:3.0357 y:3.3165 label:사람
3번 데이터 x:1.5841 y:3.3575 label:동물
4번 데이터 x:2.0103 y:3.2039 label:동물


1) 로지스틱 함수를 이용하여 확률의 개념으로 바꾼다.

로지스틱 함수는 아래의 2차원 그래프에서 아래의 그림처럼 완만한 곡선모양을 이룬다. 로지스틱 함수에서 상수e(exp)는 탄젠트 곡선의 기울기에서 유도되는 특정한 실수이다.  

로지스틱 함수 f(x)는 0과 1사이의 값을 가지므로 함수의 결과를 확률이라고 생각하자. 우리가 구해야 할 직선 ax+by+c를 로지스틱함수의 독립변수(입력값) x라고 생각하자. 




  



함수의 출력값은 1번데이터가 사람이라면 1에 가깝도록, 동물이라면 0에 가깝도록 a, b, c를  바꿔야 한다. 
만약 a,b,c의 값이 0.37, 1, -4일 때 직선은 0.37x+y-4가 된다. f(x)에 1번 데이터(사람)와 3번 데이터(동물)가 입력되었을 때 출력값을 확인해 보자.



 




P는 Probability의 약자이다. 

 


2) 전체 확률이 최대가 되도록 해보자.


label이 동물일 때의 P(X)의 값은 0에 가깝게 a, b, c를 수정한다고 하였다. 확률 값이 최대가 되기 위해서는 label이 동물일 때는 
1-P(X)를 해주어야만  최대가 되는 확률을 구할 수 있다.

1-P(X)를 정리해보자.


사람일 때는 label을 1, 동물일때는 label을 -1로 지정해주면 전체 확률의 곱은 a, b, c가 알맞은 값일 수록 1에 가까울 것이다.





3) neagtive log likelihood로 바꿔준다.


위의 수식에서 양변에 로그를 취힌다. 로그를 취하는 이유는 underflow를 피하기 위해서이다. 


argmax는 함수를 최대로 하는 값을 찾는다는 의미이다.


이제 양변에 -1(negative)을 곱해주어 최대값을 찾는문제를 최소값을 찾는 문제로 바꿔준다.

negative로 만들어주는 이유는 optimization problem이 전부 minimum을 구하기 때문에, 여기서도 negative로 바꿔줘야 arg max가 arg min으로 바뀐다고 한다.  - 출처


마지막으로 수식은 아래와 같이 정리가 된다. L은 loss function(손실함수) 혹은 cost function(비용함수)이라고 한다.



비용이 최소화될수록 a,b,c를 잘 찾은 것이다. 이제 a, b, c를 찾아보자.


4) Gradient Descent(경사하강법)

Gradient Descent 참고 1

Gradient Descent 참고 2


Gradient Descent란 미분을 하여 함수의 기울기를 구하고 기울기의 반대방향으로 조금씩 이동하여 최소값에 이를 때 까지 이를 반복하는 것이다.


Gradient를 구하고, 학습률(LearningLate)를 조절하여 a, b, c를 구하면 된다.

주의사항은 Graident를 모두 구하고 a, b, c를 한번에 업데이트 해야한다. 





코드와 학습데이터를 첨부하였으니 이해가 가지 않으면 참고하자. 


LinearClassfier.zip


 

'ML' 카테고리의 다른 글

Naive Bayesian Classification (python code)  (0) 2017.07.18
Logistic Regression  (0) 2017.07.10
Decision Tree + C4.5알고리즘  (0) 2017.07.03
Decision Tree + ID3알고리즘  (0) 2017.07.01
Linear Regression  (0) 2017.04.20
Comments