Tag Archives: 머신러닝

머신 러닝 교과서/ 컴퓨터는 데이터에서 배운다

데이터를 지식으로 바꾸는 지능적인 시스템 구축

  • 20세기 후반 데이터에서 지식으 추출하여 예측하는 자가 학습(self-learning) 알고리즘과 관련된 인공 지능의 하위 분야로 머신 러닝이 출현했다.
    • 사람이 수동으로 대량의 데이터를 분석하여 규칙을 유도하고 모델을 만드는 대신, 머신 러닝이 데이터에서 더 효율적으로 지식을 추출하여 예측 모델과 데이터 기반의 의사 결정 성능을 점진적으로 향상시킬 수 있게 됨.

머신 러닝의 세 가지 종류

  • 머신 러닝은 3가지 종류로 구분해 볼 수 있다.
    • 지도 학습 (supervised learning)
    • 비지도 학습 (unsupervised learning)
    • 강화 학습 (reinforcement learning)

지도 학습으로 미래 예측

  • 지도 학습의 주요 목적은 레이블(label) 된 훈련 데이터에서 모델을 학습하여 본 적 없는 미래 데이터에 대해 예측을 만드는 것. 
    • 지도(supervised)는 희망하는 출력 신호(레이블)가 있는 일련의 샘플을 의미한다.
  • 지도 학습은 다시 데이터를 범주(category)를 구분하는 분류(classification)와 연속적인 값을 출력하는 회귀(regression)으로 구분할 수 있다.

분류: 클래스 레이블 예측

  • 분류는 과거의 관측을 기반으로 새로운 샘플의 범주형 클래스 레이블을 예측하는 것이 목적.
    • 클래스  레이블은 이산적(discrete)이고 순서가 없어 샘플이 속한 그룹으로 이해할 수 있다.
    • 스팸 이메일 감지는 전형적인 이진 분류(binary classification) 작업의 예이다.
  • 두 개 이상의 클래스 레이블을 가진 경우 지도 학습 알고리즘으로 학습한 예측 모델은 훈련 데이터셋에 있는 모든 클래스 레이블을 새로운 샘플에 할당할 수 있다.
    • 이런 다중 분류(multiclass classification)의 전형 적인 예는 손글씨 인식 문제.
  • 아래 그림은 30개의 훈련 샘플이 있는 이진 분류 작업의 개념을 나타낸다.
    • 15개의 샘플은 음성 클래스(negative class)로 레이블(뺄셈 기호)되어 있고, 다른 15개의 샘플은 양성 클래스(positive class)로 레이블(덧셈 기호) 되어 있다.
    • 각 샘플이 두 개의 x_{1}, x_{2} 값에 연관되어 있으므로 2차원 데이터 셋이다.
    • 지도 학습 알고리즘을 사용하여 두 클래스를 구분할 수 있는 규칙을 학습한다. 이 규칙은 점선으로 나타난 결정 경계(decision boundary)이다.
    • 새로운 데이터의 x_{1}, x_{2} 값이 주어지면 두 개의 범주 중 하나로 분류한다.

회귀: 연속적인 출력 값 예측

  • 회귀는 예측 변수(predictor variable)(또는 설명 변수(explanatory variable), 입력(input))와 연속적인 반응 변수(response variable) (또는 출력(outcome), 타겟(target)) 가 주어졌을 때 출력 값을 예측하는 두 변수 사이의 관계를 찾는다.
    • 학생들의 수학 점수를 예측하는 것이 그 예
  • 아래 그림은 선형 회귀(linear regression)의 개념으로 입력 x 와 타깃 y 가 주어지면 샘플과 직선 사이 거리가 최소가 되는 직선을 그을 수 있다. 
    • 일반적으로 평균 제곱 거리를 사용한다.
    • 이렇게 데이터에서 학습한 직선의 기울기와 절편(intercept)을 사용하여 새로운 데이터의 출력 값을 예측한다.

강화 학습으로 반응형 문제 해결

  • 강화 학습은 환경과 상호 작용하여 시스템(에이전트(agent))의 성능을 향상하는 것이 목적이다.
    • 환경의 현재 상태 정보는 보상(reward) 신호를 포함하기 때문에 강화 학습을 지도 학습과 관련된 분야로 생각할 수 있다.
    • 강화 학습의 피드백은 정답(ground truth) 레이블이나 값이 아니라 보상 함수로 얼마나 좋은지를 측정한 값이다.
    • 에이전트는 환경과 상호 작용하여 보상이 최대화 되는 일련의 행동을 강화 학습으로 학습한다.
    • 탐험적인 시행착오(trial and error) 방식이나 신중하게 세운 계획을 사용한다.
    • 강화 학습의 대표적인 예는 체스이다.

  • 강화 학습에는 여러 하위 분류가 있는데, 일반적인 구조는 강화 학습 에이전트가 환경과 상호작용하여 보상을 최대화 하는 것이다.
    • 각 상태는 양의 보상이나 음의 보상과 연관된다. 보상은 체스 게임의 승리나 패배처럼 전체 목표를 달성하는 것으로 정의할 수 있다.

