알고리즘

    [머신 러닝] 서포트 벡터 머신 (support vector machine)

    서포트 벡터 머신이란? 서포트 벡터 머신(SVM)은 매우 강력하고 선형이나 비선형 분류, 회귀, 이상치 탐색에도 사용할 수 있는 다목적 머신러닝 모델입니다. 서포트 벡터 머신 모델은 가장 인기 있는 모델에 속합니다. 이 모델은 특히 복잡한 분류 모델에 잘 들어맞으면 중간 크기의 데이터셋에 적합합니다. 선형 SVM 분류 SVM의 기본 아이디어는 그림으로 설명하는 것이 가장 좋습니다. 그림을 보며 설명하겠습니다. 위 그림에서 H3는 클래스를 올바르게 분류하고 있지 않습니다. H1과 H2는 클래스를 올바르게 분류하는데, H1은 결정 경계가 샘플에 너무 가까워 새로운 샘플에 대해서는 잘 작동하기 힘듭니다. H2는 결정 경계가 샘플과 멀리 떨어져있어 새로운 샘플에 대해 상대적으로 더 잘 작동할 것입니다. 여기 있..

    [머신 러닝] 행렬 인수분해 (Matrix Factorization)

    행렬 인수분해 사람들의 각 항목에 대한 기호 정보가 있는 행렬이 있을 때, 이 행렬은 두 개의 행렬의 곱으로 나타낼 수 있습니다. 이를 이용한 예측이 가능한데, 예를 들어서 아래와 같이 몇 칸이 비어있는 행렬이 있다고 하겠습니다. 항목 1 항목 2 항목 3 사람 1 4 1 5 사람 2 2 ? 3 사람 3 ? 3 1 몇 칸이 비어있기 때문에 곱했을 때 완벽히 똑같은 두 개의 행렬은 구하기 힘들 수도 있습니다. 따라서 이 행렬을 인수분해해서 곱했을 때 가장 가까운 두 개의 행렬의 곱으로 나타낸다면, 두 행렬의 곱으로 빈 칸의 값을 예측할 수 있습니다. 속성 학습 여기서 속성을 학습할 때에도 경사 하강법을 이용합니다. 먼저 두 행렬에 임의의 값을 넣고 곱해서 목표 행렬과 얼마나 차이가 나는지 구합니다. 여기서..

    [머신 러닝] 협업 필터링 (collaborative filtering)

    협업 필터링 협업 필터링은 많은 사용자들로부터 얻은 기호 정보(taste information)에 따라 사용자들의 관심사들을 자동적으로 예측하게 해주는 방법입니다. 예를 들어, 아래와 같은 데이터가 있고, 혜린이의 항목 4에 대한 기호 정보를 알고 싶다고 하겠습니다. 이름 항목 1 항목 2 항목 3 항목 4 지원 4 3 4 4 혜린 4 3 5 ? 이 경우에 혜린이의 항목1, 2, 3에 대한 기호 정보가 지원이와 유사하기 때문에 혜린이는 지원이와 비슷하다고 할 수 있고, 따라서 혜린이가 항목 4에 높은 점수를 줄 것이라 예측할 수 있습니다. 실제로는 데이터가 훨씬 많을 경우를 다루게 될 텐데 예를 들어 혜린이와 항목 1, 2, 3이 비슷한 사람이 1000명 있다면 그 1000명의 항목 4에 대한 평균을 혜..

    [머신 러닝] 에이다 부스트 (AdaBoost)

    Boosting 부스팅은 또다른 앙상블 기법입니다. 부스팅 역시 앙상블 기법이므로 여러 개의 모델을 씁니다. 부스팅은 일부러 성능이 안좋은 모델들을 사용합니다. Bagging과 마찬가지로 각 모델이 조금 다른 데이터를 써서 학습하는데, Bootstrap처럼 데이터를 임의로 만드는 게 아니라 먼저 만든 모델들이 어떻게 예측을 했냐에 따라 뒤에 만드는 데이터 셋이 결정됩니다. 또한, 모델들의 예측을 종합할 때 단순히 투표를 하는 게 아니라 성능이 좋은 모델의 예측을 더 반영합니다. 에다 부스트 (Adaboost) 에다 부스트에서도 수많은 결정 트리들을 만듭니다. 에다 부스트에서는 깊은 결정 트리가 아니라 루트 노드 하나와 분류 노드 두 개를 갖는 얕은 결정 트리를 사용합니다. 이런 식으로 하나의 질문과 그 ..

    [머신 러닝] 랜덤 포레스트 (Random forest)

    결정 트리와 앙상블 결정 트리는 이상적인 머신 러닝 모델이 되기에는 부정확합니다. 하지만 결정 트리를 응용하면 성능이 좋은 다른 모델들을 만들 수 있습니다. 결정 트리를 응용하는 대표적인 방법 중 하나는 앙상블(ensemble)이라는 방법이 있습니다. 앙상블은 하나의 모델을 쓰는 대신 수많은 모델들을 이용해서 예측을 한 후 여러 예측들을 합쳐서 종합적인 판단을 하는 것입니다. 랜덤 포레스트 랜덤 포레스트는 트리 앙상블 알고리즘 중 하나입니다. 랜덤 포레스트는 수많은 결정 트리를 임의로 만들고 다수결 투표로 결과를 종합하는 알고리즘입니다. 랜덤 포레스트에서 임의성을 더하는 요소에는 아래 두가지가 더 있습니다. Bootstrapping Bootstrapping은 갖고 있는 데이터 셋을 이용해서 조금 다른 데..

    [머신 러닝] 결정 트리 (Decision tree)

    결정 트리 결정 트리는 예/아니오로 답할 수 있는 어떤 질문들이 있고, 그 질문들의 답을 따라가면서 데이터를 분류하는 알고리즘입니다. 지니 불순도 (Gini Impurity) 결정 트리에서는 여러 질문들의 답을 따라가면서 데이터를 분류한다고 했는데요, 결정 트리를 만들 때 각 노드에 어떤 질문 또는 분류가 들어갈지를 어떻게 고를까요? 머신 러닝 프로그램이 결정 트리를 만들 때에는 경험을 통해 직접 정해나가야 합니다. 여러 데이터를 분류해보면서 각 위치에서 어떤 노드가 제일 좋을지를 결정하는 것입니다. 이를 위해서는 좋은지 안좋은지를 평가할 기준이 있어야 하는데요, 결정 트리에서는 이것을 지니 불순도(Gini Impurity)라고 합니다. 지니 불순도는 데이터 셋 안에 서로 다른 분류들이 얼마나 섞여있는지..

    [머신 러닝] 로지스틱 회귀 (Logistic Regression)

    로지스틱 회귀 선형 회귀를 이용해서 분류를 할 수 있긴 하지만 선형 회귀는 예외적 데이터에 너무 민감합니다. 그래서 분류를 할 때는 보통 선형 회귀 대신 로지스틱 회귀를 이용합니다. 선형 회귀는 데이터에 가장 잘 맞는 일차 함수를 찾는 것이고, 로지스틱 회귀는 데이터에 가장 잘 맞는 시그모이드 함수를 찾는 것입니다. 시그모이드 함수는 아래와 같이 쓰고, \[ \displaystyle sigmoid(x) = \frac{1}{1 + e^{-x}} \] 그래프는 아래와 같습니다. 시그모이드 함수는 무조건 0과 1 사이의 값만 반환합니다. 그러니까, x가 아무리 커도, 아무리 작아도 0과 1사이의 값만 반환합니다. 결과가 0과 1 사이라는 것은 어떤 의미일까요? 선형회귀에서 썼던 일차함수 같은 경우에는 결과가 ..

    [머신 러닝] 다항 회귀 (Polynomial Regression)

    다항 회귀 입력 변수와 목표 변수의 관계를 여태 직선으로 나타냈는데, 사실 그 관계를 가장 잘 나타내는 게 직선이 아닐 수도 있습니다. 단일 속성 다항 회귀 다항 회귀도 두 가지로 나뉘는데, 속성이 하나인 경우랑 속성이 많은 경우입니다. 속성이 많으면 다중 다항 회귀라고 하는데, 우선 간단하게 속성이 하나인 경우부터 보겠습니다. 가설 함수가 이차 함수라면 아래와 같이 쓸 수 있습니다. \[ h_{\theta}(x) = \theta_{0} + \theta_{1}x + \theta_{2}x^{2} \] 선형 회귀를 할 때랑 마찬가지로 할 일은 학습 데이터에 잘 맞는 \(\theta\)를 찾는 것입니다. 그런데 위 식은 \( h_{\theta}(x) = \theta_{0} + \theta_{1}x_{1} + ..