이전 포스팅
2019/05/25 - [[IT] 공부하는 개발자/Machine Learning] - [쉽게 설명하는 머신러닝] 개념 정리hobby-collect.tistory.com/136?category=909338
이전 포스팅에서 예측력이 좋은 모델을 개발하기 위해서는 데이터만큼이나 알고리즘의 선택이 중요하다고 이야기했었다.
이번 포스팅에서는 머신러닝 문제를 정의하고, 그에 따라 알고리즘을 선택하는 방법에 대해 알아볼 것이다.
목차
1. 머신러닝 문제 정의
머신 러닝 문제들은 크게 3가지로 분류, 정의한다. 지도학습형(Supervised Learning), 비지도학습형(Unsupervised Learning), 강화학습형(Reinforced Learning)이다.
1.1 지도학습
지도형 머신러닝은, 쉽게 말하면 기계에게 데이터와 데이터의 레이블을 함께 주고 학습 시키는 것이다.
가령 우리가 손글씨 판별 모델을 개발한다고 생각해보자. 손으로 쓴 글자 이미지들을 많이 준비하고, 그 각각의 손글씨들에 실제 의미 레이블을 붙여주고 학습시키는것이다. 이 때 지도학습형 알고리즘을 사용할 수 있다.
지도학습형 알고리즘으로 잘 학습한 기계는, 손으로 쓴 '나다' 라는 손글씨를 보고 예측을 해낼 것이다.
또 다른 예시로, 전편에서 예시로 들었던 고양이, 강아지 판별 모델을 생각해보자. 강아지 사진들에 <강아지>라는 레이블링을 해서 기계를 학습 시켰고, 고양이 사진들에는 <고양이>라는 레이블링을 해서 기계를 학습 시켰었다.
이처럼 문제와 답을 함께 주고 기계를 지도해서 학습시켜 예측하게 하는 기계 학습을 지도학습이라고 하며, 머신러닝에서 가장 흔하게 사용되는 문제형이다.
지도학습 문제들은 그 안에서 또 다시 회귀(Regression)형과 분류형(Classification)으로 나눌 수 있다. 회귀형은, 데이터 레이블의 자료 형태가 실제 숫자일 때이다. 가령 키나, 몸무게 같은 변수를 생각해보자. 0부터 100까지의 숫자가 각각 그 의미를 가지는 실제 숫자형 데이터이므로 회귀형이다. 분류형 문제는, 데이터 레이블의 자료 형태가 '카테고리'형 변수 일 때이다. 예를 들어 음악 장르라는 변수를 생각해보자. 이 변수는 '힙합', '알앤비', '클래식' 같은 값을 가질 것이다. 이 값들은 수치적으로 아무 의미가 없고, 그저 분류적으로 의미를 가지는 값들이다. 풀어야 하는 문제가, 회귀형 지도학습이냐, 분류형 지도학습이느냐에 따라, 선택할 수 있는 알고리즘이 달라진다.
위에서 언급한 손글씨 판별 모델에서 각각의 데이터들은 '가', '나', '다' 등의 레이블을 가진다. '가', '나', '다' 는 수치적으로 의미가 있는 변수가 아니라 분류형 데이터이므로, 분류적 알고리즘을 선택하여 모델을 구축해야 할 것이다.
1.2 비지도학습
비지도 머신러닝은 기계에게 레이블이 없는 데이터를 학습시키는 것으로, 주로, 데이터 안에 내재된 숨겨진 패턴이나 분포를 알고 싶을 때에 사용한다.
이 전 포스팅을 읽었던 독자라면 '에어리언 종 판별 모델'에 대해 이야기 했던 것을 기억할 것이다. 당신이 드디어 '에어리언 종 판별모델'을 구축하는데 쓰일 에어리언 100마리의 데이터를 습득했다고 가정하자. 하지만 당신은 이 에어리언들이 어떻게 어떤 특징으로 구별되는지 모르기 때문에, 레이블을 달아줄 수가 없다. 그래서 기계에게 비지도 머신러닝을 시킬 것이다.
비지도학습 문제들은 그 안에서 또 클러스터링(Clustering)문제와 연관규칙(Association) 문제로 나눌수 있다. 클러스터링 문제란, 데이터를 고유의 특성을 가진 그룹들로 분류하는 문제이다. 위의 에어리언 종 판별모델의 경우 클러스터링 문제형 알고리즘을 사용해서, 그룹으로 분류한 것이다.
연관규칙 알고리즘은 데이터가 띄는 경향성, 즉 규칙(Rule)을 발견하기 위한 것이다. 대형 편의점에서, 머신러닝을 통해 컵라면을 사는 사람들은 대부분 콜라도 같이 사는 경향성을 발견해서, 콜라를 컵라면 옆에 배치했더니 콜라의 매출이 급상승했다고 한다. 이 문제를 풀 때 개발자들은 비지도학습 연관규칙형에 최적화된 알고리즘을 사용했을 것이다.
1.3 강화학습
기계가 피드백을 통해 학습하는 것. 예를 들어 기계가 문제를 맞추면 YES라는 피드백을 주고, 문제를 틀리면 NO라는 피드백을 준다. 이 피드백에 의해 기계는 다시 학습한다.
2. 머신러닝 알고리즘 선택 요소/선택 기준
알고리즘 선택에 정답은 없지만, 모범답안은 있다. 보통은 문제 정의 후, 그 문제에 최적화된 알고리즘을 선택하지만, 선택지가 여러 개인 경우 아래의 요소들도 알고리즘 선택에 영향을 미친다.
2.1 문제 정의
해결하고자 하는 문제가 지도학습형인지, 지도학습형이라면 회귀형인지 클러스터형인지 파악한 후, 각각의 문제형에 최적화된 알고리즘을 선택할 수 있다.
2.2 데이터 사이즈
샘플 사이즈도 알고리즘 선택에 중요한 요소이다. 기계에게 학습 시킬 데이터 세트(트레이닝 세트)의 사이즈가 작은 경우에는 고편향/저분산 분류 알고리즘이(예: Naive Bayes) 저편향/고분산 분류 알고리즘보다(예: kNN) 더 성능이 좋다. (kNN은 과적합될 가능성이 높기 때문이다*) 하지만 학습 데이터의 사이즈가 커질 수록, 저편향/고분산 분류 알고리즘이 더 좋은 성능을 보여준다.
2.3 Interpretability VS Accuracy
해석력과 예측력 중 어느 것을 중시하느냐에 따른다. 해석력을 중시하는 경우,어떤 요소들이 모델에 선택되었는지 개발자가 알 수 있는 모델을 선택하는 것이 좋고, 해석할 필요가 없을 경우 예측력이 좋은 모델을 선택한다. 가령 고양이, 강아지 판별모델에서, 어떤 요소가 기계의 결정에 가장 영향을 미치는지 알고 싶다면, 로지스틱 회귀 알고리즘을 사용하여, '코의 수염'이 결정여부에 어느 정도 영향을 미치는지, '귀의 각도'는 과연 결정적인 영향을 끼치는지 등의 해석을 할 수 있다. 예측력을 더 중시할 경우 신경망 알고리즘을 사용한다면 비록 내부 프로세스는 알수 없을 지라도 기계의 예측력은 더 좋아질 수 있다.
2.4 선형성
데이터의 예측 변수들과 레이블 사이에 선형관계가 있을 것이라고 가정한다면 선형성을 가정하는 알고리즘을 사용할 수 있다. 선형알고리즘 모델은, 실제 관계성이 곡선형일 경우에는 예측력이 떨어지는 단점이 있지만, 간단하고 빠르기 때문에 많이 사용된다.
2.5 데이터 차원
차원이란 쉽게 말해, 사용되는 예측변수들의 개수이다. 고양이, 강아지 판별 모델에서 기계의 결정에 영향을 주는 예측변수를 '코의 수염'과 '귀의 각도'로 설정하였기때문에 이 데이터는 2개의 변수를 사용하는 2차원 데이터가 된다.
만약 수백, 수천차원의 데이터를 가지고 있다면? 텍스트 데이터를 사용할 때에는 사용하는 변수가 무척 많아진다. 그런 종류의 데이터에 최적화된 알고리즘이 서포트벡터(SVM) 알고리즘이다. 또한 머신러닝으로 차원축소만을 목표로 한다면 주성분분석(PCA)같은 차원 축소 알고리즘을 사용할 수도 있다.
3. 알고리즘 선택 예시
위에서 설명한 요소들을 기준으로 한 머신러닝 알고리즘 선택표를 만들어 보았다.
알고리즘 선택에는 정답이 없기 때문에 이 표는 어디까지나 참고용으로만 사용하는게 좋다. 또한 알고리즘은 반드시 하나만 선택해야 하는 것은 아니다. 적절한 알고리즘 몇 개를 추려내 트레이닝 해보고, 테스트 후 예측력에 따라서 최종선택을 할 수도 있다.
1차 분류 | 2차분류 | 알고리즘 | Description |
지도학습 | 회귀형 | LinearRegression | 구현이 간단하고 트레이닝이 빠르다. |
회귀형 | LassoRegression | 데이터에 대한 어떤 분포 가정도 하지 않기 때문에 Linear Regression과 비교해 예측력이 더 높다. Lasso는 유의한 변수들만 사용하고, Ridge는 유의하지 않아 보이는 변수들의 계수를 감소시킨다는 점이 차이점이다. 차원축소 여부에 따라 Lasso와 Ridge를 선택할 수 있다. | |
회귀형 | RidgeRegression | ||
회귀형/분류형 | 결정 트리 | 결과를 이해, 설명하기 쉬움 (높은 해석력). 사용하는 나무의 개수를 늘릴수록 보편적인 예측결과를 얻을 수 있다.(n_estimator 옵션) | |
분류형 | LogisticRegression | 레이블이 0, 1의 바이너리 분류형 값을 가지는 경우 사용할 수 있다. (이항분포 가정). 선형 표현식을 가지므로 높은 해석력을 가진다. | |
분류형 | Naive Bayes, 서포트 벡터 머신 (SVM) |
고차원의 데이터에 주로 사용. | |
분류형 | KNeighborsClassifier | 저차원의 데이터에 주로 사용. (차원이 높아지면 모델의 성능이 낮아지는 경향을 보이므로, 많은 데이터를 확보해야 한다. 차원축소 기법을 함께 사용하는 것도 좋은 방법이다.) | |
분류형 | 신경망 | 높은 예측력이 요구될 때에 주로 사용되는 알고리즘. 고차원, 다량의 데이터에서 최고의 예측력을 보인다. | |
비지도학습 | 클러스터링 | K 평균 군집화 | 클러스터링 그룹 개수가 정해져 있을 때 |
Mini Batch K 평균 군집화 | 클러스터링 그룹 개수가 정해져 있고, 대량 데이터를 처리 할 때 (10000건 이상) | ||
MeanShift | 클러스터링 그룹 개수가 정해져 있지 않을 때 | ||
차원 축소 | 주성분분석 (PCA) | 차원 축소 가능, 해석력 저하 |
'☆IT 개발 프로그램☆ > Machine Learning' 카테고리의 다른 글
[쉽게 설명하는 머신러닝] 개념 정리 (0) | 2020.06.04 |
---|