데이터과학 유망주의 매일 글쓰기 — 아홉번째 일요일

배우는 자(Learner Of Life)
27 min readNov 8, 2020

--

가장 널리 쓰이는 11가지 머신러닝 알고리즘

# 머신러닝, #알고리즘, #지도학습, #비지도 학습

오늘 한일:

어제는 “가장 널리 쓰이는 10가지 머신러닝 기법들”에 대해 알아보았다. 그렇다면, 각 기법들에 가장 널리 쓰이는 알고리즘은 무엇일까? 오늘 마침 이에 대한 좋은 기사를 찾았다. (참조: 11 Most Common Machine Learning Algorithms Explained in a Nutshell, Soner Yıldırım)

그래서 오늘은 이 기사를 통해 가장 널리 쓰이는 머신러닝 알고리즘에 대해 알아보고, 글을 쓰기로 했다. 오늘 글에서는 가장 유명한 11가지의 지도학습 및 비지도학습 알고리즘을 소개한다.

가장 널리 쓰이는 11가지 머신러닝 알고리즘

머신러닝 알고리즘은 보통 크게 3가지 그룹으로 나뉘어진다.

  • 지도학습 알고리즘: 특성들(독립변수)과 관측값의 타깃(종속변수)간의 관계를 모델링한다. 이후 모델은 특성들을 활용하여 새로운 관측값들의 라벨을 예측한다. 타깃 변수의 특성에 따라, 분류(discrete(비연속적) 타깃 변수) 또는 회귀(continuous(연속적) 타깃 변수)로 분류된다.
  • 비지도학습 알고리즘: 라벨이 없는 데이터의 구조를 파악하는 것
  • 강화학습: 행동-보상 체계로 이루어진 학습이다. 모델은 에이전트를 통해 행동에 대한 보상을 반복적으로 학습하며 목표를 달성하는 방법을 배운다.

이 블로그에서는 지도학습 및 비지도학습에서 가장 널리 사용되는 11가지 알고리즘을 소개한다. 딥러닝 또한 머신러닝의 일부라 볼 수 있지만, 훨씬 더 복잡한 알고리즘이 많고, 글이 너무 길어질 수 있으므로 다루지 않는다.

목차

1. 선형 회귀(Linear Regression)

2. Support Vector Machine(SVM)

3. Naive Bayes

4. 로지스틱 회귀(Logistic Regression)

5. K-Nearest Neighbors (KNN)

6–1. 결정 트리(Decision Tree)

6–2. Random Forest

7. Gradient Boosted Decision Trees(GBDT)

8. K-Means Clustering

9. Hierarchical Clustering(위계적 클러스터링)

10. DBSCAN 클러스터링

11. Principal Component Analysis (PCA)

1. 선형 회귀(Linear Regression)

선형 회귀는 지도학습 알고리즘으로써, 연속적인 타깃 변수와 하나 이상의 독립변수(특성)와의 관계를 모델링한다. 모델링은 데이터 전체를 가장 잘 표현할 수 있는 선형 공식을 학습하는 형태로 이루어진다.

독립변수와 타깃(종속변수) 사이에 선형 관계가 정의될 수 있다면 선형회귀는 알맞은 선택이라 볼 수 있다. scatter plots 및 correlation matrix 등 선형 회귀 관계를 정의하기 용의한 도구들을 사용하면 좋다. 예를 들어, 아래의 scatter plot은 독립 변수(x축)과 종속 변수(y축) 사이에서 양의 상관관계를 나타낸다. x축의 변수와 y측의 변수는 서로 비례한다.

선형 회귀 모델은 데이터간 관계 및 상관관계를 가장 잘 표현할 수 있는 선을 학습한다. 가장 널리 쓰이는 방법은 ordinary-least squares (OLE)라는 방법이다. 이 방법을 통해, 데이터와 선 사이의 거리에 대한 sum of squares 를 가장 최소화 할 수 있는 선을 찾는다.

선형 회귀 문제에서는 데이터를 가장 잘 표현하는 선을 찾는 것이 중요하다 (1)

2. Support Vector Machine(SVM)

Support Vector Machine은 지도학습 알고리즘이며, 주로 분류 업무를 위해 활용되나, 회귀 문제에서도 사용될 수 있다. SVM은 결정 경계(decision boundary)를 그리는 방법으로 클래스를 분류한다. SVM에서는 어떻게 이 decision boundary를 그리느냐가 가장 중요한 이슈다. 결정 경계를 생성하기전, 각 관측값(또는 데이터)는 n-차원에 그래프로 그려진다. “n”은 사용된 특성의 수를 말한다. 예를 들어, “length” 및 “width”를 이용하여 다른 “cell”들을 분류한다고 하면, 관측값은 2차원으로 그래프되고 결정 경계는 선이 될 것이다. 만약 3가지의 특성들을 사용한다면, 결정 경계는 3차원에서 그려질 것이다. 만약 4가지 이상의 특성을 사용한다면, 결정 경계를 시각화하기 매우 어려울 것이다. 즉, 결정 경계가 그려지는 차원의 수는 사용되는 특성의 수만큼 달라진다고 볼 수 있다.

