suyeongpark

지성을 추구하는 디자이너/ suyeongpark@abyne.com

Machine Learning/ 적용 사례

Recommender Systems

https://www.coursera.org/learn/machine-learning/

  • 사용자 정보를 Matrix로 구성하여 사용자의 선호에 맞는 컨텐츠나 유사한 컨텐츠를 추천하는 추천 시스템.
  • 이하 시스템에 대한 내용은 다음의 조건을 따른다.
    • 사용자는 각각의 영화에 대해 1-5개의 별점을 줄 수 있음.
    • 별점을 매기지 않았다면 ?로 표시
    • 유저 수는 nu로 표기, 영화 수는 nm으로 표기
    • 유저 j가 영화 i에 대해 평점을 주었다면 r(i, j) = 1이라고 표기
      • r 행렬은 별점을 주었는지 안 주었는지만 판별
    • 유저 j가 영화 i에 부여한 별점은 y(i, j) 로 표기

Continue reading

Machine Learning/ 알고리즘 발전 시키기

Vectorize

  • Σ로 표현되는 식을 벡터로 표현할 수 있는 경우 –벡터는 n x 1 행렬이므로 사실상 행렬– 벡터로 변환하여 계산하면 식 자체가 간편해 질 뿐더러, 행렬의 병렬처리를 지원하는 프로그램을 사용하면 성능에서도 유리하다.
    • 예컨대 아래의 식을
      • h_{\theta}(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3^2 + ...
    • 벡터화 하면 아래와 같이 표현 가능하다.
      • \theta = [ \theta_0; \theta_1; \theta_2;  ... \theta_n ]
      • X = [ x_0; x_1; x_2; ... x_n ]
        • x0는 정의상 1과 같다.
      • h_{\theta}(x) = \theta^T X
  • hθ(x)를 Vectorize 했다면 비용함수 J(θ)도 벡터로 간단하게 할 수 있다.
    • 아래의 기존 식을
      • J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_\theta (x_i) - y_i)^2
    • 벡터화하면 아래와 같이 표현 가능하다.
      • y = [ y_1; y_2; ... y_n ]
      • J(\theta) = \frac{1}{2m} ((\theta^T X - y)^2)
        • 행렬의 제곱은 .^ 이라는 연산을 이용한다. 프로그램적으로 ‘.’ 은 element 연산을 의미한다.
  • 프로그램상 Σ 연산은 for 문을 도는 형식이 되며, 행렬 연산을 지원하는 프로그램의 경우 Vector 연산은 병렬로 처리가 된다.
  • 물론 행렬 계산은 역행렬 계산과 같은 상황에서 부하가 많이 걸리지만, Octave와 같은 프로그램에서는 pinv 와 같은 함수로 계산해 pseudo 값을 계산해 주므로 행렬 계산에 익숙해질 필요가 있다.

Continue reading

Machine Learning/ 이상탐지

주의) 이 페이지에서는 공식의 유도 과정 같은 것은 정리하지 않는다. 공식의 유도 과정은 <코세라 강의> 참조.

이상탐지(Anormaly Detection)

https://www.coursera.org/learn/machine-learning/

  • 군집을 이루는 데이터 분포를 이용하여, 분포에서 멀어진 데이터를 이상(anormaly)이라고 판단하는 알고리즘.
    • 데이터에 오류가 있다는 뜻이 아니다. 군집과 멀어졌으므로 이상해 보이는 데이터를 의미한다.
  • 데이터가 이상한지 아닌지는 데이터의 밀도(Density estimation)를 추정하는 함수 P(x)를 통해 할 수 있다.
    • 이 함수는 가우시안 분포를 이용하여 계산한다. 아래 내용 참조

Continue reading

Machine Learning/ PCA

주의) 이 페이지에서는 공식의 유도 과정 같은 것은 정리하지 않는다. 공식의 유도 과정은 <코세라 강의> 참조.

PCA (Principal Component Analysis)

https://www.coursera.org/learn/machine-learning/

  • 데이터의 차원 수를 낮춰서 데이터를 압축하는 알고리즘.
    • 2차원 데이터를 1차원 선으로 줄이는 것, 3차원 데이터를 2차원 면으로 줄이는 것과 같은 것이 기본이며, 같은 개념으로 1000차원 데이터를 100차원으로 줄인다. 당연히 차원을 많이 축소할 수록 손실이 많이 발생하기 때문에 적당한 정도를 찾는 것이 중요하다.
    • 여기까지만 보면 고차원 데이터를 저차원에 투영하는 것 같지만 사실 투영은 아니다. 자세한 내용은 아래 참조.

Continue reading

Machine Learning/ K-평균 알고리즘

주의) 이 페이지에서는 공식의 유도 과정 같은 것은 정리하지 않는다. 공식의 유도 과정은 <코세라 강의> 참조.

K-평균 알고리즘(K-Means)

https://www.coursera.org/learn/machine-learning/

  • 정답이 주어지지 않는 비지도 학습(Unsupervised Learning)의 분류 알고리즘 중 하나. 가까운 데이터들끼리 묶어서 Cluster를 만드는 것이 핵심이다.
  • K-Means 알고리즘의 Input은 데이터셋과 클러스터의 갯수 2가지가 된다.
    • 몇 개의 클러스터를 만들 것이냐는 정하기 나름.

