※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.

 

<Dimensionality Reduction>

Dimensionality Reduction은 여러 feature를 하나의 feature로 변환하는 등의 방식으로 차원을 줄이는 것을 의미한다.

- Motivation 1 : Data Compression

Dimesionlity Reduction을 사용하는 이유 중 하나는 Data Compression이다.

말그대로 feature의 수를 줄이므로써 데이터를 압축하는 것이다.

 

이렇게하면,

(1) Memory, Disk 등의 자원을 효율적으로 사용할 수 있다.

(2) 알고리즘이 더 빠르게 동작할 수 잇다.

 

주로 (2)번의 이유가 핵심적이라고 볼 수 있다.

 

Data Compression의 예시

위 그림은 2차원 데이터를 1차원으로 압축한 예시이다. 2개의 변수를 조합하여 하나의 새로운 변수 z를 생성한다.

* 10,000차원 -> 1000차원으로 압축하는 등의 과정도 가능하다.

- Motivation 2 : Visualization

시각화는 3차원까지만 가능하기 때문에, 많은 feature를 압축하는 것이 시각화하는 것에도 유용하다.

다양한 feature를 갖는 국가 별 데이터
차원축소를 통한 시각화

국가별로 다양한 feature가 있어 특징을 시각화하기 어렵지만, 적절하게 두 개의 차원으로(z1, z2) 축소시켜 시각화할 수 있다.

그 결과 대략적으로 GDP가 어느 정도인지 GDP/person 은 어느 정도인지에 대한 정보를 파악할 수 있게 되었다. 

 

<PCA, Principal Component Analysis>

PCA는 Dimensinality Reduction에 자주 사용되는 알고리즘 중 하나이다.

 

데이터를 projection시킬 벡터를 찾는데, 

해당 직선(2차원에서 투영할 시)과 데이터 사이의 거리제곱의 합이 최소가 되는 벡터를 찾는다.

PCA 예시

예를 들어 위와 같은 데이터가 있을 때, l1으로 표시된 직선에 데이터를 projection하는 것이 l2로 표현된 직선에 projection하는 것보다 데이터와 직선사이의 거리 제곱의 합이 더 작을 것임을 알 수 잇다.

이때의 거리를 projection error라고 한다.

 

※ PCA와 linear regression의 차이

(좌)linear regression, (우) PCA

기본적으로 linear regression과 PCA에서 오차를 계산하는 방법이 다른 것을 알 수 있다.

또한 근복적으로도 다른 알고리즘이다.

 

- Preprocessing

PCA를 적용하기 전에는 다음과 같은 전처리를 수행해야 한다.

 

(1) Mean Normalization( 평균을 0으로, x:= x-m)

원점 지나는 vector를 찾는 과정이기 때문에 필요한 것으로 생각됨.

 

* PCA의 경우 수학적 증명을 많이 생략하였다. 자세한 이유는 수학적 내용을 살펴봐야 될듯.

 

(2) Feature Scaling (scale 차이가 큰 경우)

feature sacling은 변수의 variance를 최대한 보존하는 방향으로 수행되는데,

scale이 유독 큰 변수가 있는 등의 경우 해당 변수가 variance계산에 미치는 영향이 커지는 등의 문제가 발생하기 때문이다.

 

- 알고리즘 적용

수식과 라이브러리를 통해 PCA를 적용하는 법은 다음과 같다.

이하의 수식이 projection error를 최소화하는 수식과 동일한 내용이다. (증명은 생략하였음)

 

PCA 알고리즘

(1) sigma = covariance matrix를 계산한다. (nXn 크기)

*sum을 표시하기 위한 sigma와 다른 것에 주의

 

(2) 해당 matrix에 대한 singular value decomposition을 수행한다.

* Octave기준 svd 함수 사용,

* Covariance matrix의 경우, eigenvector를 찾는 것과 동일

 

(3) 결과로 나온 U 행렬 (nXn 크기)에서 k번째 열까지를 선택하여 $ U_{reduce}$ matrix로 사용한다.(nXk 크기)

*k는 축소 후 차원

 

(4) $ z^{(i)} = (U_{reduce})^Tx^{(i)} $,  kX1 크기의 차원이 축소된 데이터를 얻을 수 있다.

 