SVM에서 2차원의 결정 경계는 선이 된다. (1)

결정 경계는 support vector와의 거리가 최대화 될 수 있는 방향으로 그려진다. 결정 경계가 support vector와 너무 가까우면, 일반화가 매우 어려워진다. 독립 변수의 아주 작은 변화에도 민감해져, 타깃을 잘못 분류할 수 있기 때문이다.

물론 데이터를 위 그림처럼 항상 선형으로 나눌 수는 없다. 그럴 때 SVM은 kernel trick 이라는 것을 사용하여 더 높은 차원에서, 선으로 나뉘어 질 수 있는 데이터 사이의 유사성(또는 거리상 얼마나 가까운지)을 측정한다.

여기서 유사성은 데이터가 얼마나 서로 가까운지를 뜻한다. Kernel 함수는 유사성을 측정하는 형태의 기능이라고 볼 수 있다. 입력값은 원래 데이터이며, 출력값은 새로운 차원의 공간에서 유사성을 측정한다. 그러나, 데이터를 더 높은 차원으로 변환하는 것은 상당히 소모적인 일이다. 사실, SVM 알고리즘은 데이터를 더 높고 새로운 차원의 데이터로 변환하는 것이 아니다. Kernel을 활용한 SVM은 그 어떤 변환도 하지않고, 더 높은 차원에서 유사성을 측정하는 방법으로 결정 경계를 계산한다. 이것이 바로 이 방법이 kernel trick이라고 불리는 이유다.

SVM은 특히 차원의 수가 샘플의 수보다 더 많을 때 유용하다. 결정 경계를 찾을 때, SVM은 데이터 전체를 사용하기 보다는 일부 샘플을 훈련용으로 활용하기 때문에, 좀 더 메모리면에서 효율적이다. 하지만, SVM의 훈련 시간은 데이터셋의 크기에 비례하며, 시간이 더 걸릴수록 성능이 떨어지는 편이다.

3. Naive Bayes

Naive Bayes는 지도학습 알고리즘으로써, 분류 목적을 위해 사용된다. 그러므로, Naive Bayes Classifier라고도 불린다. 이 방법은 본래 현실적이지 않지만, 특성들이 서로 독립적이며, 특성들 사이의 그 어떤 상관관계도 없다는 것을 전제한다. 그래서, 특성들이 서로 관련이 없다는 전제는 매우 naive(순진한) 발상이기 때문에 이런 이름을 가지게 되었다.

또 하나의 키워드인 Bayes를 통해 유추할 수 있듯이, 이 알고리즘은 베이지안 정리(Bayesian Theorem)에 기반한다.

베이지안 정리
  • p(A/B): B가 발생함을 전제로 A가 발생할 확률
  • p(B/A): A가 발생함을 전제로 B가 발생할 확률
  • p(A): A가 발생할 확률
  • p(B): B가 발생할 확률

Naive Bayes Classifier는 주어진 특성값(예: p(yi | x1, x2 , … , xn))을 기반으로 클래스의 확률을 계산하는 것이다. 이를 베이지안 정리에 대입하면 아래와 같다.

다중 변수가 있는 문제에서의 베이지안 정리

p(x1, x2 , … , xn | yi) 는 라벨의 특정 클래스를 전제로 특정한 특성들의 조합(데이터의 행, 관측값)에 대한 확률을 말한다. 특성값들의 모든 다양한 조합에 대한 확률을 계산하기 위해서는 굉장히 큰 규모의 데이터셋이 필요하다. 이 문제를 극복하기 위해, naive bayes 알고리즘은 모든 특성들이 서로 독립적이라는 것을 전제한다. 또한, 분모denominator (p(x1,x2, … , xn))는 특정 관측값( p(yi | x1,x2, … , xn))을 전제로 특정 라벨에 대한 조건부 확률만을 표준화시키기 때문에, 없애서 공식을 단순화시킬 수 있다.

그렇다면 특정 라벨에 대한 확률( p(yi) )은, 아래와 같이 계산될 수 있다.

라벨에 대한 확률

특성들이 독립적이라는 것을 전제한다면, p(x1, x2 , … , xn | yi)는 아래와 같이 표현될 수 있다.

