ITS's Dev Story

오늘은 지지 벡터 머신에 대해 알아보기로 하였다. 

이제부터 이 Numpy 기계학습 게시글에는 많은 자료를 올리지 않으려고 한다. 나는 이미 내 머신러닝 프로젝트에 쓸 알고리즘을 이미 찾았기 때문에 이제부터는 간략하게 요약만 할 생각이다. 아래는 위키피디아에서 가지고 온 '서포트 벡터 머신'이라는 자료이다.

-------------------------------------------------------------------------------------------

* Numpy 기계학습의 모든 문서는 제가 머신러닝을 공부하고, 제 프로젝트에 필요한 알고리즘을 찾기 위해 정리하는 일종의 '요점정리 노트' 입니다. 혹여나 오해 없으시기 바랍니다.

-------------------------------------------------------------------------------------------

서포트 벡터 머신(support vector machineSVM[1])은 기계 학습의 분야 중 하나로 패턴 인식, 자료 분석을 위한 지도 학습 모델이며, 주로 분류와 회귀 분석을 위해 사용한다. 두 카테고리 중 어느 하나에 속한 데이터의 집합이 주어졌을 때, SVM 알고리즘은 주어진 데이터 집합을 바탕으로 하여 새로운 데이터가 어느 카테고리에 속할지 판단하는 비확률적 이진 선형 분류 모델을 만든다. 만들어진 분류 모델은 데이터가 사상된 공간에서 경계로 표현되는데 SVM 알고리즘은 그 중 가장 큰 폭을 가진 경계를 찾는 알고리즘이다. SVM은 선형 분류와 더불어 비선형 분류에서도 사용될 수 있다. 비선형 분류를 하기 위해서 주어진 데이터를 고차원 특징 공간으로 사상하는 작업이 필요한데, 이를 효율적으로 하기 위해 커널 트릭을 사용하기도 한다.

이 알고리즘은 데이터에 집합이 주어졌을 때, 주어진 데이터 집합을 바탕으로 하여 데이터가 어느 카테고리에 속하는지 판단하는 분류 모델을 만드는데, 이 분류 모델은 아래와 같이 데이터가 사상된 공간에서 경계로 표현된 선형 분류 모델을 만들게 된다. 



* 사진 출처 : 위키피디아

아래는 SMO 알고리즘의 도움 함수이다.

def loadDataSet(fileName):
    dataMat = []; labelMat = []
    fr = open(fileName)
    for line in fr.readlines():
        lineArr = line.strip().split('\t')
        dataMat.append([float(lineArr[0]), float(lineArr[1])])
        labelMat.append(float(lineArr[2]))
    return dataMat,labelMat

def selectJrand(i,m):
    j=i 
    while (j==i):
        j = int(random.uniform(0,m))
    return j

def clipAlpha(aj,H,L):
    if aj > H: 
        aj = H
    if L > aj:
        aj = L
    return aj

오늘은 여기까지 하기로 했다.