PCA 적용 정리

다시 한 번 정리하면 위와 같다.

 

- Reconstruction

압축했던 데이터를 다시 복원해야할 수도 있다.

 

압축에 사용됐던 식을 이용하여 복원을 수행할 수 있다.

$ z^{(i)} = (U_{reduce})^Tx^{(i)} $

임을 이용하여

$ x_{approx}^{(i)} = U_{reduce}z^{(i)}$

로 계산하면 된다.

(* U는 orthogonal 하기 때문에 transpose가 역함수와 동일하다고 한다. 따라서 위 식이 성립)

reconstruction

완전히 복원에 성공하는 것은 아니고, projection을 했던 형태 그대로 원래의 차원에 위치시킬 수 있다. 

따라서 $ x_{approx}$로 표시한다.

 

- 성능 평가, choosing k (# of principal components)

PCA를 수행할 때는 차원을 축소한 후에 variance가 얼마나 보존되는지가 중요하다.

 

따라서 다음과 같은 수식을 통해 k를 선택할 수 있다.

variance가 보전된 정도 평가

 

그렇다면 k를 하나씩 줄여가며 위 식을 모두 계산해야할까?

앞서 svd(Sigma)의 결과로 나왔던 S matrix를 이용하면 그렇지 않아도 된다.

 

(좌) k마다 복원 및 계산, (우) S matrix를 이용

좌측의 경우 k마다 계산을 반복해야 되는 reconstruction을 수행해야하는 번거로움이 있지만, 

우측은 matrix의 결과만을 이용하여 k를 선택할 수 있다.

 

S matrix는 대각행렬로 주어지고, 

검은색 사각형으로 표시한 식이 varinace의 보존 비율을 계산하는 식과 동일한 의미이다.

우측의 방법이 계산상 유리하다.

 

꼭 k를 선택할 때 뿐만 아니라, 어떤 k를 선택했을 때 variance가 얼마나 보존되었는지 나타내는 지표로도 사용할 수 있다.

* 이 부분 역시 수식에 대한 의미는 별도로 공부해야 할 듯.

 

- Applying PCA

PCA를 적용할 때 주의해야할 점이 있다.

 

PCA를 적용한 모델을 test할 때 test data도 같은 과정으로 압축을 수행해야 할 것이다.

즉, 앞서 x->z로 압축할 때, $ U_{reduce}$ matrix를 사용한 수식을 새로 들어오는 test 또는 validation data에도 적용을 해야한다. 

 

이때 $ U_{reduce}$ 행렬이 train 데이터로만 결정되어야 한다.

다시 말해 U = svd(sigma)로 계산되므로, sigma = Convariance Matrix가 training data로만 계산되어야 한다.

 

또한 잘못된 사용 예시도 존재한다.

 

(1) to prevent overtting

feature를 줄임으로써 overfitting을 방지하게 위해 PCA를 사용하는 것은 권장하지 않는다.

대신 regularization을 사용하는 것이 좋다.

 

PCA가 효과 있을 수도 있지만, 잃는 데이터가 존재하기 때문이다.

regularization은 잃는 데이터 없이 overfitting을 방지할 수 있으므로 이를 쓰는 것이 더욱 좋다.

 

(2) 무조건 PCA를 적용

PCA는 유용한 알고리즘이지만 앞서 말했듯이 잃는 데이터가 존재할 수 있다.

따라서 original 데이터로 사용해서 발생한 문제를 PCA로 해결할 수 있을 때만 사용하는 것이 좋다.

ex) 너무 많은 feature로 인한 속도 저하

※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.

 

<Clustring>

Clustring은 Unsupervised learning의 대표적인 예시로, labeled 되어있지 않은 데이터를 특정 집단으로 분류하는 알고리즘이다. 즉 input data의 y가 주어지지 않는다.

 

unpservised learning 예시

supervised learning에서는 두 데이터의 label을 보고 그것을 잘 구분하는 decision boundary를 찾는 방식이였다면, unsupervised learning에서는 label은 주어지지 않고, 알고리즘 스스로 군집을 분류한다.

 

<K-means algorithm>