비지도 학습으로 숨겨진 구조 발견

  • 지도 학습에서는 모델을 훈련할 때 사전에 옳은 답을 알고 있고, 강화 학습에서는 에이전트의 특정 행동을 어떻게 보상할지 그 측정 방법을 정의하는 반면, 비지도 학습에서는 레이블되지 않거나 구조를 알 수 없는 데이터를 다룬다.
    • 비지도 학습을 사용하면 알려진 출력 값이나 보상 함수의 도움을 받지 않고 의미 있는 정보를 추출하기 위해 데이터 구조를 탐색할 수 있다.

군집: 서브그룹 찾기

  • 군집(clustering)은 사전 정보 없이 쌓여 있는 그룹 정보를 의미 있는 서브그룹(subgroup) 또는 클러스터(cluster)로 조직하는 탐색적 데이터 분석 기법이다.
    • 분석 과정에서 만든 각 클러스터는 어느 정도 유사성을 공유하고 다른 클러스터와는 비슷하지 않은 샘플 그룹을 형성한다. 군집을 비지도 분류(unsupervised classification)이라고 하는 이유가 여기에 있다.
    • 클러스터링은 정보를 조직화하고 데이터에서 의미 있는 관계를 유도하는 도구이다.
    • 마케터가 관심사를 기반으로 고객 그룹을 나누는 것이 그 예

차원 축소: 데이터 압축

  • 비지도 학습의 또 다른 하위 분야는 차원 축소(dimensionality reduction)이다.
    • 고차원의 데이터를 다루어야 하는 경우 하나의 관측 샘플에 많은 측정 지표가 존재하는데, 이로 인해 머신 러닝 알고리즘의 계산 성능과 저장 공간의 한계에 맞닥뜨릴 수 있다.
    • 비지도 차원 축소는 잡음(noise) 데이터를 제거하기 위해 특성 전처리 단계에서 종종 적용하는 방법이다. 이런 잡음 데이터는 특정 알고리즘의 예측 성능을 감소시킬 수 있다.
    • 차원 축소는 관련 있는 정보를 대부분 유지하면서 더 작은 차원의 부분 공간(subspace)으로 데이터를 압축한다.
  • 차원 축소는 데이터 시각화에도 유리하다. 아래 그림은 고차원 특성을 1, 2, 3차원 특성공간으로 시각화하는 예

기본 용어와 표기법 소개

  • 아래 그림 1-8의 표는 머신 러닝 분야의 고전적인 예제인 붓꽃(Iris) 데이터셋 일부를 보여준다. 붓꽃 데이터 셋은 Setosa, Versicolor, Virginica 세 종류 150개의 붓꽃 샘플을 담고 있다.
    • 각 붓꽃 샘플은 데이터셋에서 하나의 행(row)으로 표현된다.
    • 센티미터 단위의 측정값은 열(column)에 저장되어 있으며, 데이터셋의 특성(feature)라고도 한다.

  • 데이터는 선형대수학(linear algebra)을 사용하여 행렬(matrix)과 벡터(vector) 표기로 데이터를 표현한다.
    • 일반적인 관례에 따라 샘플은 특성 행렬 X 에 있는 행으로 나타내고, 특성은 열을 따라 저장한다.
    • 150개의 샘플과 네 개의 특성을 가진 붓꽃 데이터셋은 150 x 4 크기의 행렬 X \in \mathbb{R}^{150 \times 4} 로 쓸 수 있다.

\left[ \begin{array}{rrrr} x_{1}^{(1)} & x_{2}^{(1)} & x_{3}^{(1)} & x_{4}^{(1)} \\ x_{1}^{(2)} & x_{2}^{(2)} & x_{3}^{(2)} & x_{4}^{(2)} \\ ... & ... & ... & ... \\ x_{1}^{(150)} & x_{2}^{(150)} & x_{3}^{(150)} & x_{4}^{(150)} \end{array} \right]

  • 기호 설명)
    • 위 첨자 i는 i번째 훈련 샘플을(지수가 아니다 주의), 아래 첨자 j는 데이터셋의 j번째 차원을 나타낸다.
    • 굵은 소문자는 벡터 (x \in \mathbb{R}^{n \times 1} )를 나타내고 굵은 대문자는 행렬 (X \in \mathbb{R}^{n \times m} )을 나타낸다.
    • 벡터나 행렬에 있는 하나의 원소를 나타낼 때는 이탤릭체를 사용한다. x^{n} 또는 x_{m}^{n}
    • 예컨대 x_{1}^{150} 은 150번째 샘플의 1번째 차원인 꽃받침 길이를 나타낸다. 특성 행렬의 각 행은 하나의 꽃 샘플을 나타내고 4차원 행 벡터 x^{i} \in \mathbb{R}^{1 \times 4} 로 쓸 수 있다. 

x_{i} = \left[ \begin{array}{rrrr} x_{1}^{(i)} & x_{2}^{(i)} & x_{3}^{(i)} & x_{4}^{(i)} \end{array} \right]

  • 각 특성 차원은 150차원의 열 벡터 x_{j} \in \mathbb{R}^{150 \times 1} 이다. 예컨대 다음과 같다.

