Yet Never Lose Faith

- Good to Great , Jim Collins

How To Preprocess Image Data 자세히보기

카테고리 없음

[머신러닝] 알고리즘 선택하기 (feat. 알고리즘 cheat-sheet)

Kellyyyy 2019. 10. 13. 11:30

머신러닝을 공부하다보면

어떤 알고리즘들이 있는지, 또 어떤 알고리즘을 사용해야할지

고민될 때가 많습니다.

 

분석하고자하는 상황에 적합한 알고리즘을 선택해야

효과적인 머신러닝을 구현할 수 있는데요.

 

그래서 오늘은 머신러닝을 구현할 때,

상황별로 적합한 알고리즘을 선택할 수 있는 방법에 대해 포스팅을 해볼게요.

 


우선, 이 방법은 python에서 제공하는 scikit-learn 패키지를 사용해서

머신러닝을 구현할 경우에만 해당되는 방법이라는 것을 미리 말씀드려요!

 

바로 'scikit-learn algorithm cheat-sheet'을 참고하는 방법인데요.

scikit-learn algorithm cheat-sheet란 scikit-learn 패키지 사용자들에게

알고리즘을 선택하는 방법에 관한 러프한 가이드를 제공하기 위해 제작된 프로우 차트입니다.

 

scikit-learn algorithm cheat-sheet

사용방법은 아주 간단합니다.

START 노드에서 시작해서 데이터 수, 목표데이터 특성과 같은 분석 조건에 맞춰

YES/NO를 따라가다 보면 어떤 알고리즘을 선택해야하는지 알 수 있습니다.

 

그럼 이해를 돕기위해

분석상황을 가정한 후에 cheat-sheet를 한번 사용해볼게요.

 

굉장히 유명한 'Fisher의 붓꽃데이터'를 사용해서 붓꽃을 분류하는 머신러닝을 구현해보려고 해요.

 

Fisher의 iris data

파일을 열면 아래와 같은 컬럼들이 있습니다.

 

컬럼 이름 컬럼의 의미 값의 예
1 SepalLength 꽃받침의 길이 5.1
2 SepalWidth 꽃받침의 너비 3.5
3 PetalLength 꽃잎의 길이 1.4
4 PetalWidth 꽃잎의 너비 0.2
5 Name 붓꽃의 품종 iris-setosa

 

이 데이터는 꽃받침의 길이와 너비로 붓꽃의 품종을 구분한 데이터인데요.

붓꽃의 품종은 다음과 같은 3가지의 품종이 있습니다.

 

붓꽃의 품종
iris-setosa
iris-versicolor
iris-virginica

 

이제 저는 새로운 꽃받침,꽃잎의 길이와 너비가 주어졌을 때,

붓꽃의 품종이 셋 중 어떤 것인지 구분하는 머신러닝을 구현하려 합니다. 

 

어떤 알고리즘을 사용할까요?

Start 노드에서 부터 시작하도록 할게요.

먼저 samples > 50이라는 노드가 있습니다.

여기서 samples는 데이터의 수를 의미한다고 보시면 됩니다.

 

붓꽃데이터는 총 150개로 50개보다 크니까 YES 방향으로 이동합니다.

 

 

다음은 predicting categories라는 노드입니다.

저는 붓꽃의 품종 즉, 카테고리로 분류하기 때문에 YES방향으로 이동합니다.

 

CF. 예측값이 온도나 인원수와 같은 카테고리(범주형)가 아닌 숫자값(이산형 또는 연속형)이라면 NO로 이동해야합니다.

 

 

다음 노드는 Do you have labeled data라는 노드입니다.

이 노드는 제가 가진 데이터가 이미 카테고리로 분류되어 있는지를 묻는 노드입니다.

 

붓꽃데이터의 경우 이미 3가지 품종들로 분류되어있기 때문에 YES를 선택합니다.

 

다음 노드는 Samples > 100K라는 노드입니다.

데이터 수를 묻는 노드인데, 여기서 K란 1000을 의미합니다.

 

다시 말해, Samples > 100,000이므로 저희는 NO로 이동해야겠죠?

자, 그럼 드디어 알고리즘을 선택되었습니다.

Linear SVC라는 알고리즘입니다.

 

실제로 이 알고리즘을 활용해 머신러닝을 구현해본 후, 성능을 평가해보고

성능이 좋지 않으면(NOT WORKING) 다른 알고리즘을 사용해 볼 수도 있겠네요.

 

자! 이렇게 오늘은 머신러닝을 구현할 때,

알고리즘을 선택하는데 도움을 줄 수 있는 방법을 배워보았습니다.

 

위 알고리즘 치트 시트는 아래링크에서 확인할 수 있으니, 많이 참고하시길 바라요!

https://scikit-learn.org/stable/tutorial/machine_learning_map/