K-means algoritm은 clustring을 수행하는 대표적인 알고리즘 중 하나이다.

 

알고리즘의 원리는 다음과 같다.

K-means 시각화 - 1

우선 위와 같은 데이터를 가정한다.

 

K-means 시각화 - 2

다음으로 임의의 점 두 개(몇 개의 집단으로 분류할 것인지에 따라 다름)를 선택한 후 해당 점과 거리를 기준으로 데이터를 분류한다. 

* 기준이 되는 점을 cluster centroids 라고 한다.

 

K-means 시각화 - 3

이렇게 데이터가 분류되고 나면, 다시 그 점들의 평균의 위치로 cluster centroids를 이동한다. 

 

K-means 시각화 - 4
K-means 시각화 - 5

계속하여 같은 과정을 반복하다가 더 이상 centroid의 위치가 변하지 않는다면 clustering을 마친다.

 

* 분류가 잘 된 시점에서는 centroid가 변하여도 더 이상 clustering에 차이가 발생하지 않는다. 이 후 평균을 계산하여 centroid를 위치하면 점들이 바뀌지 않기 때문에 같은 값이 나온다. 따라서 clustering이 완료된 것이다. 

 

위 과정을 확인하여 알고리즘의 동작 원리를 알 수 있다.

 

- K-means 구현

우선 K-means를 구현하기 위한 input은 2가지이다.

(1) 데이터( un-labeled)

(2) K (number of clusters)

 

K 또한 input으로 직접 선택해야 한다.

 

K-means 구현

앞서 살펴본 알고리즘의 동작을 코드로 작성하면 위와 같다.

 

①로 표시된 반복은 각 데이터를 어떤 cluster로 분류할지 계산하고 $ c^{i}$로 저장하는 과정이다.

해당 데이터와 가장 가까운 centroid를 선택한다. (square값을 계산하는 것과 그냥 거리를 비교하는 것에는 큰 의미가 없다)

 

②로 표시된 반복은 cluster 별로 평균을 계산하여 다시 centroid를 선택하는 과정이다. 

* 만약 어떤 데이터도 cluster-k로 선택되지 않았다면, 

해당 cluster를 제거하거나, random initizaliztion하는 방법을 선택한다.(많이 발생하는 경우는 x)

 

위 과정을 centroid가 고정될 때까지 반복하면 된다. 

 

- Optimization Objective

앞서 supervised learning에서도 항상 cost function을 정의했듯이, 

K-means algoritm에서도 optimization objective, cost function이 존재한다.

 

알고리즘의 구현 과정에 cost function이 사용되진 않지만, cost function을 최적화하는 과정과 앞서 설명한 구현이 결국 같은 내용이다.

 

또한 cost function을 정의하면 알고리즘이 제대로 동작하는지 debug할 수 있다.

 

cost fuction은 다음과 같다.

Distortion function

K-mean algorithm에서 cost function을 distortion function이라고도 한다.

 

앞서 ①로 표시한 과정은 centroid를 고정시킨 상태에서 J를 최소화하는 과정이고, 

②로 표현한 centroid를 평균으로 이동하는 과정에서도 J는 작아질 수 밖에 없다.

 

* 수학적으로 디테일하게 풀 수도 있지만 생략, 직관적으로도 이해할 수 있음

ex) (1, 0), (5, 0) 과의 거리 제곱의 합이 가장 작은 점은 그 평균인 (3, 0)임.

 

결론적으로, J는 알고리즘을 수행하는 과정에서 증가하는 경우가 발생하면 안된다.

(증가한다면 구현에 문제가 있는 것)

 

- Random Initialization

centroid를 임의로 초기화할 때, 조금 더 좋은 방법이 있다.

성능을 보장하는 방법은 없지만, input data 중에서 서로 다른 k개를 선택하는 방법이다.

 

 

그렇게하더라도 초기화를 어떻게 하는지에 따라 다음과 같은 문제가 발생할 수 있다.

K-means 알고리즘의 3가지 다른 결과

K-means 알고리즘은 local optima를 갖는다. 어떤 centroid로 시작하는지에 따라 다른 결과가 나올 수 있다.

 

그렇기 때문에 최선의 방법은 서로 다른 initialization에 대해 알고리즘을 여러 번 수행하는 것이다.