조건부 확률을 정의하면 위와 같다

특정 클래스 라벨을 전제로한 하나의 특성에 대한 조건부 확률(p(x1 | yi) )은 데이터를 이용하여 좀 더 쉽게 측정할 수 있다. 알고리즘은 각 클래스에 대해 독립적으로 확률 분포를 저장할 수 있다. 예를 들어, 5개의 클래스 및 10개의 특성들이 있다면, 50개의 다른 확률 분포가 저장되어야 한다.

모든 특성들이 서로 독립적이라는 전제는, naive bayes 알고리즘이 다른 복잡한 알고리즘들과 비교해 훨씬 빠르게 작동할 수 있게한다. 때로, 정확도 보다는 속도가 더 중요할 때가 있는데, 이럴 때 가장 유용하게 쓰일 수 있는 알고리즘이라 볼 수 있다. 한편으로는, 이 전제가 다른 알고리즘에 비해 정확성을 떨어뜨린다는 단점이 있기도 하다. 그래서 어떠한 알고리즘을 사용할 때는, 속도와 정확도가 서로 반비례하는 기회비용이 생긴다는 것에 유의해야 한다.

4. 로지스틱 회귀

로지스틱 회귀는 지도학습의 알고리즘으로써, 이진분류(binary classification) 문제에 적합하다. “회귀”라는 단어가 분류 문제와는 반대되는 느낌이지만, 여기서 “로지스틱”의 의미는 로지스틱 함수(logistic function)을 가리키며, 알고리즘에서 분류 역할을 담당한다. 로지스틱 회귀는 단순하면서도 상당히 효과적인 분류 알고리즘으로써, 두 가지 클래스로 분류가 필요한 작업에 널리 사용된다. 예를 들어, 이메일이 스팸인지 아닌지, 고객이 상품을 구매할 것인지 아닌지, 등등을 로지스틱 회귀를 사용해 예측할 수 있다.

로지스틱 회귀의 기본은 로지스틱 함수인데, sigmoid 함수라고도 불린다. 이 함수는 그 어떤 실수도 0과 1사이의 값으로 맵핑할 수 있다.

로지스틱 함수(sigmoid 함수)

예를 들어, 아래의 선형 공식을 구한다고 가정하자.

다중회귀문제에서의 선형공식

로지스틱 회귀 모델은 선형 공식을 입력값으로 삼아, sigmoid 함수와 log odds를 이용하여 이진 분류를 한다. 이후, 로지스틱 회귀를 대표하는 s모양의 그래프를 얻을 수 있다.

확률에 따른 예측값을 알 수 있는 s 그래프 (1)

위 그래프를 해석하는 방법은 다음과 같다. 예를 들어, 특정 이메일이 스팸일 확률이 95%, 또는 고객이 제품을 구매할 확률이 40%라는 결과가 나왔다. 대부분의 경우, 확률은 데이터를 분류하기 위해 사용한다. 만약 50% 보다 높은 확률이 나온다면, 양의 클래스인 “1”로 예측이될 것이고, 그렇지 않은 경우 음의 클래스인 “0”으로 예측이될 것이다. 스팸 문제에서는 “1”로 예측을 할 것이고, 구매문제에서는 “0”으로 분류하게 될 것이다.

그러나, 항상 50%의 확률을 기준으로 그 이상과 이하의 데이터들을 구분하는 것은 좋지 않다. 스팸 이메일의 경우, 이메일을 스팸으로 분류하려면 100%에 가까운 확신이 있어야 한다. 유저가 중요한 이메일을 놓칠 수 있기 때문이다. 그래서, 이메일은 보통 100% 확신이 없다면 분류를 하지 않는 편이다. 그러나 건강관련 분류 문제에서는, 확률이 낮아도 구분이 필요하다. 세포가 악영향을 끼친다는 것이 아주 조금만 의심되더라도, 그것을 놓쳐서는 안되기 때문이다. 그렇기 때문에, 문제에 따라 1이나 0으로 판단하는 기준이 다를 수 있다. 다행인것은, 로지스틱 회귀 모델을 사용할 때, 이 기준을 지정할 수 있다는 것이다.

5. K-Nearest Neighbors (KNN)

KNN은 지도학습 알고리즘으로써, 분류 및 회귀 문제에 모두 사용될 수 있다. 이 알고리즘은 데이터의 특정한 값이나 클래스가 주변 데이터에 의해 결정된다는 아이디어를 바탕으로 한다.