Continue reading

Machine Learning/ SVM

주의) 이 페이지에서는 공식의 유도 과정 같은 것은 정리하지 않는다. 공식의 유도 과정은 <코세라 강의> 참조.

SVM(Support Vector Machine)

http://diggdata.in/post/94066544971/support-vector-machine-without-tears

  • 로지스틱 회귀를 변형하여 간격(Margin)을 최대화 하는 선을 찾는 분류 알고리즘. Large Margin Classification이라고도 한다.
  • 로지스틱 회귀에서 hθ(x)가 1에 가까우면 y는 1, 0에 가까우면 y는 0으로 두었던 것에 반해 SVM에서는 hθ(x)가 1보다 큰 경우 y는 1, -1보다 작으면 y는 0인 것으로 본다.
    •  hθ(x)가 1보다 커지거나 -1보다 작을 때까지 계속 돌린다는 것. 이렇게 해서 간격을 크게 한다.

Continue reading

Machine Learning/ 신경망

주의) 이 페이지에서는 공식의 유도 과정 같은 것은 정리하지 않는다. 공식의 유도 과정은 <코세라 강의> 참조.

신경망(Neural Network)

http://www.opennn.net/

  • 인간의 뉴런 네트워크를 모사하여 데이터를 분류하는 방법.
    • 이전 노드들의 결과에 영향을 받아 현재 노드가 활성화가 될지 비활성화가 될지가 결정되고 최종적으로 output이 결정된다.
    • 결국 노드는 활성화/비활성화로 결정되기 때문에 신경망은 로지스틱 회귀의 복잡한 버전이라고 생각하면 된다.
    • 신경망으로 예측문제를 풀 수 있는지는 모르겠다. 코세라 강의에서는 분류 문제만 푸는데, 최종 output node가 각각의 분류에 해당하기 때문에 모델 자체가 분류 문제에 적합한 모양으로 보임
  • 맨 앞의 입력과 맨 뒤의 출력 사이에 있는 레이어는 히든 레이어(hidden layer)라 불리며, 각 히든 레이어의 각 노드들은 하나의 로지스틱 회귀에 해당한다.
  • 신경망을 단순화 하여 논리게이트 (AND, OR, XOR) 연산을 할 수도 있지만 그 내용에 대해서는 생략.

Continue reading

전체를 보는 방법

복잡함(복잡계)의 원리를 대중적으로 설명하는 책. 환원주의를 비판하고 복잡함의 원리로 세상을 바라 보는 내용인데, 개인적으로는 이미 다른 곳에서 접했던 내용이 많아 그냥 저냥이었다.

개인적으로는 복잡함의 원리를 좋아하여 끝까지 읽긴 하였으나, 복잡계에 대한 대중적인 책을 찾는다면 다른 책을 보는게 좀 더 낫지 않을까 싶었음. 마크 뷰캐넌의 <우발과 패턴>, <사회적 원자> 나 렌 피셔의 <보이지 않는 지능> 을 추천.

그나저나 예전에 읽었던 복잡계에 대한 책이나 요즘 나오는 복잡계에 대한 책의 내용이 크게 다르지 않은데, 이 분야가 아직은 더디구나 하는 생각이 들었음.

Machine Learning/ 로지스틱 회귀

주의) 이 페이지에서는 공식의 유도 과정 같은 것은 정리하지 않는다. 공식의 유도 과정은 <코세라 강의> 참조.

로지스틱 회귀 (Logistic Regression)

http://www.puzzlr.org/write-your-own-logistic-regression-function-in-r/

  • 데이터를 분류하기 위한 방법
    • 메일이 스팸인지 아닌지, 종양이 양성인지 음성인지를 구분한다.
  • 특정 데이터를 분류하는 기준(threshold)을 바탕으로 기준을 넘어서면 분류에 속하고 아니면 분류에 속하지 않는 것으로 판별한다.
    • 분류에 속하느냐 아니냐이기 때문에 값은 0이냐 1이냐로 나온다. 보다 정확히 말하면 결과값이 0에 가까우냐 1에 가까우냐를 가지고 0 또는 1로 값을 매긴다.
    • 분류의 종류가 여러개일 경우 각각의 분류 마다 분류에 속하는지 아닌지를 판별한다.
  • 분류 문제에 선형회귀를 쓰는 것은 좋은 방법이 아닌데, outlier 값이 선의 기울기를 크게 바꾸기 때문.

Continue reading

Machine Learning/ 선형 회귀

주의) 이 페이지에서는 공식의 유도 과정 같은 것은 정리하지 않는다. 공식의 유도 과정은 <코세라 강의> 참조.

선형 회귀 (Linear Regression)

https://en.wikipedia.org/wiki/Linear_regression

  • 연속적인 속성의 값을 예측하기 위한 방법.
    • 집의 크기가 얼마이고 위치가 어디일 때 집값을 얼마일 것인가에 대한 예측한다.
  • 분포된 데이터의 결과값을 표현하는 선을 긋고 –위 이미지의 빨간색 선– 그 선을 통해 새로운 데이터가 입력 되었을 때 그 결과값을 예측한다.

Continue reading