(대략 50-1000 times까지도.)

이렇게 하는 것이 항상 global optima를 보장하는 것은 아니지만 local optima를 찾더라도 꽤 낮은 J를 갖는 값을 찾을 가능성이 크다.

 

* K에 따라서도 차이가 있다. K가 작다면(2-10 정도) 여러번 적용해보는 것이 큰 향상을 줄 가능성이 크다.

K가 크다면 여러번 적용해보지 않더라도 처음부터 괜찮은 성능을 보여줄 가능성이 크다. 그렇기 때문에 여러번 적용할 경우 향상은 기대해볼 수 있지만 큰 차이는 없을 가능성도 크다.

 

- K, # of cluster 선택

앞선 예시들은 간단한 형태로 시각화를 통해 대략 어느 정도의 분류가 필요할지 확인할 수 있었다.

그러나 실제 데이터는 시각화가 쉽지 않은 경우가 많고, 또한 그렇게 하더라도 명확하게 몇 개의 cluster가 있다고 말하기 어려운 경우도 있다.

그렇다면 K는 어떻게 선택해야할까? 

이 문제에 대해 명확한 해결책은 없지만 다음과 같은 점을 고려해 볼 수 있다.

 

(1) Elbow Method

Elbow method

한가지 방법은 Elbow method를 이용해보는 것이다. 위 그림의 좌측 그래프와 같이 변화량이 작아지는 지점을 선택하는 것이다. 그러나 오른쪽과 같은 그래프에 대해서는 적용할 수 없다.

 

* K가 증가할수록 J는 감소한다. 다만, local optima가 계산된 경우에서는 그렇지 않을 수 있다.

 

(2) purpose of clustering

clustering의 목표를 기준으로 K를 선택할 수도 있다.

예를 들어, 위와 같이 신체 조건에 따라 옷의 size를 clustring한다고 해보자.

 

clustring의 목표가 상품판매이고, 

만약 5개의 size로 구분했을 때 판매량이 증가했다면, K=5로 선택할 수 있다.

또는 3개의 size로 구분했을 때 순수익이 더욱 증가하여 더 좋다고 평가한다면, K=3으로 선택할 수 있다.

 

K의 선택에는 automatic한 알고리즘이 없기때문에, 위와 같은 방법들을 적용해보는 것이 좋다.

 

※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.

 

<Support Vector Machine>

- Optimization, Cost Function 

logistic regression에서는 $ \theta^Tx $가 0 이상이면 1(hypothesis(x) >= 0.5 ), 그렇지 않으면 0으로 판단했었다.

 

SVM을 통해서는 y가 1일 때 , hypothesis의 값도 단순히 0.5를 기준으로 판단하는 것이 아니라 실제 1에 근접한 수가 되기를 목표로 하고, 반대로 y가 0이라면 hypothesis 또한 0에 근접한 수가 되기를 목표한다. 

 

그를 위해 기존 logistic regression에서의 cost를 조금 변형한다.

SVM의 cost 함수( cost function J가 아님)

y가 1이라면 z가 1 이상일 때는 0, 그 이하에는 직선이 되는 위 그림의 좌측 그래프와 같은 cost 를 정의하고, y=0인 경우는 오른쪽 그래프와 같이 z 가 -1 이하라면 그 값이 0이 되는 함수를 정의하는 것이다.

(각각 cost1, cost0)

 

위 cost를 도입하여 최정적으로 SVM의 cost function을 정의하면 다음과 같다.

SVM의 cost function

logistic regression에서의 cost function과 거의 유사하다.

우선 cost를 새로 도입하고, 기존 식에 포함되었던 1/m은 제거하였고(m을 곱해도 optimization 후 파라미터에 영향x), 같은 원리로 $ C = \frac{1}{\lambda } $를 곱해주면 된다.

 

SVM의 hypothesis 는 다음과 같다.

$ h_\theta(x) = 1 (\theta^Tx \geq  0) $

$ h_\theta(x) = 0 (\theta^Tx <  0) $

Logistic Regression의 hypothesis는 sigmoid function을 통해 확률을 계산했던 반면, SVM에서는 단순히 1, 0 만을 결과로 갖는다.

 