KNN 분류기는 “majority voting”원칙을 기반으로 데이터의 클래스를 정의한다. 예를 들어, k=5라면, 가장 가까운 5개의 데이터에 대한 클래스를 체크할 것이다. 그 중 가장 많이 나타난 주요 클래스(majority class)에 따라 클래스를 예측하게 된다. 비슷하게 KNN 회귀기(regressor)역시 5개의 가장 가까운 데이터들의 평균을 계산한다. 예를 들어 아래와 같이, 4개의 다른 클래스를 가진 데이터들을 가정하자. 그 아래는, K값에 따라, 분류 예측이 어떻게 달라지는지를 보여준다.

원래 데이터(1)
k=1일 때의 데이터(1)
k=5일 때의 데이터(1)

가장 최적의 K값을 고르는 것이 중요하다. K값이 너무 작으면 일반화가 잘 되지않아, 훈련 데이터에서의 성능은 좋아도, 새로운 데이터로 학습을 했을 때 급격히 성능이 떨어진다. 즉, 과적합(overfit) 모델을 얻을 수 있다. 반대로 K값이 너무 크면, 모델이 너무 과한 일반화로, 훈련 및 테스트 데이터 모두에서 둘다 좋은 예측을 할 수 없다. 즉, 과소적합(underfitting)한 모델을 얻을 수 있다.

KNN은 단순하고 해석하기 쉽다는 장점이 있지만, 그 어떤 전제도 하지 않으므로, 비선형 모델링에 적합하다. KNN은 모델이 모든 데이터를 저장해야하므로, 데이터의 양이 증가할수록 느려지기 때문에, 메모리면에서 비효율적이다. KNN은 또한 이상치에 민감하다는 단점이 있다.

6–1. 결정 트리(Decision Tree)

결정 트리는 데이터를 반복적인 질문에 따라 세분화하는 방법으로 만들어진다. 시각화를 통해, 좀 더 쉽게 데이터가 나뉘는 과정을 알 수 있다는 장점이 있다.

이 그림은 고객의 서비스 이탈율을 파학하기 위한 목적으로 만들어진 결정트리의 예를 보여준다. (1)

위 그림에서 첫 번째 분리는 월정액 정보를 기반으로 나눈다. 이후 알고리즘은 계속해여 연관된 질문을 통해 클래스 라벨을 분리한다. 트리가 깊어질수록 질문들도 더 자세하다.

결정 트리 알고리즘의 목적은, 각 분리단계에서 예측할 확률을 계속해서 높여, 모델이 데이터셋에서 최대한 많은 정보를 캐낼 수 있게 하는 것이다. 분리를 이런식으로 하는 이유는, 특성들이 무작위로 나뉘게 되면, 데이터셋에 대해 가치있는 인사이트를 얻기 힘들기 때문이다. 트리는 불순도(impurity)를 기반으로 성능을 평가할 수 있는데, 분리가 이 불순도를 낮출수록 각 노드가 더 정확한 정보를 가지고 있다고 볼 수 있다. 이 불순도는 각 노드의 다른 클래스의 분산에 비례한다. 그러므로, 트리의 각 분리 단계에서의 질문들은, 이 불순도를 낯출 수 있는지 없는지에 따라 결정된다.

그렇다면 얼마나 질문들을 만들어야하며, 어디서 멈추어야 할까? 어느 정도까지의 분리가 분류 문제를 해결하기에 충분할까? 이 것은 모델의 과적합(overfitting)문제에 달렸다. 과적합 문제는 머신러닝모델링에서 가장 중요한 이슈 중 하나이다. 모델은 모든 노드의 불순도가 충분히 낮아질 때까지 질문을 만들 수 있다. 하지만, 이 경우, 모델은 특정 데이터에만 좋은 성능을 내고 새로운 데이터에 대해서는 급격히 성능이 낮아질 수 있다. 결정 트리의 깊이를 설정할 수 있는 파라미터는 max_depth라는 파라미터가 있다. 결정트리 알고리즘은 scikit-learn이라는 라이브러리를 통해 사용할 수 있다.

결정트리의 또다른 장점은 특성들의 표준화가 필요 없다는 것이다. 또한, 숫자형, 범주형, 이진형 등 다양한 데이터 타입에 활용될 수 있다. 그러나, 이전에 언급했던 과적합의 문제가 있어, 보통 여러 트리를 앙상블하는 형태로 성능을 높인다. 결정 트리의 앙상블은, Random Forest라고도 불린다.

6–2. Random Forest

Random Forest는 여러 결정 트리의 앙상블 모델이라 할 수 있다. 랜덤 포레스트는 bagging이라는 방법을 사용하여 만들어지며, 여러 결정트리가 평행으로 결합되어 있다. 분류 문제에 사용된다면, 결정 트리들이 가장 많이 분류한 클래스를 결과로 채택하게 된다. 회귀 문제에 사용된다면, 각 leaf 노드에 대한 예측은 그 leaf의 타깃값들의 평균이라고 할 수 있다. Random Forest 회귀는 결정 트리들의 평균값을 찾는다.

