Decision Tree 분류와 회귀, 다중 출력도 가능한 알고리즘이다. 매우 복잡한 데이터셋도 학습할 수 있다. 강력한 머신러닝 알고리즘 중 하나인 랜덤 포레스트의 기본 구성 요소이기도 하다. 확률 추정 먼저, 어떻게 결정 트리가 예측을 만들어내는지 위 그림을 통해 보자. 새로 발견한 꽃의 품종을 분류하려고 한다고 하자. 먼저 루트 노드에서 시작하여 그 꽃의 길이가 2.45보다 짧은 지 검사한다. 만약 짧다면 왼쪾 노드로 이동한다. 이 경우 자식 노드가 없는 리프 노드이므로, 추가적인 검사를 하지 않고 노드에 있는 예측 클래스를 보고 setosa를 예측 값으로 내뱉는다. 노드의 구성 요소를 보면 gini라는 것이 있다. 이는 지니 불순도를 말하는 것이고, 그 노드의 불순도를 측정한다. 한 노드의 모든 ..
소프트맥스 회귀(Softmax regression) 로지스틱 회귀 모델 사용 시 1 혹은 0, 즉 이진 클래스가 아니라 다중 클래스를 예측하고 싶다면 여러 개의 로지스틱 회귀를 연결하면 되지만 소프트맥스 회귀(혹은 다항 로지스틱 회귀)를 사용하여 다중 클래스를 예측할 수 있다. 확률 추정 입력 특성의 가중치 합을 구한 후(각 클래스에 대한 소프트맥스 점수), 그 결과에 소프트맥스 함수(정규화된 지수 함수)를 적용하여 각 클래스의 확률을 추정한다. 각 클래스 k에 대한 소프트맥스 점수 $$s_k(x) = (\theta^{k(k)})Tx$$ 소프트맥스 함수 $$\hat p_k = \sigma(s(x))_k = \frac {exp(s_k(x))} {(\sum exp(s_j(x)))}$$ 예측은 다음과 같이 추..
로지스틱 회귀(Logistic Regression) 분류에서 사용되는 회귀 알고리즘이다. 샘플이 특정 클래스에 속할 확률을 추정하는 데 사용된다. 확률이 50%가 넘으면 해당 클래스에 속한다고 예측한다. 확률 추정 입력 특성의 가중치 합에 편향을 더한 후, 그 결과에 로지스틱 함수를 적용한 결과 값을 출력한다. $$\hat p = h(x) = \sigma(\theta^Tx)$$ 로지스틱은 0과 1 사이의 값을 출력하는 시그모이드 함수이며, 아래와 같다. $$\sigma(t) = \frac {1}{1+exp(-t)}$$ $${\hat p}$$를 추정하면 이에 대한 에측 값 $$\hat y$$를 다음과 같이 구할 수 있다. $$ \hat y= \begin{cases} 0,\;if\;\hat p
비지도 학습 현실의 대부분의 데이터들은 레이블이 없는 경우가 많다. 사실 어찌보면 당연하다. 예를 들어보자. Youtube 서비스의 추천 알고리즘을 개발한다고 하자. Youtube 서비스를 이용하는 사람들의 접속, 동영상 시청 여부, 시간등에 대한 데이터는 구하기 쉬울 것이다. 하지만 이 데이터를 가지고 어떻게 사용자를 분류해 각 사용자에 맞는 동영상을 추천할까? 동영상을 추천하는 작업은 사용자를 분류한 이후의 별개의 작업이므로 여기서는 어떻게 올바르게 사용자를 분류할 수 있을 지에 대해 생각해보자. 사용자의 Youtube 사이트, 어플 접속, 동영상 시청 여부에 대한 데이터 셋에는 각 사용자들을 어떻게 분류해야하는 지에 대한 정답이 표면적으로 나와있지 않을 것이다. 즉 지도 학습이 가능한 데이터 셋과 ..
머신러닝 파이프라인 머신러닝 수행 과정을 정형화하는 파이프라인을 구축해본다. 일반적으로 머신러닝은 대략 아래와 같은 순서로 진행한다. 더보기 1. 큰 그림 보기 2. 데이터 가져오기 3. 데이터 탐색과 시각화 4. 데이터 준비 5. 모델 선택과 훈련 6. 모델 세부튜닝 1. 큰 그림 보기 문제 정의부터 시작해야한다. 해결하려는 문제가 어떤 종류의 문제인가? 지도 학습으로 해결할 수 있는 문제인가?(데이터에 예측하려고하는 레이블, 타깃값이 있는가) 비지도 학습 혹은 강화 학습? 또한, 예를 들어 주식 가격(삼성전자의 종가라고 하자.)을 예측하고 싶다면, 내일 삼성전자의 종가가 오늘 종가에 비해 오를지 혹은 떨어질지를 예측하고 싶은가?(분류) 아니면 정확한 종가를 예측하고 싶은가?(회귀) 데이터를 실시간으로..
현실의 대부분의 데이터들은 특성을 적게는 수백 개에서 많게는 수백만 개를 가지고 있다. 특히 만약 데이터가 이미지라면 샘플 하나 당 가지고 있는 특성의 수는 이미지의 크기에 따라 기하급수적으로 늘어난다. 예를 들어 28 * 28 해상도의 저해상도 이미지만 해도 28 * 28 = 784개의 특성을 가지고 있다. 128 * 128 해상도의 이미지라면 총 16384개의 특성을 가지게 된다. 이렇게 수많은 수의 특성을 가지고 있는 데이터는 모델로 하여금 학습을 어렵게한다. 또한 샘플 하나 당 연산량이 많아 학습 속도도 느려지게 된다. 차원 축소 그렇다면 이 문제를 어떻게 해결할까? 방법은 여러가지가 존재하나 대표적으로 차원 축소() 알고리즘을 사용해 해결한다. 여기서 말하는 차원은 특성과 같다. 즉 특성의 수를..
위에서 새로운 특성을 기존의 특성을 거듭제곱해 만들었다. 왜 세제곱이나 네제곱이 아닌 거듭제곱일까? 즉 차수를 어떻게 정해야할까? 가장 간단한 방법은 반복 실험을 통해 알아보는 것이다. 즉 교차 검증을 통해 확인하면 된다. 또 다른 방법이 있다. 학습 곡선을 이용하면 된다. 학습 곡선은 train set과 valid set의 모델의 성능을 train set의 크기의 함수로 나타낸 것이다. 무슨 말인가? 그림으로 보자. 즉 점점 train set의 크기를 늘려가며(training set의 크기를 1, 2, 3, ... 점점 더 추가하면서 테스트) 모델을 훈련시키면서 동시에 valid set으로 모델의 성능을 평가하는 것이다. 코드로 구현하면 아래와 같다. 여기까지는 좋다. 하지만 이 다음에 무엇을 해야하는..
데이터가 선형이라면 선형 모델을 사용하면 된다. 하지만 만약 아래와 같이 데이터가 비선형이면 어떻게 해야 할까? 신기하게도 비선형 데이터를 학습하는데 선형 모델을 사용할 수 있다. 바로 기존의 데이터에 각 특성의 거듭제곱을 새로운 특성으로하여 추가된 데이터에 선형 모델을 훈련시키는 것이다. 이것을 다항 회귀라 한다. 특성의 거듭제곱을 구하고 이를 새로운 특성으로 하여 기존 데이터에 추가하는 것은 어려운 일이 아니다. 하지만 매번 이렇게 똑같은 작업을 반복하는 것은 지양해야한다. 따라서 우리가 직접 함수를 구현할 수도 있겠지만 다행히 사이킷런에서는 PolynomialFeature라는 메서드가 구현되어 있다. 이를 이용하여 위의 비선형 데이터에 선형 모델을 훈련시켜보자. 먼저 거듭제곱 항을 추가하고 변형된 ..
1. 아이디어 무작위로 선택된 수천 명의 사람들에게 독립적으로 어떤 문제에 대한 질문을 하고 대답을 모은다고 가정하자. 많은 경우 이들의 대답이 전문가 한 명의 답보다 낫다고 한다. 즉 집단지성이 전문가 한 사람보다 낫다는 것이다. 앙상블 방법을 통해 이 집단지성을 학습 알고리즘들에 적용시켜 단일 학습 알고리즘보다 더 좋은 성능을 꾀하고자 한다. 1.1 앙상블 그렇다면 앙상블이란 무엇인가? 사전적 정의로는 a group of musicians, actors, or dancers who perform together. 머신러닝에서는 일련의 예측기를 앙상블이라 부른다. 2. 앙상블 방법 앙상블 방법은 크게 2가지로 나뉜다. 먼저, 하나의 데이터 셋에 여러가지 다른 훈련 알고리즘을 훈련시킨 후 조합하는 방식으..
1. 아이디어 랜덤 포레스트의 아이디어는 앙상블 방법에서 나왔다. 배깅이나 페이스팅 방법을 적용한 결정 트리의 앙상블이 랜덤 포레스트이다. 아래와 같이 분류 문제는 사이킷런의 RandomForestClassifier 메서드로 사용한다. (BaggingClassifier와 DecisionTreeClassifier를 결합한 것과 같다.) 2. 엑스트라 트리 결정 트리에서는 CART 비용 함수를 최소화하는 특성 k와 그 임계값 t_k를 선택해 샘플을 분할하는 반면 랜덤 포레스트 알고리즘은 전체 특성 중에서 무작위로 선택한 특성 후보 중에서 최적의 특성을 찾는 방식으로 무작위성을 더 주입한다. 엑스트라 트리는 여기서 더 무작위성을 주입해 전체 특성 중에서 무작위로 특성을 후보를 선택해 샘플을 무작위로 분할한 후..