- Large Margin Classifier

SVM은 Large Margin Classifier라고 불리기도 한다.

Margin은 decision boundary와 가장 가까운 데이터 사이의 거리를 의미한다. 

Margin 시각화

즉, 위의 그림처럼 여러 decision boundary가 이용될 수 있지만, SVM을 통해서는 margin이 가장 큰 decision boundary가 가장 선택된다는 것이다. 

 

SVM의 cost function

앞서 살펴보았던 cost function에서 C를 큰 값으로 설정하면, optimization은 안의 값을 0으로 만드는 방향으로 이뤄질 것이다. $ \theta^Tx $가 1 이상이거나 (y = 1), -1 이하(y = 0)가 되도록 만들면 아예 0이 될 수 있도록 cost 함수를 정의했기 때문에 가능하다.

 

그렇게 된다면(C가 충분히 크다면) cost function은 다음과 같이 단순화될 수 있다.

C가 큰 경우 cost function, 밑의 추가 조건 주의

단, 기존 cost function에서 앞의 항을 0으로 만든다는 조건이 있었기 때문에

$ \Theta^Tx \geq 1 $ (if y = 1)

$ \Theta^Tx \leq -1 $ (if y = 0)

을 만족해야 한다.

 

왜 C가 충분히 커서 위와 같은 cost function으로 만드는 것이 Large Margin을 유도하는지에 대해서는 수학적으로 확인할 수 있다.

 

- Large Margin이 되는 이유 -> 수학적 관점

우선 inner product에 대해 정리하자면 다음과 같다.

2차원 vector 예시

u와 v의 inner product는 의미는 같다. 

v를 u에 정사영한 vector의 크기(음수 가능)와 u의 크기를 곱하는 것

이를 수식으로 계산하면 다음과 같다. 

$ u^Tv = p*\left \| u \right \| = u_1v_1 + u_2v_2 ( +...) $

위 식에서 p가 v를 u에 정사영하여 생긴 vector의 크기를 의미하고 정확히는 $ vcos(\theta) $로 계산된다.

 

이제 다시 SVM의 cost fucntion을 살펴보자.

SVM의 cost function과 inner product

위 inner product의 의미를 의식하여 보면,

$ \theta^Tx $는 theta와 input data x의 inner product임을 알 수 있다.

즉, input data를 $ \theta $에 정사형한 벡터의 크기와 $ \theta $의 크기의 곱으로 계산된다.

 

이제 다음 2가지 사항만 고려하면 왜 large margin이 결정되는지 이해할 수 있다.

(1) $ \theta $는 decision boundary와 perpendicular하다. 

-> decision boundary는 z = 0인 점들을 이은 선이다(at logistic regression : h(x) = 0.5 ).

즉, decision boundary위의 임의의 점 x에 대해 $ \theta^Tx = 0 $를 만족하기 때문.

(더 정확히는 decision boundary 위의 두 점 a, b에 대해 $ \theta^Ta - \theta^Tb = \theta^T(a-b) = 0 $ 을 만족, perpendicular)

 

(2) cost function에서 알 수 있듯이 $ \theta$ 를 minimize하면서 $ p^{(i)}\cdot \left \| \theta \right \| $ 가 1 이상인 것을 만족하려면(y = 0 인 경우면 -1 이하) p, $ \theta$에 x를 정사영시킨 벡터의 크기가 커야한다.

 

이를 그림으로 표현하면 더욱 직관적으로 이해할 수 있다. 

decision boundary와 $\theta$가 수직인 점을 생각해보면, decision boundary로 빨간선을 선택했을 때와 파란선을 선택했을 때 \$theta\에 가장 가까운 데이터가 어떻게 정사영되는지 알 수 있다.

위의 (2)번 문항에서 p가 margin에 대응된다. 따라서 margin이 클수록 cost function을 최소화하는 $ \theta$가 선택되는 것이다.

 

 

<Kernel>

Kernel은 landmark과의 similarity를 기준으로 기존 feature를 바탕으로 새로운 feature를 생성해주는 함수이다.

Kernel을 적용하여 non-linear한 decision boundary를 만들 수 있다.