Random Forest들은 단순 결정 트리와 비교하여 훨씬 더 정확하고 과적합의 문제에서 훨씬 더 자유롭다는 장점이 있다. 또한, Random Forest의 결정 트리는 서로 평행하기 때문에, 단순 결정 트리와 비교해서도 계산시간이 많이 더 걸리지 않는다.

Random Forest의 성능은, 얼마나 서로 상관관계가 없는 결정 트리들을 사용하느냐에 따라 달려있다. 비슷하거나 상관관계가 있는 트리들을 사용할 경우, 전체적인 결과는 단순 결정 트리를 사용할 때와 비교해 큰 차이가 없을 것이다. Random Forest는 bootstrapping특성 무작위성(feature randomness)를 통해, 상관관계가 없는 결정 트리들을 사용할 수 있다.

Bootstrapping이란, 훈련 데이터에서 선택한 샘플을 무작위로 선택하여 조합하는 방법이다. 이들은 bootstrap 샘플이라 부른다.

Bootstrap samples(bagging) (1)

Feature randomness란 Random Forest의 각 결정 트리의 특성들이 얼마나 무작위로 선택되는지를 나타낸 것이다. Random Forest의 각 결정 트리에 대한 특성의 수는 max_features라는 파라미터를 통해 제어할 수 있다.

Feature randomness (1)

Random Forest는 다수의 문제에 대해 상당히 정확한 모델이며, 표준화를 요구하지 않는다. 그러나, Naive Bayes같은 빠른 선형 모델에 비하면, 고차원의 데이터셋(예: 텍스트 분류 데이터)에 대해서는 그렇게 좋은 선택이라고 할 수 없다.

Bootstrap 샘플은 원래 데이터셋에서 무작위로 선택된 샘플들을 조합하는 방법으로 만들어진다. 각 결정 트리는 각 bootstrap sample을 이용해 훈련된다. 각 트리는 무작위로 선택된 샘플의 특성들을 사용한다(feature randomness). (1)

7. Gradient Boosted Decision Trees(GBDT)

GBDT는 앙상블 알고리즘으로써, boosting 방법을 사용하여 각 결정 트리를 결합한다. boosting이란, 여러 약한 학습 알고리즘(weak learners)을 결합하여 하나의 강한 (strong learner)를 만드는 방법이다. GBDT의 경우, 각 결정 트리가 weak learner들이다.

각 트리는 이전 트리의 에러를 최소화하려한다. boosting의 트리들은 약한 학습 알고리즘(weak learners)들이지만 직렬로 연결되어 있다. 각 트리는 이전 트리의 에러에 집중하게 되어, 전체적으로 상당히 효율적이며 정확한 모델이 된다. bagging과는 다르게, boosting은 boostrap sampling을 포함하지 않는다. 새로운 트리가 더해질 때마다, 처음 데이터셋과 비교해, 계속해서 에러가 보정된 버전의 데이터에 학습을 하게된다.

트리가 순서대로 더해지기 때문에, boosting 알고리즘은 배우는 것이 더 느리다. 보통 통계 학습에서는, 모델이 느리게 배울수록, 더 성능이 좋은 편이다. (1)

이 모델은 비용함수(loss function)을 가지고 있는데, 잔차(residuals)를 찾기 위해 사용한다. 예를 들어, 회귀 및 로그 손실(log loss)에 대해 사용되는 mean-squared error(MSE)는 분류 문제에도 사용될 수 있다. 중요한것은, 모델에 존재하는 트리는, 새로운 트리가 더해졌을 때에도 변하지 않는다는 것이다. 더해진 결정 트리는 현재 모델의 잔차를 학습하기 때문이다.

Learning rate 및 n_estimators는 GBDT의 가장 중요한 하이퍼파라미터들이다. Learning rate는 α로 나타내며, 단순하게 모델이 얼마나 빠르게 배우는지를 의미한다. 새로운 각 트리는 전체 모델을 보정한다. 이 보정의 정도는 learning rate를 통해 제어할 수 있다. n_estimator는 모델에 사용되는 트리의 수를 말한다. 만약 learning rate가 낮으면, 모델을 훈련시키기 위한 트리가 더 필요할 것이다. 그러나, 트리의 개수를 선택함에 있어서는 주의가 필요한데, 트리가 너무 많을 경우 과적합의 문제가 발생하기 때문이다.

