본문 바로가기
Coursera 강의/Machine Learning

[Machine Learning] Supervised Learning/Unsupervised Learning

by 별준 2020. 8. 2.
해당 내용은 Andrew Ng 교수님의 Machine Learning 강의(Coursera)를 정리한 내용입니다.

- Supervised Learning 지도 학습

Supervised Learning이란, 특정 input에 대한 output(올바른 답) 샘플(label)의 데이터 셋이 주어져서 이 정보로부터 input과 output의 관계를 유추하는 것이다. 즉, 기존 정보를 토대로 새로운 input에 대한 output을 추측하는 것이다.

 

Supervised Learning은 크게 Regression(회귀)와 Classification(분류)로 나눌 수 있다.

 

- Regression(회귀)

회귀란 연속적인 값을 예측하는 것이다.

위의 주택 가격 예측 그래프를 살펴보자. x축은 집의 크기이며, y축은 가격을 의미한다. 그리고 우리에게 빨간색 X 표시로 data set이 주어졌다. 그리고 우리는 750 feet^2 집의 가격을 주어진 그래프에서 예측을 해보면 150,000 달러로 예측이 가능하다.

 

- Classification(분류)

분류란, 미리 정의되었고, 가능성이 있는 클래스 레이블(Class label) 중 하나를 예측하는 것이다. 즉, 이산된 값(Descrete valued ouput)을 추정한다.

위의 그래프는 종양의 사이즈에 따른 악성(1)/양성(0) 여부이다. 이처럼 Classification은 분류의 문제이며, 아래 그래프와 같이 O, X로 x축으로만 표현도 가능하다. 

이처럼 종양의 악성 여부나 스팸 메세지 분류와 같은 이진분류가 있는 반면, 다중분류도 있다. 예를 들어, 종양의 Type이 1, 2, 3이 존재한다면, 종양의 크기에 따라 Type1 / Type2 / Type3 / 양성으로도 분류가 가능하다.

 

또한, 종양의 크기뿐만 아니라 다른 조건도 추가할 수 있다. 

위 그래프는 나이 조건을 추가하여, 종양 사이즈와 나이에 따른 악성/양성 여부 그래프이다. 나이 외에도 종양 두께(Clump Thickness), 세포 사이즈의 균일성(Uniformity of Cell Size), 또는 세포 모양의 균일성(Uniformity of Cell Shape) 등의 조건도 추가할 수 있다.

 

이처럼 많은 특징으로 학습 알고리즘을 구현할 수 있지만, 이렇게 되면 너무나도 많은 데이터 용량을 차지하게 된다. 

하지만 SVM(Support Vector Machine)을 사용하면 컴퓨터가 무한한 정보를 다룰 수 있다(추후에 알아보자).

 

Example : 어떤 학습 알고리즘을 사용해야하는지 판단해보자

1 - You have a large inventory of identical items. You want to predict how many of these items will sell over the next 3 months.

2 - You'd like software to examine individual customer accounds, and for each account decide if it has been hacked/compromised.

 

 

- Unsupervised Learning 비지도학습(자율학습)

Unsupervised Learning은 알고 있는 출력 값(lable)이나 제공하는 데이터 셋 없이 학습하는 머신러닝을 의미한다. 오직 input data로만으로 데이터에서 지식을 추출할 수 있어야 한다. 따라서, Prediction result에 대한 피드백이 없으며 잘못된 지식을 추측하더라도 교정해줄 '선생님'이 없다.

 

비지도 학습은 가지고 있는 data 변수들 간의 관계를 가지고 clustering(군집화)하여 어떠한 구조(structure)인지 추측한다.

 

- Clustering Algorithm 군집 알고리즘

이러한 알고리즘을 Clustering Algorithm이라고 하며, 구글 뉴스에서 사용되고 있다. 구글 뉴스는 매일 수만가지의 기사를 수집하고, 수집된 기사들을 유사한 항목(동일 topic)으로 묶는다(Clustering). 따라서, 어떤 뉴스를 검색했을 때, 유사한 기사들을 검색한다.

Clustering 알고리즘은 유전학 자료를 연구하는데도 사용된다. 개인들의 유전 지도를 가지고 특정 유전자의 발현된 사람들로 분류를 할 수 있다. 또한, 같은 일을 하는 기기들을 분류하여 더욱 효율적이게 일을 할 수 있도록 기기들을 조직화 할 수 있고, Social Network 분석을 통하여 적절한 친구 그룹을 만들어줄 수 있으며, 고객 정보를 통하여 시장을 더욱 세분화하여 분류할 수도 있다. 또한, 천문학 데이터 분석에도 해당 알고리즘이 사용된다.

 

군집 알고리즘은 비지도학습의 한 예일 뿐이다.

 

 

- Non-clustering 비군집화

칵테일 파티(Cocktail party problem - Wiki)에 관한 예시를 살펴보자. 파티에는 많은 사람들이 존재하며, 저마다 말하면서 목소리가 섞이게 된다.

파티에 두 사람의 목소리가 동시에 들리며 두 개의 마이크에 입력이 되는 상황을 살펴보자.

위와 같은 상황에서 두 사람이 동시에 말을 하게 되며, 마이크 1, 2에 각각 목소리가 녹음된다. 마이크의 위치가 서로 다르며, 화자의 위치까지의 거리도 서로 다르기 때문에 두 목소리가 서로 다른 조합으로 녹음이 될 것이다.

그리고 녹음된 결과를 가지고 Non-clustering Algorithm의 학습 알고리즘(여기서는 Cocktail party problem algorithm)을 적용하면, 합쳐져있던 음성을 각각의 화자 목소리의 음성 소스로 분리할 수 있다.

 

Cocktail party problem algorithm은 단순히 생각하면 매우 복잡하게 구현되었을 것 같지만, 단 한 줄의 코드로 구현이 가능하다.

이것은 svd(Singular value decomposition; 특이값 분해)라는 함수를 사용한 것인데, 이 함수는 선형 대수학의 과정 중 하나로 Octave에 내장되어 있다. 이것을 C++이나 Java로 구현하려 했다면 많은 양의 코드가 필요했을 것이다. C++/Java/Python으로 해당 알고리즘을 구현할 수는 있지만 복잡하다. 

이것이 Octave나 Matlab을 학습 도구로 사용하여, 프로토타입으로 만들어보는 것이 중요한 이유이다. 

Octave와 같은 언어를 사용하여 학습 알고리즘을 구현해보고 C++ 등으로 옮겨보자. 

댓글