Machine Learning 3 - Bayesian & Classifier
무엇인가 물었을 때 - 답이 없음(선택지) : Unsupervised learning
남자냐 여자냐 물었을 때 - 답이 있음(선택 가능) : Supervised learning
따라서 어떤 상황을 모델링할 때 주어진 상황을 클래스로 정의하고, 각 클래스의 확률을 비교하여 판단을 내릴 수 있다. (혹은 Probability density function으로 주어지면 상황에 따른 각 값을 계산할 수 있다.)
대소 비교에 대해서는, 각 값을 빼서 0과 비교하거나, 나눌 때 1과 비교하는 방법이 있다. 주어진 식이 Polynomial일 경우는 뺄셈을, exponential이면 나눗셈을 사용하는 것이 더 편하다.
Prior probability (사전 확률) : 선택에 대해 사전에 알려진 확률값을 통해 선택하는 것.
Conditional probability (조건부 확률) : 특정 상황에 대한 증거를 기반으로 확률을 계산.
학습 데이터를 기반으로 evidence를 찾아 조건부 확률식을 만들 수 있다. 이를 논리적으로 확률 변환하는 것이 베이지안이다.
근거 (feature) : 판단의 기반이 되는 특징. 여러 개의 판단 근거를 기반으로 삼을 수록 판단에 대한 확신이 강해질 수 있다. 판단 근거를 특징 feature라 하며, 이들이 여러 개 있을 때 벡터로 보아 feature vector라 한다. 단, 근거마다 확신에 영향을 주는 정도가 다르므로 어떤 특징을 선택할 지, 몇 개를 선택할 지에 대한 문제가 발생할 수 있다.
다만 데이터 수가 많아지면서 모델에 대한 고민보다는 빅데이터를 사용하고, 높은 cp와 병렬 처리로 계산하는 방식이 현재의 주류가 되었다. 현대 컴퓨터 환경에서 전력 소모 문제가 극심하고, 이를 해결하기 위해 네트워크 통신을 통해 데이터를 보내고 있는데 이것이 현대 발전의 가장 큰 걸림돌이 된다.
머신러닝에서 선택지(답)는 항상 불연속적인 code 공간으로 주어진다. 왜냐하면 불연속에서 불연속으로 가는 것은 classifier라고 하지 않기 때문이다. (함수에 대한 매핑이다.)
각 feature는 벡터로 나타내지고, 각 특징이 독립이라고 가정해야 베이어 판단이 가능하다. 또한 앞서 근거가 존재하고, 샘플의 개수가 동일하다는 가정 역시 들어가므로 이런 모델 베이스 판단은 실생활에서 안맞는 경우가 많다.
가정이 정확하게 들어맞는 숫자 인식기 등에서는 꽤나 정확하게 작동하지만, 특정 케이스의 빈도가 많은 문자 인식기 등에서는 해당 모델이 안맞는 경우가 많다.
아니면 해당 특징 벡터를 통으로 생각하여 하나의 확률 변수로 본다면, 각 벡터 값에 대해 확률을 계산할 수 있다. 이런 벡터 값을 바로 넣는 것이 NN이다. 그러나 이런 해석을 사용하면 수집해야할 전체 모집단의 수는 더 많이 필요하다. (각 변수의 원하는 조건이 모두 맞는 케이스를 찾아야 하므로)
다만 빅데이터 시대에 들어오면서 이런 작업이 쉬워졌기에 독립성에 대한 고찰이 별로 필요없어져 실용성이 많이 올라갔다고 볼 수 있다.
모델 기반 : 수학적 해결방법은 가정을 통해 깔끔하게 풀어낼 수 있지만 가정이 맞지 않을 경우 정확하지 않다.
데이터 기반 : 변수에 대한 여러 가정을 하지 않고 각 케이스를 가지는 데이터를 바로 사용해 실용적으로 높은 정확성을 얻을 수 있다. (모든 데이터 수집을 통한 판단)
벡터 feature 들을 고려할 때, 모두 고려하게 되면 그들 사이의 correlation이 생겨서 bias가 생길 수 있다. 따라서 중요한 것을 남겨두고 일정 부분 쳐내야 한다.
그리고 클래스들이 베타적이지 않고 sub class로 hierarchy가 발생하게 되어 더 안맞을 수 있다.
neural network는 각 뉴런 하나하나가 discrimination plane인 것이다. (판별식 - P(C|X) 공간을 분리하여 각각의 구역을 구분)
generative model은 P(C, x)로 joint probability로 나타냄. (각각의 존재할 수 있는 영역을 한정적으로 정의)
그래서 생성형 모델에 대해서는 예외 값을 어떻게 처리해야할 지 정의해야 한다. (해당 영역 밖의 값이 존재할 수 있음) 그러나 discrimination은 전체 구역을 나누기 때문에 경계 밖의 값이 없다.
모르는 데이터에 대한 판단을 내기 위해 학습세트로 근거를 세우는 것 = supervised learning.
그러나 quantity로 구성된 정보가 아니고 코드/부호로 구성된 정보에 대해서는 수학적 모델이 통하지 않는다. (이제까지 했던 함수와 확률 식들, 혹은 normal dist가 아니고, 여러 개의 가우시안의 합으로 나타날 수 있는 정보들에 대해서는 모델을 세우지 않고 직접 classification 하는 것이 더 좋을 수 있다.데이터를 바로 사용)
따라서 이런 영역에 적용할 수 있는 것은 decision tree 등과 같은 새로운 방법이다. 관계들을 logic rule로 만들어 놓은 관계 정보 집합체가 된다. (값을 저장하는 DB와는 조금 다름)
Data driven (non-parametric, no model)
트리 하나로는 원하는 성능이 나오지 않으므로 여러 트리를 결합시켜 random forest를 형성하여 사용한다. (직렬/병렬 연결)
트리 말고도 분포된 정보들에 대해 자신의 가장 가까운 이웃 정보를 찾아 자신을 동화시키는 K-NN 방법도 있다.
Classifier
SVM : 가장 가까운 두 데이터(support vector)를 기준으로 margin 사이를 가로지르는 선을 찾아 판단의 근거로 사용. 차원을 올려 곡선을 직선으로 만들어버리는 커널링 사용 가능.
NN : 기본에 존재하는 평면의 방정식을 주어진 데이터에 맞춰 피팅 시키는 것.
decision tree는 각 공간(feature)에서 기준을 하나씩 잡고 공간을 분해. 독립한 공간에서 판단 기준 하나를 찾고, 그것을 기준으로 공간을 나누어 각 class 공간을 구분. 앞서 전체 공간에 대해서 식을 찾은 방법과 달리 한 feature에 대해서 기준으로 트리를 만드는 것
이 때 각 기준을 순서대로 적용하여 비대칭적으로 공간을 나눌 수 있다.
단, 이 때 반드시 두 feature 공간은 통계적으로 독립해야 성립한다.
주어진 데이터에 대해서는 잘 맞지만, 성향이 다른 데이터를 가져와서 하면 잘 안맞을 수 있다. (training set에 특화된다) 또한 데이터가 너무 많으면 트리가 너무 깊어져 효율적이지 못할 수도 있다. (많은 데이터를 사용하면 특화가 좀 약해지지만 비효율적)
따라서 이런 단점을 고치기 위해 랜덤하게 소수씩 뽑아서 여러 트리를 만들고, 이들을 합쳐서 일반화 시키는 random forest를 사용할 수 있다.
learning : deterministic (데이터를 구성하는 전체 공간에서 결정을 내림. 모든 공간을 예외 없이 나눔), generative (전체 데이터를 구성하는 공간을 유효한 판단 구간만 정의하여 나눔)
기계와 같이 작동 범위가 한정되어 있다면 deterministic을 선택한다. generative 모델은 빈 공간, 판단 유보가 가능한 상황일 때 사용한다. (언어모델)
deterministic은 conditional probability(이제까지 했던 베이어, 두 클래스 차이의 확률 계산), generative는 joint probability(설정한 값 이상일 때 판단)를 사용한다.
베이지안과 결정 트리는 둘다 deterministic 모델이지만, 베이지안은 가우시안을 사용하여 풀어낸 것이고 결정 트리는 확률 값 비교를 트리에서 발생하도록 만들어 낸 것이다.
약간 다른 점은 이전에는 포괄적 X에 대해서 판단했다면, 이제는 각 차원의 X를 차례로 판단하게 된다. (트리에는 계층구조가 존재하므로) 단, 결정트리 방식은 feature vector X가 모두 독립일 때만 판단이 가능하다.
어느 feature를 먼저 선택하여 분류하느냐에 따라 트리의 효율이 달라지게 된다.
각 feature로 판단했을 때 더 이상 판단이 필요하지 않고 완전히 구별되는 세트가 많은 경우를 사용하는 것이 더 좋다. (엔트로피를 가장 많이 낮출 수 있는 방향으로 움직이는 데이터를 먼저 사용하는 것이 좋다)
decision tree는 간단하고 빠르기 때문에 classifier로 많이 사용한다. 그러나 성능에 대한 문제점이 있을 때 이를 극복하기 위해 앙상블을 사용한다. (여러 개의 트리를 만들어 결합 - random forest가 대표적)
트리에서는 greedy를 제외하고 그 외를 계산할 방법이 없기 때문에 (NP complete problem) 이를 사용한다. global optimal은 아니더라도 적당히 좋은 값을 얻을 수 있다.
이 때 트리를 만드는 방법은 지난 시간에 했듯이 entropy와 IG를 이용해 트리의 모양을 가장 간단하게 만드는 방법도 존재하지만, 결정을 했을 때 오류가 가장 작도록 만드는 방법도 있고(error, MSE - 거리), 결정의 결과가 하나의 집단(label)을 표시하도록 만드는 방법도 있다. (purity, homogeneity max / gini impurity를 이용한 확률로 측정)
앙상블 -> SVM -> DL/NN 등등 순서로 발전. 우리가 어떤 방식이 필요한 상황이 계속 바뀌었기 때문에 이런 변화가 발생. 데이터가 커지고 computing power가 세지면서 계속 발전해감. 최근은 discriminant에서 generative로 변화해간다. 예전에는 데이터의 모든 공간을 구분하여 결정하려고 했지만, 요즘은 데이터 공간 중에 필요한 부분만 분류해가는 방식으로 바뀌어 간다. (데이터량이 거의 전수가 되어 전체를 모두 대변해줄 수 있어졌기 때문 - 유효 구간을 찾아 내가 쓸만할 영역을 뽑아내는 것이 주가 됨.)
그러나 이런 것들은 판단을 못내리는 구간이 발생하고 판단의 유보가 발생하여 잘못된 답을 낼 수도 있다. 이렇게 되면 사람과 비슷해지는 것과 같다.
트리의 overfitting을 막는 방식은 일정한 수준에 도달하면 분리를 멈추는 regularization이다.
Forest : 큰 데이터에서 바로 전체 트리를 만들지 않고 데이터를 나누어 나눈 부분에 대한 트리를 각각 만들어 각각의 답을 보고, 가장 많이 나온 것을 선택하면 된다.
이 떄 트리를 같은 방식으로 형성하면 (MSE 등) 다르게 형성해도 비슷한 결과가 나올 수 있으므로 형성 방법도 랜덤하게 선택하고, 학습 데이터 세트도 랜덤하게 선택하고, feature의 순서도 랜덤하게 선택하여 만드는 것이 random forest이다. 이 방법을 사용하면 overfitting 문제와 성능 저하 문제를 동시에 해결할 수 있다. (트리의 모든 선택 요소를 랜덤화하여 local minimum에 빠지는 것을 예방)
댓글
댓글 쓰기