(Landmark는 similarity를 평가할 때 기준이 될 임의의 점이다.)

 

kernel을 통한 non-linear한 boundary

f1~f3는 각각 landmark1~3에 대한 similarity(gaussian kernel, 유클리안 거리로도 볼 수 있음)를 나타낸다.

파라미터가 위 이미지처럼 설정되어있다면 l1과 l2에 근접한 데이터만 1로 predict할 것이고, 최종적으로 2개의 원을 겹쳐놓은 것 같은 non-linear한 decision boundary를 만들 수 있다. 

 

* SVM의 cost function 때문에 가끔 $ \theta^Tx $가 1, -1을 기준으로 predict 해야되는 것이 아닌지 헷갈릴 수 있는데, 1, -1은 traing 시에 파라미터를 설정하기 위한 것이고 예측은 동일하게 0을 기준으로 한다.

 

여기서 similarity는 gaussian kernel을 통해 계산되었다. 대부분의 경우 사용되는 kernel이다.

kernel(gaussian kernels)

*시그마는 표준편차가 아니라 단순히 계산에 사용될 parameter 이다.

 

- Landmark 선택

그렇다면 Landmark는 어떻게 설정해야 할까. 

결론부터 얘기하자면 train data를 모두 landmark로 사용하면 된다.

landmark를 기준(+ $ \theta $)으로 data를 판단하게 되기 때문에, train data를 사용하는 것이 어떻게 보면 당연하다.

 

그렇기 때문에 kernel을 사용하면,

m개의 train data에 대해서 feature는 m개로 변하게 된다.

(각각의 feature는 landmark-(i)와의 similarity를 기준으로 결정되므로 m개의 featrue)

 

그렇기 때문에 cost function 또한 다음과 같이 변한다는 것에 주의해야 한다.

kernel을 이용한 cost function

 

※ 실제로 cost function을 계산하는 라이브러리 등에서는 우측의 parameter 제곱의 합을 matrix의 연산으로 계산하지만, 추가적으로 다른 matrix를 곱하여 계산한다고 한다.

-> 계산적인 측면에서 큰 차이를 보인다. 그러나 logistic regression에서는 이러한 개선이 어렵기 때문에 kernel은 SVM에서 소개하였다.

-> logstic regression에서 사용이 어려운 자세한 이유를 알아보려 했지만, 강의를 듣는 현 시점에서는 logistic regression에서도 kernel을 적용하는 경우도 있는 것 같았다. 

 

- SVM의 paramater(C , $ \sigma $) 선택

parameter를 어떻게 선택하는지에 따라 bais, variance 문제와 관련이 있다.

 

(1) C

C는 logistic regression에서 regularization parameter, 람다의 역수와 동일하게 볼 수 있다.

-> C가 크다면 regularization이 적게 이뤄지고, C가 작다면 regularization이 크게 이뤄진다.

 

즉, C가 크면 lower bias, high variance

C가 작으면 higer bias, low variance이다. 

 

(2) $\sigma^2$

※sklearn의 SVC 에서는 gamma parameter가 반비례 관계로 대응된다.

 

gaussian kernel을 이용하면 $ \sigma$도 설정해야 한다.

 

시그마의 설정에 따른 bias,variance

우측의 그래프가 sigma에 따른 gaussian kernel 의 차이를 보여준다. 

시그마 제곱이 크면 1에 근접한 범위가 넓다 -> similarity를 잘 인정해준다. -> bais가 크고, variance가 작다.

반대의 경우도 같은 원리로 생각할 수 있다.

 

 

- SVM의 사용

SVM을 사용할 때는 잘 정리된 패키지를 사용하는 것을 권장한다.

(cost function optimization의 구현에 행렬 연산 구현 등이 필요한듯, optimization function은 convex한 것은 동일하다)

 

(1) parameter 선택?

앞서 다룬 내용대로 bias, variance를 고려하여 알맞게 고르면 된다.

 

(2) Kernel의 선택?

kernel을 사용하지 않는 linear kernel 또는 Gaussian Kernel을 가장 일반적으로 사용한다. 

 

linear kernel의 경우 m은 크고 n은 작을 때 사용한다. (데이터의 수는 작고, feature의 수는 많음)

 