GBDT는 분류 및 회귀 문제에서 모두 유용하며, Random Forest에 비해서도 더 높은 정확도를 보인다. 여러 조합의 특성들을 제어할 수 있으며, 전처리를 필요로하지 않는다. GBDT의 과적합 문제를 피하기 위해서는, 하이퍼파라미터를 튜닝하는데 있어, 주의가 요구된다.

GBDT 알고리즘은 매우 강력해서 XGBOOST, LightGBM, CatBoost등 여러 업그레이드된 버전이 있다.

주의(과적합에 관하여):

Random Forest와 GBDT의 가장 큰 차이점 중 하나는, 모델에서 사용되는 트리의 개수이다. Random Forest의 경우, 트리의 개수를 증가시키는 것이 과적합을 일으키는 요인이 되지는 못한다. 그러나, 어떤 시점에서 특정 수 이상의 트리를 더한다고 해서 특별히 모델의 정확도가 늘어나지는 않는다. 즉, 더 많은 트리를 더한다고 해서 성능이 줄어들지는 않지만, 높아지지도 않는다는 것이다. 그러나, 지나치게 많은 트리를 더하면 계산 시간에 영향이 있기 때문에, 역시 그리 좋다고 볼 수는 없다. 최소한 Random Forest에 있어서는, 트리를 더하는 것의 정도가 모델의 과적합에 있어 문제가 되지는 않는다는 장점이 있다.

반대로, GBDT의 경우, 더하는 정도는 과적합에 영향이 있다. 그러므로, 너무 많지도, 적지도 않은 최적의 트리의 개수를 더하는 것이 관건이다.

8. K-Means Clustering

클러스터링(clustering)은, 데이터을 그룹화하는 방법으로써, 비슷한 데이터를 같이 그룹한다. 그러므로, 데이터 사이의 유사성을 찾는데 집중하는 알고리즘이다. 클러스터링은 비지도학습 알고리즘으로써, 데이터에 라벨이 없는 문제에 활용된다. 클러스터링 알고리즘은 데이터가 가지고 있는 구조들을 찾아내는데 집중한다.

그러나 분명히 알아야할것은, 클러스터링은 분류가 아니라는 것이다. 분류 문제의 관측 데이터는 라벨을 가지고있다. 각 관측은 특정한 측정에 따라 분류된다. 분류 알고리즘은 관측값의 특성 및 지정된 클래스 사이의 관계를 모델링한다. 모델은 새로운 관측값의 클래스를 예측한다.

K-means clustering은 가장 널리 사용되는 클러스터링 기법으로써, 데이터를 k개의 클러스터들로 나눈다. 같은 클러스터에 포함된 데이터들은 비슷하며, 서로 다른 클러스터에 속한 데이터들은 더 거리가 멀다. 그러므로, 분리기반 클러스터링 기법이다. 두 데이터의 유사성은 둘 사이의 거리를 통해 결정된다.

K-means clustering은 클러스터 안의 반지름을 최소화하고, 서로 다른 클러스터들의 거리를 최대화한다. K-means 알고리즘은 클러스터의 개수를 결정하지는 못한다. K-Means를 사용할 때 설정해주어야 하는 부분인데, 사실 쉽지 않은 일이다.

4개의 클러스터를 가진 데이터

현실에서의 데이터셋은 훨씬 더 복잡하며, 클러스터가 서로 분명하게 나뉘어져있지 않다. 그러나, 이 알고리즘 역시 처음에는 클러스터가 없는 상태이지만, 반복적으로 클러스터를 찾아나간다. “기대 최대화(expectation-maximization)”를 기반으로한 알고리즘이다. 클러스터의 개수가 설정되면, 아래의 과정에 따라 알고리즘이 동작한다.

  1. 각 클러스터에 대해 무작위로 클러스터 중심(centroids)를 찾는다.
  2. 중심에 대한 각 데이터의 거리를 측정한다.
  3. 데이터를 가장 가까운 클러스터에 지정한다.
  4. 클러스터내 모든 데이터의 평균을 계산하여, 각 클러스터의 새로운 중심을 찾는다.
  5. 2–4 과정을 반복하여, 중심이 거의 변화가 없을 때 연산을 종료한다.

K-Means 클러스터링은 비교적 빠르고 쉬운 해석이 가능하다는 장점이 있다. 그러나, K-Means는 클러스터의 개수를 미리 지정해 주어야 한다는 점이 가장 어려운 부분이다. K-Means 알고리즘은 주어진 데이터에 대해 얼마나 많은 클러스터를 생성해야 하는지 스스로 추측할 수 없기 때문이다. 또한, 비선형으로 데이터를 나누어야 한다면, K-Means는 그다지 좋은 선택이 될 수 없다.

