Numpy를 이용한 기계학습 프로젝트 - 7
오늘은 머신러닝 중 최적화 알고리즘, 로지스틱 회귀에 대해 탐구해 보기로 하였다. 가장 빠른 시간에 A에서 B로 가기 위해서는 가장 빨리 갈 수 있는 길을 컴퓨터가 찾아야 할 것이다. 이러한 것을 처리할 수 있는 가장 효과적인 방법이 바로 최적화 알고리즘이다.
-------------------------------------------------------------------------------------------
* Numpy 기계학습의 모든 문서는 제가 머신러닝을 공부하고, 제 프로젝트에 필요한 알고리즘을 찾기 위해 정리하는 일종의 '요점정리 노트' 입니다. 혹여나 오해 없으시기 바랍니다. (2016.03.14 추가)
-------------------------------------------------------------------------------------------
중학교 1학년 수학에서 처음으로 좌표평면을 이용한 함수를 배우게 되는데, 이도 이 알고리즘과 연관이 있다. 데이터가 표시된 좌표평면을 가로지르는 선을 최적선이라고 하고, 이 선을 그리는 것을 회귀라고 한다고 한다. 우선 나는 로지스틱 회귀 모델을 사용해서 기울기 상승 최적화 함수를 탐구해 보기로 하였다. 소스코드는 아래와 같다.
from numpy import * def loadDataSet(): dataMat = []; labelMat = [] fr = open('testSet.txt') for line in fr.readlines(): lineArr = line.strip().split() dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])]) labelMat.append(int(lineArr[2])) return dataMat,labelMat def sigmoid(inX): return 1.0/(1+exp(-inX)) def gradAscent(dataMatIn, classLabels): dataMatrix = mat(dataMatIn) labelMat = mat(classLabels).transpose() m,n = shape(dataMatrix) alpha = 0.001 maxCycles = 500 weights = ones((n,1)) for k in range(maxCycles): h = sigmoid(dataMatrix*weights) error = (labelMat - h) weights = weights + alpha * dataMatrix.transpose()* error #matrix mult return weights
이후 매스플롯라이브러리를 사용해서 직접 풀룻하는 코드이다. 소스코드는 아래와 같다.
def plotBestFit(weights): import matplotlib.pyplot as plt dataMat,labelMat=loadDataSet() dataArr = array(dataMat) n = shape(dataArr)[0] xcord1 = []; ycord1 = [] xcord2 = []; ycord2 = [] for i in range(n): if int(labelMat[i])== 1: xcord1.append(dataArr[i,1]); ycord1.append(dataArr[i,2]) else: xcord2.append(dataArr[i,1]); ycord2.append(dataArr[i,2]) fig = plt.figure() ax = fig.add_subplot(111) ax.scatter(xcord1, ycord1, s=30, c='red', marker='s') ax.scatter(xcord2, ycord2, s=30, c='green') x = arange(-3.0, 3.0, 0.1) y = (-weights[0]-weights[1]*x)/weights[2] ax.plot(x, y) plt.xlabel('X1'); plt.ylabel('X2'); plt.show()
▲ Python Shell Code
▲ 플롯으로 출력한 모습
오늘은 여기까지 하기로 했다.
'Project > Dev Story' 카테고리의 다른 글
Numpy를 이용한 기계학습 프로젝트 - 9 (0) | 2016.03.14 |
---|---|
Numpy를 이용한 기계학습 프로젝트 - 8 (0) | 2016.01.20 |
Numpy를 이용한 기계학습 프로젝트 - 6 (0) | 2016.01.12 |
Numpy를 이용한 기계학습 프로젝트 - 5 (0) | 2016.01.09 |
Numpy를 이용한 기계학습 프로젝트 - 4 (0) | 2016.01.08 |