Gaussian Kernel의 경우 feature는 작고, m은 클 때 사용한다.

특히, Gaussian Kernel을 사용할때는 feature scaling이 필수이다. 

scaling을 하지 않아 혼자 scale이 큰 feature가 있다면, 그 feature가 similarity를 결정하게 될 것이다.

 

* 이 외에도 polynomial kernel 등 다양한 커널이 있다. 

 

(3) logistic regression vs SVM

logistic regression 모델과 SVM 모델은 유사한 점이 많은데, 그렇다면 어떨 때 사용해야 어떤 모델을 사용해야 할까?

logistic regression과 SVM 중 선택

● n이 m에 비해 큰 경우, 

logistic regression이나 SVM without kernel을 사용하면 좋다. 

-> 우선 feature는 충분하여 두 모델 모두 적용이 가능하지만, data가 적기때문에 매우 복잡한 non-linear function을 적용하기에는 적합하지 않다.

 

● n은 작고, m은 적당한 경우

Gaussian kernel SVM.

-> feature가 많지 않다면 logistic regression은 적합하지 않을 수 있고(high bias), 많은 데이터도 SVM을 통해 non-linear하게 설명가능. 또한 m이 적당하다면 gaussian kernel을 적용하는 것에 연산적 부담이 적음(50,000 이상부터는 부담될 수 있음)

 

● n이 작고, m이 매우 큰 경우

다시 logistic regression이나(create more feature는 필요) SVM with linear kernel을 사용하면 좋다.

-> 우선 앞서 말했듯이 m이 50,000 이상이라면 가우시안 커널을 적용하는 것은 무리가 있음.

그러나 n은 작기 때문에 logistic regression이나 SVM without kernel을 사용하되 추가적인 feature를 생성해야 함.

 

추가로, Neural Network는 모든 경우에 적용해볼 수도 있지만, 비교적으로 연산이 느릴 수 있다.

또한 실제로 문제가 되는 경우는 거의 없지만, local minimum이 존재한다는 차이도 있긴하다.


※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.

 

<프로젝트 진행 순서 정하기>

예를 들어, spam 메일을 분류하는 프로젝트를 진행한다고 하면 다음과 같이 수행할 수 있을 것이다.

프로젝트 예시

feature로 특정 단어(spam에 주로 있는 단어들)가 메일에 포함되어 있는지 여부를 선택하고 이러한 데이터를 통해 모델을 생성할 수 있을 것이다.

 

그런데 모델이 많은 오류를 보이면 어떻게 해야할까.

성능 개선 방법 예시

위와 같은 방법들이 있을 것이다. 하지만 어떠한 방법이 모델을 개선할 수 있을지 미리 알 수 없기 때문에 무엇부터 시작해야 될지 결정하는 것에 어려움이 있을 것이다. 이러한 문제들을 고려하여 강의에서 제안한 프로젝트의 진행 순서는 다음과 같다.

 

- 프로젝트 진행 순서 

1. 간단하게 모델을 완성해보고, validation set을 통해 성능을 확인해본다.

2. learning curve와 같은 방법을 통해 data나 feature가 더 필요한지 검사해본다.(bias or variance 검사)

3. Error Analysis : 모델이 예측에 실패한 데이터를 집중적으로 살펴본다. -> 모델의 취약점 파악

 

3. Error Analysis를 통해 취약점을 찾더라도 해당 부분을 보완하는 것이 모델의 성능을 크게 향상 시킬 것이라는 보장은 없다. 따라서 numerical evaluation을 통해 개선 효과를 확인하는 것이 필요하다.

 

numerical evaluation 예시

예를 들어, stemming 문제를(universe, university와 같이 뜻은 다르지만 앞 단어가 비슷한 경우) 구분하기 위한 알고리즘을 적용했을 때 이전 5%에서 3%로 에러가 줄었다고 하면 해당 알고리즘은 유지하면 된다.

반대로 대소문자 구분을 적용하기 전과 후의 에러차이가 유의미하지 않다면 해당 알고리즘은 적용하는 것이 의미가 없을 것이다. 

 

즉, 보완점을 찾고 개선하더라도 얼마나 효과가 날지 미리 알 수 없기 때문에, 확실한 수치를 통해 전후의 효과를 확인한 후 비교하는 것이 좋다.

 

 