9. Hierarchical Clustering(위계적 클러스터링)

Hierarchical Clustering은 반복적으로 데이터를 그룹화하여, 클러스터의 트리를 만드는 방법이다. 위계적 클러스터링에는 2가지 대표적인 방법이 있다.

  • Agglomerative clustering(응집형 클러스터링)
  • Divisive clustering(분리형 클러스터링)

위계적 클러스터링의 가장 큰 장점 중 하나는, 클러스터의 개수를 지정할 수도 있지만, 그렇게 할 필요가 없다는 것이다.

응집형 클러스터링(Agglomerative)와 분리형 클러스터링(Divisive) (1)

응집형 클러스터링의 경우, 아래에서 위로가는 “bottom-up” 방식을 채택한다. 처음에 각 데이터는, 분리된 클러스터로 여겨진다. 이후 비슷한 클러스터들이 반복적으로 결합된다.

위 그림은 트리 기반의 dendrogram을 보여준다. 위계적 클러스터링에서는 클러스터들 사이에 관계를 시각화하기 위해 사용된다. (1)

위계적 클러스터링에 가장 큰 장점은, 클러스터의 개수를 지정하지 않아도 된다는 것이다. 그러나, 모든 데이터를 하나의 클러스터로 결합하는 것은 현명한 결정이 아니다. 클러스터의 결합 역시 최적화가 필요하다. Scikit-learn 라이브러리는 이를 위해 2가지 옵션을 제공한다.

  • n_clusters: 최대 클러스터의 개수
  • distance_threshold: 클러스터 관계의 연결에 대한 임계치. 만약 두 개의 클러스터들 사이의 거리가 이 임계치를 벗어날 경우, 클러스터들은 결합될 수 없다.

분리형 클러스터링에 대해 많은 설명을 하지 않은 이유는, 현실적으로 많이 사용되지 않기 때문이다. 간단히 설명하자면, 응집형 클러스터링에 정확히 반대되는 개념으로써, 모든 데이터를 포함한 하나의 큰 클러스터에서 시작한다. 이후 데이터는 각각의 다른 킄러스터들로 나뉘어진다. 위에서 아래로 가는 top-down 방식이다.

위계형 클러스터링은 항상 같은 클러스터를 만들어낸다. K-means의 경우, 중심이 어떻게 처음 정해지느냐에 따라, 서로 다른 형태의 클러스터들이 나올 수 있다. 그러나, K-Means와 비교해서 더 느린 알고리즘이다. 위계형 클러스터링은, 특히 사이즈가 큰 데이터셋에 대해서는 더 오랜 시간이 걸린다.

10. DBSCAN 클러스터링

이전의 분리(partition-based) 및 위계 기반(hierarchy-based) 클러스터링 방법과는 다르게, 밀도기반(density-based) 클러스터링 기법이다. 이러한 방식의 클러스터링은 좀 더 복잡한 형태의 비정규 클러스터(arbitrary-shaped cluster)와 이상치를 찾는데 있어 더 좋은 방법이 될 수 있다. 정규 클러스터 (normal-shaped cluster)는 분리 및 위계 기반 클러스터링에 적합하다.

비정규 클러스터(arbitrary-shaped cluster)의 예 1 (1)
비정규 클러스터(arbitrary-shaped cluster)의 예 2(1)

비정규 클러스터(arbitrary-shaped cluster)들. 확실히 이전의 클러스터와 비교해 모양이 더 복잡하다.

DBSCAN은 Density-Based Spatial Clustering Applications with Noise의 약자로, 비정규 형태의 클러스터를 찾거나 노이즈가 있는 클러스터(이상치)를 찾는데 매우 적합하다.

이 알고리즘은 “하나의 데이터는, 하나의 클러스터에 속한 데이터에 가까우면, 그 클러스터에 포함된다.”는 것을 기본 원칙으로 한다. DBSCAN에서 가장 중요한 2개의 파라미터들은 아래와 같다.

  • eps: 이웃을 규정하는 거리. 두 개의 데이터는 정해진 eps값 이하일 경우, 이웃(neighborhood)으로 볼 수 있다.
  • minPts: 클러스터를 정의하기 위한 최소 데이터의 수

이 두가지 파라미터를 기반으로, 데이터는 core point, border point, 또는 이상치(outlier)로 나뉠 수 있다.

  • Core point: 데이터 포인트를 기준으로 eps 반지름 안에 최소 minPts의 개수가 있을 경우 (포인트 자체를 포함하여), 그 포인트는 core point가 된다.
  • Border point: 데이터 포인트가 core point에 가깝고, 주변에 minPts보다 적은 수의 데이터 포인트가 있다면, border point가 된다.
  • 이상치(Outlier): 그 어떤 core point와도 가깝지 않고, core point도 아니라면 이상치로 판별한다.

