Machine Learning 2 - Linear & Logistic regression

기계학습 : 유사한 경험(=data)사례에 포함된 공통된 사항(=characteristic, common pattern)을 모아 abstraction된 information을 만드는 것. 즉, low data 받아 공통 패턴을 찾고, 해당 패턴을 추상화시켜 label된 데이터 셋으로 만들어 내는 과정.

지도학습 : 문제(data) - 답(label, truth) 쌍의 데이터로 모델(수학적 함수)에 알맞게 인과관계를 찾는 것.이를 통해 어떤 상황에 대한 결과를 예측할 수 있다. (유사한 data의 label을 모델에 맞게 찾는 것) 즉, label = f(data)를 찾는 것이 머신러닝, 이를 이용하는 것은 알고리즘이 된다.
결국 선형함수 ax+b에 대해 parameter를 데이터에 대해 정하는 것이 우리가 해야 하는 일이 된다. 여타 강화학습, 딥러닝 등도 해당 관계를 밝혀내는 것이 동일하지만 타겟이 다르다.

수치데이터에 대해 함수의 기본 모양 (차원, 차수)를 정하고, 학습 자료에 대해 함수의 모양을 맞추는 것이 회귀 분석(regression)이 된다. 일반적으로 공학에서는 linear로 근사시키기 때문에 non-linear를 다루지 않는다.

logistic Regression : linear regression에서 직선의 방정식을 찾는 것 처럼 Sigmoid 형태의 함수를 찾는 것. Analog to Digital 처럼 값을 분류하긴 하지만 완전히 0과 1로 나누지 않고 그 사잇값을 남겨 둔다.
일반적으로 0, 1의 분포에 따라 분류하지만 그렇지 않은 값도 존재하므로 그런 경우의 수(개수)를 최소화 하는 것이 목표가 된다.

2차원일 경우는 gradient descent(값을 넣어 경사도를 확인해서 움직이는 것)를 사용해 임의의 값을 넣고 그냥 통계를 사용하는 것이 더 빠를 수 있다. 그러나 차원이 올라갈 수록 움직일 수 있는 방향의 가짓수가 늘어나므로 시그노이드 곡선을 찾는 것이 더 빠르다. (차원이 올라갈 수록 랜덤으로 최적 값을 근사하는 데 걸리는 시간이 매우 커진다)
또한 local minimum에 빠질 수 있기에 초기값을 바꿔가면서 해보는 수 밖에 없다.

linear regression의 평가 척도는 실제 값과 근사 값의 차이이고, 이 경우는 그 사이 거리를 최소화 하는 것이 목표이다.

따라서 두 regression의 Loss 식이 다르게 된다. Linear는 두 값의 차의 제곱(거리)가 되는 반면, Logistic은 error의 개수의 합(개수)이 Loss가 된다.

Loss = f(error) ; (y-t)^2 or (number of error)


 

이렇게 편미분으로 해결할 수 있는 경우는 X가 벡터가 아니라 단일 값일 경우. 만약 X가 벡터가 되어 다차원이 되면 벡터를 이용하여 해결해야 한다. (W는 벡터가 되지만 b는 여전히 단일 값)

이 때 다차원 X의 전체 데이터 셋을 생각해보면, 각 데이터의 truth 값 역시 column vector로 나타나므로 우리가 구해야 하는 Loss = E^2 값 전체를 벡터로 표현할 수 있게 된다. 이를 계산하면 훨씬 편리하다.

결과적으로 matrix는 모두 array가 되므로 매트릭스 연산이 쉬워지고 유리해진다. (라이브러리 사용하면 훨씬 쉬워짐, 일반적으로 백만 단위 이하일 경우 for문 돌리지 않고 matrix operation을 맡겨놓는 것이 편하다)

매트릭스를 사용할 경우 미분을 사용하지 않고 inverse matrix를 사용하여 풀 수 있다. 그러나 데이터 셋이 많아질 경우 여전히 컴퓨터를 사용해도 오래 걸리므로 미분이 필요하거나 gradient descent를 사용해야 될 때도 있다.


Gradient descent : 전체 데이터 셋을 한번에 적용하지 않고 데이터를 하나씩 적용해가면서 조절해가는 법. (미분을 해야하는데 못하는 경우 두 값을 대입하여 차이를 이용하는 방법)
앞서 구한 Loss function을 각각 w와 b에 대해 편미분 하면 미분 값이 0인 것을 찾아 optimal을 구할 수 있고, 함수가 복잡해 미분이 불가능할 경우 값을 하나씩 대입하여 변화량이 0이 되는 부분을 찾아(미분값 0) optimal value를 구할 수 있다.

Logistic Regression : neural network 때문에 발생한 데이터 피팅 방식
- Linear regression : x에 대해 y를 매핑, (벡터를 스칼라로 매핑)
- Logistic regression : 해당 매핑을 sigmoid 함수를 적용하여 0과 1 의 이항 값으로 바꾸는 것.

이를 통해 2진 레이블에 맞도록 학습 시킬 수 있다. 단, optimal value를 찾기 위해 미분을 사용하므로 미분 가능해야 한다. (sigmoid 함수를 사용하는 이유 - 미분 가능해야 하므로 0과 1을 바로 나누는 디지털 형식을 사용하지 않고 비슷한 모양의 시그모이드 함수를 쓴다.)

 

 ML은 레이블(0과 1, 두 개의 그룹으로 나누어짐) 된 데이터로 학습을 시킴. 해당 데이터를 나누는 방법을 정의하는 것이 중요. 앞서 말한 것 처럼 확률변수와 벡터 두 가지 방법을 사용하여 데이터를 분리하는 것이 가능하고, 확률이라면 가우시안으로, 벡터를 사용하면 직선/평면의 방정식으로 풀어내는 것이 가능하다.

곡면이나 곡선을 이용해도 되지만 이렇게 되면 풀 수가 없기 떄문에 일반적으로 벡터는 geometry에서 matrix로 변환하여 linear algebra로 푸는 수 밖에 없다.
혹은 ANN(artificial neural network), SVM(support vector machine) 등으로 풀어낼 수 있다. (ML의 벡터 해결법은 LA, ANN, SVM의 총 세 개)

확률변수를 사용하는 방법은 베이어 판단(naive besian)이라는 것이다.

4차원 이상에서 직선이나 평면으로 나타낼 수 없기 때문에 3차원 이하의 솔루션이 그대로 적용된다는 것을 알아야 한다. WX=0이라는 벡터 식의 의미는 W는 하나의 벡터이므로 X는 해당 벡터에 수직인 plane이 된다는 것이다. 따라서 W는 X 평면의 법선 벡터가 되며, 이것을 X를 select하는  기준 parameter라 한다. 여기에 b를 더하면 그냥 해당 평면의 높이가 움직이는 것 뿐이라 bias라 하게 된다. (좌표이동)

- supervised : 그룹에 대해 0 또는 1로 구분된 데이터 레이블을 주는 것. 해당 레이블을 기준으로 두 그룹을 나누는 방정식을 찾는 것. (잘 나눈다 = 에러가 적다)
- unsupervised : 그룹의 레이블이 없고 그냥 데이터의 분포만 존재. 이런 데이터의 분포를 두 개로 나눌 때 두 집단이 얼마나 잘 분리되는지를 확인하여 방정식을 찾는 것이다. (separation) label 이 없는 집단에서 레이블을 만들어 내는 것.

댓글

이 블로그의 인기 게시물

IIKH Class from Timothy Budd's introduction to OOP

Compiler 9 - Efficient Code generation

Software Engineering 10 - V&V, SOLID principle