<Error Matrix, skewed data>

암 여부를 판단하는 모델을 개발한다고 했을 때, 만약 암 환자의 비율이 0.5% 정도밖에 안된다면 어떻게 될까.(skewed)

무조건 암이 아니다고 판단하는 모델(h = 0)을 만들어도 오류는 0.5% 밖에 되지 않는다. 그러다 당연히 해당 모델을 바람직하지 않다.

 

이러한 경우에서 알 수 있듯이 모델의 성능을 평가할 때는 precision과 recall 두 개의 지표를 모두 평가해야 한다.

각각의 의미는 다음과 같다.

  actual
predicted   1 0
1 True Positive False Positive
0 False Negative True Negative

error matrix

precision = TP / (TP + FP),

recall = TP / (TP + FN)

 

precision은 '1'로 예측한 것 중 제대로 예측한 비율,

recall은 실제 '1'인 것 중 성공적으로 예측된 비율을 의미한다.

 

둘 중 하나만 고려했을 때 생기는 문제는 다음과 같다.

 

(1) precision만 고려 - confidence한 경우에만 '1'로 판단 ex) logistic regression에서 threshold = 0.9.

-> 1이지만 0으로 판단하는 비율이 늘어날 것이다.

즉, precision은 높아지지만 recall은 낮아진다.

 

(2) recall만 고려 - '1'을 '0'으로 잘못판단하면 risk가 크기 때문에, threshold를 낮춘 경우

-> 0이지만 '1'로 판단한 비율이 늘어날 것이다.

즉, recall은 높아지지만 precision은 낮아진다.

 

위의 예시에서 확인할 수 있듯이 둘은 trade off 관계이고, 두 평가 요소 모두 유의미하다.

F1-score

그러나 평가요소가 2개라면 위와 같이 서로 다른 알고리즘이 성능을 보일 때, 어떤 알고리즘이 우월한 알고리즘인지 판단하기 어렵다. 따라서 위 식과 같이 F1-score를 이용한다. 

F1-score는 둘 중 하나라도 0에 가까운 값을 갖는 경우 0에 가까워진다. 

* precision과 recall의 평균을 사용하는 경우 algorithm3 가 좋게 평가되지만, recall은 모두 '1'로 평가하는 알고리즘의 경우가 algorithm3 같은 경우이므로 바람직하지 않다.

 

<Data for Machine Learning>

앞서 bais, variance 문제를 다루면서 데이터를 무작정 늘리는 것이 성능 향상을 보장하지 못한다고 했지만, 그렇게 하는 것이 성능 향상에 도움이 되는 경우도 당연히 존재한다.

 

다음 그림은 데이터의 크기 변화에 따라 알고리즘을 평가한 유명한 실험이라고 한다. 

x축은 data size, y축은 accuracy

 

앞서 bias, variance 문제에서도 다뤘지만, 데이터를 추가하는 것이 도움이 될지 안될지 판단하는 또 다른 직관적이고 유용한 사고로는 '사람(전문가)이라면 그 문제를 해결할 수 있는가' 에 대해 생각해보는 것이다.

useful test

예를 들어, 부동산 전문가라도 주택의 가격을 크기만으로 결정할 수는 없을 것이다. 위치, 방의 수, 상태 등을 모두 고려해야 그때서야 부동산 전문가도 가격을 예측할 수 있을 것이다.

 

결론부터 정리하면,

feature가 충분할 때 데이터가 많아질수록 좋은 효과를 볼 수 있다.

앞서 variance 문제일때 데이터를 늘리는 것이 도움이 된다고 한 것과 같은 이유이다.

 

feature가 충분하지 않다면 모델은 당연히 데이터가 많더라도 높은 bias를 갖을 것이고,(설명 불가)

데이터가 충분하지 않다면 과적합문제가 발생할 것이다.

ex) 100차항 까지 있는데 데이터가 100개라면 모두 fitting할 수 있음(overfittiing)

따라서 데이터를 늘리는 것이 과적합 문제를 막는 것에 도움이 된다고 할 수 있다. 

 

 

 

+ Recent posts