DBSCAN은 클러스터의 개수를 사전에 정의하지 않아도 되며, 이상치에 민감하지 않고, 이상치를 잘 찾아낸다는 장점이있다. 그러나, 이웃의 적당한 거리를 계산하는 것이 쉽지 않은 경우도 있으며, 상당부분 도메인 지식을 필요로 한다.

11. Principal Component Analysis (PCA)

PCA는 차원 축소 알고리즘이며, 이미 존재하는 특성들의 정보를 유지하면서, 새로운 특성들을 만들어내는 방법이다. PCA는 사실, 비지도학습 알고리즘이이지만, 지도학습 알고리즘을 위한 전처리 방식으로써 많이 활용되기도 한다.

PCA는 데이터셋의 특성들로부터, 새로운 특성들을 찾아낸다.

주의: PCA는 선형 차원 축소 알고리즘이다. 비선형 방법을 위해서는 다른 알고리즘을 사용할 수 있다.

PCA의 목적은, 원래 데이터셋의 분산을 더 적은 특성을 사용하여 최대한 설명하려는 것이다. 새롭게 만들어진 특성은 principal components로 불리며, 원래 데이터의 분산 일부를 이용하여 이 component들의 순서들이 결정된다.

Principal components의 생성 (1)

원래 데이터의 선형 특성 조합(linear combination of original features)으로 principal components가 만들어진다.

PCA의 가장 큰 장점은, 원래 데이터보다 훨씬 더 적은 수의 특성들을 사용하면서도, 원래 데이터셋 분산의 상당부분이 유지된다는 것이다. Principal component들의 순서는, 이 원래 데이터의 분산이 얼마나 많이 설명 되는지에 따라 결정된다.

앞으로 할일:

오늘 블로그는 어제 글에 이어지는 성격으로, 가장 널리 쓰이는 머신러닝기법들에 대한 머신러닝 알고리즘들을 알아보았다. 알면 알수록 이 분야가 양자역학 못지 않게 정말 확장성이 크다는 생각이 든다. 동시에, 정말 흥미롭다는 생각도 많이 든다.

오늘 이 글을 쓰기 위해 원본 기사를 읽고 공부하여, 최대한 이해하고 글을 쓰는 것이 쉽지는 않았지만, 덕분에 PCA, K-Means, 로지스틱 회귀 등등 내가 배운 것들을 좀 더 깊게 알게된 시간이었다. 또한, 이제까지 이름만 듣고 아직 실체를 몰랐던 K-Nearest Neighbors(KNN), Support Vector Machine (SVM) 등에 대해서도 알 수 있었다.

앞으로도 시간이 날 때마다, 더 심화된 개념의 머신러닝 기법들과 알고리즘을 탐구해야 겠다는 생각이 든다. Kaggle에서도 Machine Learning 관련 과정을 제공하던데, 그것도 한번 알아봐야겠다.

내일 부터는 잠시 데이터 사이언스라는 주제에서 벗어나, 컴퓨터 공학적인 내용들을 학습하게 된다. 사실, 데이터 사이언스가 컴퓨터 코딩으로 대부분 이루어지는 만큼, 컴퓨터 공학적인 지식이 상당히 많이 필요하다. 그런면에서 보자면, 둘이 그렇게 동떨어져있는 학문도 아닌 것이다. 이번 기회에 좀 더 컴퓨터 공학적인 지식, 특히 알고리즘적인 부분을 더 학습할 수 있기를 바란다.

내일 부터 시작되는 흥미로운 과정도 잘 시작하고, 슬기롭게 해쳐나갈 수 있도록, 모든 이들을 위해 화이팅이다!

이 글은, Towards Data Science의 11 Most Common Machine Learning Algorithms Explained in a Nutshell 라는 글을 상당부분 참조하였습니다. (작가: Soner Yıldırım)

참조:

(1) 11 Most Common Machine Learning Algorithms Explained in a Nutshell, Soner Yıldırım

--

--

배우는 자(Learner Of Life)
배우는 자(Learner Of Life)

Written by 배우는 자(Learner Of Life)

배움은 죽을 때까지 끝이 없다. 어쩌면 그게 우리가 살아있다는 증거일지도 모른다. 배움을 멈추는 순간, 혹은 배움의 기회가 더 이상 존재하지 않는 순간, 우리의 삶은 어쩌면 거기서 끝나는 것은 아닐까? 나는 배운다 그러므로 나는 존재한다. 배울 수 있음에, 그래서 살아 있음에 감사한다.

No responses yet