Tag Archives: 머신러닝

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

Machine Learning/ 개요

개요

  • 지도 학습 & 비지도 학습
    • 지도 학습(Supervised Learning)
      • 답이 있는 것을 학습 시키는 것 ex) 고양이 사진을 학습 시켜서 새로운 사진을 보고 고양이인지 아닌지를 판별하는 것
    • 비지도 학습(Unsupervised)
      • 답이 없는 것에서 패턴을 찾아 분류하는 것
  • 회귀 & 분류
    • 회귀 (Regression)
      • 연속적인 속성의 값을 예측하는 것으로 선형 회귀가 대표적. ex) 집 값이 얼마냐
    • 분류 (Classification)
      • 이산적인 속성의 값을 예측 하는 것으로 로지스틱 회귀가 대표적. ex) 양성이냐 음성이냐, 해킹을 당했느냐 안 당했느냐
      • 사실 이산적인 속성도 양이 많아지면 연속적인 것으로 보이기 때문에 이 둘 사이에는 모호한 지점이 있다.
  • Clustering & Non-Clustering
    • Clustering
      • 비지도 학습 중에서 비슷한 분류가 될 수 있는 것 –거리가 가깝거나 비슷한 의미거나 등– 끼리 묶는 것
    • Non-Clustrering
      • 비지도 학습 중에서 혼돈 속에서 패턴을 찾아내는 것. 강의의 예에서는 소음 속에서 개별 목소리를 뽑아내는 예가 있다.
  • 머신러닝에서 사용하는 개념들
    • 가설 함수(Hypothesis)
      • 선형 회귀나 로지스틱 회귀, 인공신경망에서 사용하는 모델 자체를 의미.
    • 비용 함수(Cost Function)
      • 가설함수와 실제 데이터의 차이 값을 의미.
      • 비용함수의 값이 0이라는 것은 모델로 세운 가설함수가 실제 데이터와 정확히 일치한다는 것을 의미한다.
      • 머신러닝은 결국 최저의 비용을 갖도록 가설함수를 만드는 과정이다.
    • Gradient Descent
      • 가설함수의 비용을 줄이는 알고리즘.
      • 가설함수의 각 파라미터 별로 비용함수를 편미분한 후 이전 파라미터 값에서 빼는 식으로 가설함수의 파라미터 값을 조절하면서 가설함수의 비용을 줄이는 방식을 사용한다.
      • 각 파라미터의 크기에 차이가 있기 때문에 그것을 보정하는 Feature Scaling과 파라미터의 값을 추가로 조절하는 Regularization 가 추가로 사용된다.
    • 과소적합(Underfitting) vs 과적합(Overfitting)
      • 가설함수가 실제 데이터의 값을 제대로 반영하지 못하는 경우 과소적합(Underfitting) 편향이 높다(High Bias)고 하며, 가설함수가 시험용 데이터에는 부합하지만, 다른 데이터 셋에는 부합하지 못하는 경우 과적합(Overfitting) 분산이 높다(High Variance)고 한다.
  • 위 내용은 사실 머신러닝 이전에 이미 각 분야에서 사용되던 통계적인 분석 방법이다. 머신러닝은 통계적인 분석 방법을 기계에 학습 시켜서 사용하는 것.
    • 물론 인공신경망 같은 것은 컴퓨터의 등장으로 가능해진 방법.