7월, 2016의 게시물 표시

Coursera week 3 Machine Learning: Classification

이미지
1. Introduction behind decision trees 이번에는 decision tree에 대해 공부한다. 고등학교 수학에서 배우는 알고리즘과 유사한 내용이다. decision tree model 은 위와 같은 구조를 갖고 있다. 모델을 만들기 위해 4가지 step이 필요하다. 1. 빈 노드로 시작해서 2. 데이터를 나눌 feature 선택 3. 반복문을 통해 split 할 feature 없으면 예측 실행 4. split할 feature 있으면 2로 돌아가 feature 선택 여기서 2가지 문제가 있다. 1. 어떤 feature을 선택해야하는가. 2. 반복문은 언제 끝나야하는가.  2. Learning decision trees   위처럼 하나의 decision 묶음을 Decision stump 라고 한다. 중간에 excellent , fair, poor 이 쓰여있는 노드를 intermediate node라고 한다. intermediate node 에 y hat 을 부여해 classification 을 가능케 해준다. feature selection 은 각 feature의 error rate를 계산해 가장 낮은 error rate 를 가진 feature를 선택한다. 즉, 탐욕 알고리즘의 일환이라고 할 수 있다. error rate = mistakes / data points 로 계산한다. mistakes 는 예를 들어, safe인데 Risky로 분류했다거나 그 반대이거나 하는 경우이다. 이제 첫번째 문제는 해결됐다. 이제 반복문은 언제 끝나야하는가 라는 문제가 남았다. 강의에서 제시하는 해결책은 아래와 같다. 1. 모든 데이터가 y 값에 동의할 때 2. 모든 feature이 split 됐을 때 3. Using the learned decision tre...

Coursera week 2 Machine Learning: Classification

이미지
Learning Linear Classifiers 1. Maximum likelihood estimation  회귀에서 배웠던대로 이번에도 최적의 w hat을 찾아내는 법을 배우는 모듈이다. w hat을 찾아내는 방법은 validation set을 이용해 정확히 구분해내는 계수를 찾는 방법 밖에 없다. 나중에 gradient ascent 를 배우겠지만 현재는 하나씩 해보며 최적의 계수를 찾는 법을 배운다. 위와 같이 l(w) 함수를 이용한다. 여기서 quality metric을 잘 봐두어야한다. w 를 최적화시키기 위해 위와 같은 식을 이용한다. 회귀에서는 RSS를 최소화시키는 방법을 이용했지만 분류에서는 l(w)를 최대화시키는 방법을 이용한다. data set에 위 식을 이용해 위 식의 값을 가장 극대화시키는 w를 찾는 것이다. 즉, 이미 답이 맞추어져 있는 데이터 셋에 w를 하나씩 계산해가며 가장 좋은 w를 찾는것이다. 예를 들면 , 맞출 확률이 0.9 * 0.9 * 0.8 은 큰 값을 가지며 최적화된 w를 갖고 있는 것이며, 0.1 * 0.2 * 0.4 는 안좋은 w를 값을 가지고 계산해본 것이다. 회귀의 gradient descent 와는 다르게 분류에서는 최댓값을 구하는 gradient ascent 를 구한다. 최댓값을 구하는 목적은 위에서 봤듯이 정답일 확률은 큰 것이 좋은 분류기이기 때문이다. 2. Gradient ascent algorithm for learning logistic regression classifier 첫번째 사진에서 보는 미분값을 가지고 gradient ascent 를 수행한다. 첫번째 사진의 미분값이 나타내는 것은 l(w) 에 대해 w0,1,2,...,D까지 미분을 수행한 행렬을 보여준다. 좀 더 자세히 알아보자. 위와 같은 식으로 0부터 D까지 만든 미분값을 행렬로 만든 것이다. 이제 예제를 통해 ...

Coursera week 1 Machine Learning: Classification