x_{j} = \left[ \begin{array}{rrrr} x_{j}^{(1)} \\ x_{j}^{(2)} \\ ... \\ x_{j}^{(150)} \end{array} \right]

  • 비슷하게 타깃 변수(여기서는 클래스 레이블)를 150차원의 열 벡터로 저장한다.

y = \left[ \begin{array}{rrrr} y^{1} \\ y^{2} \\ ... \\ y^{150} \end{array} \right] (y \in \{ Setosa, Versicolor, Virginica \})

  •  

머신 러닝 시스템 구축 로드맵

  • 아래 그림은 예측 모델링에 머신 러닝을 사용하는 전형적인 작업 흐름을 보여준다.

전처리: 데이터 형태 갖추기

  • 데이터 전처리는 모든 머신 러닝 어플리케이션에서 가장 중요한 단계이다.
    • 많은 머신 러닝 알고리즘에서 최적의 성능을 내려면 선택된 특성이 같은 스케일을 가져야 한다. 특성을 [0, 1] 범위로 변환하거나 평균이 0이고 단위 분산을 가진 표준 정규 분포(standard normal distribution)로 변환하는 경우가 많다.
    • 일부 선택된 특성은 매우 상관관계가 높아 어느 정도 중복된 정보를 가질 수 있다. 이때는 차원 축소 기법을 사용하여 특성을 저차원 부분 공간으로 압축한다. 특성 공간의 차원을 축소하면 저장 공간이 덜 필요하고 학습 알고리즘을 더 빨리 실행할 수 있다.
    • 어떤 경우에는 차원 축소가 모델의 예측 성능을 높이기도 한다. 데이터셋에 관련 없는 특성(또는 잡음)이 매우 많을 경우, 즉 신호 대 잡음비(Signal-to-Noise Ratio, SNR)가 낮은 경우이다.
  • 머신 러닝 알고리즘이 훈련 데이터셋에서 잘 작동하고 새로운 데이터에서도 잘 일반화 되는지 확인하려면 데이터셋을 랜덤하게 훈련 세트와 테스트 세트로 나눠야 한다. 
    • 훈련 세트에서 머신 러닝 모델을 훈련하고 최적화 한다. 테스트 세트는 별도로 보관하고 최종 모델을 평가하는 맨 마지막에 사용한다.

예측 모델 훈련과 선택

  • 분류 알고리즘은 저마다 태생적인 편향이 존재한다. 작업에서 아무런 가정도 하지 않는다면 어떤 하나의 분류 모델이 더 우월하다고 말할 수 없다.
    • 현실에서 가장 좋은 모델을 훈련하고 선택하기 위해 최소한 몇 가지 알고리즘을 비교해야 한다.
  • 여러 모델을 비교하기 전에 먼저 성능을 측정할 지표를 결정해야 한다. 분류에서 널리 사용되는 지표는 정확도(accuracy)이다. 정확도는 정확히 분류된 샘플 비율이다.
  • 모델 선택에 테스트 세트를 사용하지 않고 최종 모델을 평가하려고 따로 보관한다면 테스트 세트와 실제 데이터에서 어떤 모델이 잘동작할지를 어떻게 알 수 있을까?
    • 이 질문에 나온 이슈를 해결하기 위해 다양한 교차 검증 기법을 사용한다.
    • 이 기법은 모델의 일반화 성능을 예측하기 위해 훈련 데이터를 훈련 세트와 검증 세트로 더 나눈다.
  • 또 머신 러닝 라이브럴리들에서 제공하는 알고리즘의 기본 하이퍼파라미터가 현재 작업에 최적이라고 기대할 수는 없다. 이어지는 장에서는 모델 성능을 상세하게 조정하기 위해 하이퍼파라미터 최적화 기법을 사용할 것이다.
    • 하이퍼파라미터(hyperparameter)는 데이터에서 학습하는 파라미터가 아니라 모델 성능을 향상하기 위해 사용하는 다이얼로 생각할 수 있다.

모델을 평가하고 본 적 없는 샘플로 예측

  • 훈련 세트에서 최적의 모델을 선택한 후에는 테스트 세트를 사용하여 이전에 본 적 없는 데이터에서 얼마나 성능을 내는지 예측하여 일반화 오차를 예상한다.
    • 이 성능에 만족한다면 이 모델을 사용하여 새로운 데이터를 예측할 수 있다.
    • 이전에 언급한 특성 스케일 조정과 차원 축소 같은 단계에서 사용한 파라미터는 훈련 세트만 사용하여 얻은 것임을 주목해야 한다. 나중에 동일한 파라미터를 테스트 세트는 물론 새로운 모든 샘플을 변환하는데 사용한다.
    • 그렇지 않으면 테스트 세트에서 측정한 성능은 과도하게 낙관적인 결과가 된다. 

머신 러닝을 위한 파이썬

  • (이하 파이썬 설치에 대한 내용 생략)

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