이미지
1. Course overview and details 위 과정은 분류 과정의 overview이다. 여기서 내가 주목한 것은 linear classifiers 와 logistic regression의 차이점이다. 그 차이점을 단적으로 보여주는 아래의 두 그래프를 보자. 첫번째 사진이 linear classifier이고 두번째가 logistic regression 이다. 자세히 보지 않고 단적인 차이점은 선의 유무이다. 전자는 선을 경계로 위는 - 아래는 +로 표시하고 후자는 색의 진함으로 + 혹은 - 일 확률을 표시했다. 후자의 1 / ( 1+ e^(-w*h(x)) 는 시그모이드함수이다. 다른 여러 모델들과 알고리즘들을 머신러닝 인 액션이라는 책에서 한번 훑어본 적이 있어서 그런지 굉장히 익숙하고 개념만 아는 정도이다. 이 강의를 통해 다시 한 번 개념을 정리하고 실습해봐야겠다. 2. Linear Classifiers 선형 회귀에서는 부동산 가격에 대한 예제를 들었지만 이번 분류에서는 스시 가게의 리뷰를 보고 단어들을 분석해  리뷰의 내용이 좋은 것인지 나쁜 것인지 분류하는 예제에 대해 공부한다. 이 분류가 나에게 굉장히 의미있는 공부가 될 것 같다. 왜냐하면 어제 하둡을 설치하고 맵리듀스를 통해 wordcount를 해봤기 때문이다. 더 나아가 소셜 미디어의 내용을 모아서 분류해서 새로운 것을 창조할 수 있기 때문이다. 분류의 기본 알고리즘은 위와 같다. 단어들에 weight를 두어 리뷰의 단어들을 계산하여 score를 책정한 뒤 0보다 크면 좋은 리뷰라는 +1을 y hat 에 저장하고 0보다 작으면 나쁜 리뷰라는 -1을 y hat 에 저장한다. 다변수의 모델을 나타내면 위와 같다. simple hyperplane은 초평면이라는 다차원 공간에서 나타나는 면이다. sign...

하둡 설치 오류 정리

이미지
길고 긴 설치였다. 이틀동안 하둡 설치하는데 시간을 다 썼다. 이 때까지 오류 나왔던 것들을 다시 한 번 정리하는 의미에서 글을 쓰겠다. 이 게시글은 설치 가이드가 아닌 오류를 정리하는 글이다. 우선 나의 하둡 설치 환경에 대해 설명하자면, VirtualBox 에서 3개의 우분투 16.04버젼을 설치하고 컴퓨터의 이름은 hadoop1-VirtualBox hadoop2 hadoop3으로 하였다.  첫번째 로 만났던 고난은 리눅스의 계정 관리였다. 되도록이면 adduser을 통해 3개의 가상 머신에 hadoop이라는 계정을 만들어주는 걸 강력 추천한다. 그래야 나중에 혼동이 없고 configure 파일 수정할 때 편리하다. hadoop@hadoop1-VirtualMachine $ 위와 같이 써있으면 전자 hadoop은 계정이고 후자는 컴퓨터 이름이다.  두번째 는 ras_pub 이었다. 즉, ssh 연결할 때 비밀번호 없이 공개 키를 주어 접속할 수 있도록하는 방법이다. hadoop@hadoop1에서 hadoop@hadoop2로 ssh 접속을 하기 위해 전자에서 후자로 공개 키를 복사해서 주었을 것이다. 책에서는 이렇게 하면 끝이라고 했지만 후자에서 전자로 또 공개 키를 복사해주는 것이 좋다고 한다.  세번째 는 네트워크 접속 거부이다. 여기서 엄청 애 먹었다. iptables 나 netstat을 통해 이것저것 다 해봤다. 가장 효과적인 것은 gufw 를 apt-get install 해서 방화벽을 재설정했다. 나는 9000, 9001, 50070, 50090 포트를 모두 열어놨고 내부 네트워크에서 오는 접속은 모두 허용했다. 마지막으로 내가 생각하는 해결책은 /etc/hosts 에 있는 파일을 수정하는 것이다. 설치 가이드를 보면 이 파일을 수정하게 되는데 아래와 같이 되어 있었다. 127.0.0.1 localhost 127.0.1.1 hadoop1 두번째 있는 127.0.1.1 ...

#4 가게 매출 예측

회귀를 공부하고 분류 강의가 나올 때까지 기다리고 있는 상황에서 딥러닝 강의도 회귀까지 정리했고 할 것이 마땅치 않아 선형 회귀 실습을 해봐야겠다고 생각했다. 데이터를 찾다가 공공 데이터도 있겠지만 어머니 가게 매출 데이터를 뽑아서 해봐야겠다고 생각했다. 하지만 가게 포스 기계에서는 매출만 txt로 뽑을 수 있고 메뉴별 매출이나 시간대별 매출은 제공되지 않는 것 같았다. 그래서 내가 여러 변수를 만들기로 했다. 우선 매출은 데이터로 뽑아 왔고, 매출에 영향을 줄 수 있는 요인은 무엇이 있나 생각해보았다. 날씨도 영향을 줄 것 같고 학교 앞이라 방학 여부도 중요할 것 같았다. 그리고 중요하다고 생각한 것은 요일이었다. 그래서 날씨 데이터를 인터넷에서 뽑고 방학 여부는 1,2,7,8 월 달은 방학이라는 표시를 했다. 요일은 파이썬의 datetime 모듈을 사용했다. 매출 데이터는 2013년 부터 2016년까지 사용했다. 아래의 코드를 사용해 매출 데이터를 예측해봤다. ----------------------------------------------------------------------- import numpy as np import pandas as pd import matplotlib.pyplot as plt from datetime import datetime import time from sklearn import linear_model from sklearn import cross_validation def order_data():     f = open("샤브향_정산분석파일.txt")     sales = []     count = 0     for line in f.readlines():         if line[-1] == '\n':       ...

ML lab 04 DeepLearning

이미지
ML lec 04 - multi-variable linear regression 이번에는 다양한 variable(feature) 을 이용한 회귀를 공부한다. 전에 공부했던 걸 요약하자면 3가지로 요약할 수 있다. 1. Hypothesis  H(x) = W*x + b 2. Cost function cost(W,b) = (1/m) * (H(xi) - yi)^2 3. Gradient descent Algorithm 코세라에서도 이미 공부했던 거라 더 자세히 알고 있다. 이 유튜브 강의는 딥러닝 강의라 회귀 파트는 간단히 하는 것 같다. 위 표처럼 variable 이 2가지가 존재한다. 공부하 시간과 학습 태도를 가지고 점수를 예측하는 것이다. 위 내용을 식으로 표현하면 아래와 같이 표현할 수 있다. 위 식을 매트릭스로 표현하는 것이 좋다. 트랜스포스를 이용해 행렬에서 곱셈을 이용할 수 있다. 위 과정을 텐서플로우로 옮겨보자. -------------------------------------------------------------- import tensorflow as tf import numpy as np #파일 첫줄에 "#"이 있는 것은 주석으로 처리하여 읽지 않음 xy = np.loadtxt('data.txt',unpack=True,dtype='float32') #첫줄부터 맨마지막 전까지 (-1은 끝에서 부터 세는것) x_data = xy[0:-1] #y데이터는 맨 마지막 번째 y_data = xy[-1] # x_data = [[1.,0.,3.,0.,5.],[0.,2.,0.,4.,0.]] # y_data = [1,2,3,4,5] print x_data print y_data #4개의 데이터 W = tf.Variable(tf.random_uniform(...

ML lab 03 DeepLearning

이미지
이전에 cost  함수에 대해 배웠다. 그렇다면 어떻게 cost 최소화를 할 수 있는가? 코세라에서는 미분값을 0으로 하는 방법과 gradient descent 가 있었다. 강의에서는 h hat = W*x 로 두어 cost함수를 간단히 해서 계산하였다. cost 함수의 그래프는 어떻게 그려질까에 대해 알려주신다. 하지만 위와 같은 cost 함수는 아주 간단한 함수이며, 차원이 늘어날수록 눈으로 지각하기 힘들것이다. 여기서 gradient descent 를 제시하신다. 기울기 값을 기준으로 움직여 결국 최소점에 도달하게 되는 알고리즘이다. 코세라와 다르게 여기는 미분을 의식해서 2m 을 나누어 간단히 했다. 위 과정을 통해 cost를 최소화할 수 있다.

ML lab 02 DeepLearning

이미지
이번에는 선형 회귀에 대해 공부한다. 강의하시는 교수님께서 1. Andrew Ng's ML class 2. CS231n 3. Tensorflow 위 3가지 강의 자료를 편집해서 강의하신다. 선형 회귀의 간단한 개념은 데이터를 학습시켜 모델링하여 만들어진 인공지능에 자신이 원하는 값을 넣으면 어떤 예측을 하는지 알 수 있는 것이라고 한다. 선형 회귀에서 우리의 가설은 H(x) = Wx + b 라고 나타낸다. 그리고 가설과 데이터의 차이를 나타내는 함수는 cost function 이라고 한다. cost function 을 나타내보면, ( H(x) - y ) ^ 2 으로 나타낼 수 있다. 마이너스 값도 존재할 수 있기 때문에 제곱을 하여 cost 를 나타낸다. 우리의 목표는 cost 를 가장 작게 하는 것이다. 이제 tensorflow에서 어떻게 돌아가는지 알아보자. ----------------------------------------------------------------- import tensorflow as tf #값 설정 x_data = [1,2,3] y_data = [1,2,3] # -1.0 부터 1.0까지의 수중 랜덤하게 갖는 변수를 정의함 W = tf.Variable(tf.random_uniform([1],-1.0,1.0)) b = tf.Variable(tf.random_uniform([1],-1.0,1.0)) #1차 방정식 ax+b의 식을 세움 hyp = W * x_data + b # 손실함수는 (가정 - 실제)^2 의 평균으로 연산을 정의함 cost = tf.reduce_mean(tf.square( hyp - y_data )) #손실함수를 최소로 만들도록 정의함 optimizer = tf.train.GradientDescentOptimizer(1e-2) train = optimizer.minimize(cost) #W,B의 변수들을 초기화 시켜주는 연산을 정의함...

ML lab 01 DeepLearning

이미지
코세라의 회귀 파트를 끝내고 이제 분류 파트 기다리는 상황에서, 유튜브로 시간 날 때마다 본 deeplearning 강의를 정리해야겠다. 이 강의의 순서는 아래와 같다. 1. Machine learning basic concepts 2. Linear regression 3. Logistic regression ( Classification ) 4. Multivariable linear/logistic regression 5. Neural networks 6. Deep learning   6.1 CNN  6.2 RNN  6.3 Bidirectional Neural networks 현재 강의는 CNN까지 들었는데 강의가 좋고 한글이라 이해가 잘 되기 때문에 이 강의 또한 블로그에 정리하며 들어야겠다고 생각했다. 또한 코드의 예제가 파이썬이라는 점이 굉장히 좋다. https://www.youtube.com/channel/UCML9R2ol-l0Ab9OXoNnr7Lw 위 URL은 이 강의를 하시는 홍콩 과기대 교수님의 채널이다. 친절하고 천천히 알려주시기 때문에 딥러닝을 입문하기에 좋을 것 같다. 하지만 왠만하면 머신 러닝의 기초 지식이 있으면 강의를 곱씹으며 이해할 수 있을것이다. 그러므로 코세라의 회귀를 공부하고 이 유튜브 강의의 회귀까지 정리할 것이다. LAB 01 : Machine learning basic concepts 머신러닝의 기본인 지도학습/비지도학습은 각설하고 tensorflow 의 기본 operation에 대해 알아볼것이다. 텐서플로우는 오픈소스 소프트웨어 라이브러리로 data flow graph를 이용한다고 한다. (출처 : https://gist.github.com/haje01/202ac276bace4b25dd3f) data flow graph 는 위와 같은 구조를 갖고...

Coursera Machine Learning: Regression Final ( week 4 ~ 6 )

이미지
WEEK 4 이번 주의 목표는 4가지이다. 1. overfit에 대한 이해 2. overfitting을 피하기 위한 Ridge Regression 3. RSS 함수를 통한 Ridge Regression Optimizing  3-1. set the gradient 0  3-2. gradient descent 4. validation set을 통한 람다 구하기 1. overfit에 대한 이해 어떻게 trade-off 관계에서 sweet spot 이라는 점에 도달해 가장 좋은 퍼포먼스를 낼 수 있을까? overfit 은 bias 와 variance 간의 관계를 잘 조절하면 해결 할 수 있다. 함수의 계수가 엄청 크면 overfit하다고 한다. 그렇다면 overfit은 어떻게 해결할 수 있을까? 강의에서는 Ridge Regression을 제시한다. 2. overfitting을 피하기 위한 Ridge Regression 위에서 얘기한 것처럼 예측 함수의 계수가 너무 크면 overfit일 가능성이 크다고 했다. 그래서 cost format 을 아래의 사진처럼 바꿀 수 있다. measure of fit 은 RSS 를 뜻하고, measure of magnitude of coefficient 는 이제 구하는 법을 알아볼 것이다. 위처럼 어떻게 계수를 모두 더해 측정할 수 있는가에 대해 3가지 방법이 있다. 그 중 제곱하여 더하는 방법을 택해 계산할 것이다. 이제 cost function 의 크기를 조절해가며 최적의 예측 함수를 만들것이다. 위의 람다는 tuning parameter 로 유저가 조절하면서 bias 와 variance 를 조절할 수 있고 또한 overfit도 조절할 수 있다. 위의 그림처럼 람다를 늘려갈수록 여러 input 들의 계수가 줄어들고 나중에는 0으로 수렴하는 것을 볼 수 있다. 너무 큰 람다는 높은 bias 와 낮은 va...