2015/02/28 11:56

선형 분류기 개념과 지지벡터머신(SVM, support-vector machines)에 대해 알아본다. 데이트 매칭에 데이터를 기본으로 알아봄. 



데이터 세트 


  - 데이터 분할에서 의사결정트리는 세로, 가로 직선으로 고지식함

  - 산포도(scatter plot chart)를 통해 도움받음 

 



기본 선형 분류


  - 산포도에서 각 범주(class) 내 모든 데이터들의 평균을 찾고 그 범주의 중앙을 나타내는 점을 만듦 (그림. 9-4)

  - 일치분류를 위해 백터의 각도를 계산해서 작으면 일치, 크면 불일치 (그림. 9-6)

  - 백터내적(dot-product) : 벡터와 벡터의 방향/크기 비교 






분류 데이터의 특성


  - 데이터 정규화 (Data Normalization)

  - 숫자로 변형 -> 예/아니오(1/-1), 관심/비관심(0/1) : 사람 쌍을 다룰 때 유용 

  - 공통 관심의 수, 모든 관심을 포용할 새로운 변수를 만듦

  - 거리 데이터 구함

  - 각 변수에 대한 축적(scale)을 조정함 : 최대/최소값 




커널 기법 이해

  

  - 커널 트릭 : 차원을 높이지 않고 차원을 올리는 효과를 거둠. 

  - 펑션을 통해 원하는 값을 구함 : 방사 펑션 (RBF: radial basis function)




지지 벡터 머신 (SVM)


  - 각 범주에서 가능한 멀리 떨어진 선을 찾아 해결하려고 시도한다. 비선형을 극복 (non-linear)

  - 먼저 범주를 나눈다 이때 커널 트릭을 사용해서 구하고 이것이 차원이 된다. 각 차원 즉 범주의 사이의 초평면(hyperplane)을 만든다. 

  - 해당 초평면에 근접한 것들이 매칭하는 것이다.  (그림. 9-10)





<참조> 


  - 내적 공간

  - 서포트 벡터 머신(한글), 서포트 벡터 머신 공식(영어)

  - 초평면

  - LIBSVM 라이브러리 

  - 정규화

저작자 표시 비영리 변경 금지
Posted by peter yun 윤영식
2015/02/21 13:23

가격 결정을 위한 모델링은 이질적인 속성을 기반을 둔 숫자 데이터를 예측하는데 최적의 알고리즘이다.




kNN


  - K-nearnest neighbors : k는 마지막 결과를 얻기 위해 평균을 낼 물품의 개수를 말한다. 데이터가 완벽하다면 k=1을 사용한다. 

  - 인접개수의 평균을 낼 때 너무 작거나 크면 안되고 적정개수를 찾아야 한다. 




물품 가중치


  - 거리에 따라 가중치를 둔다. 물품들이 비슷할 수록 그들 간의 거리가 더 가까워진다. 

  - 물품들을 군집화하기 위한 방법 - 적정한 인접 개수를 구하는 것이 필요하다. 

  - 역함수(inverse function), 빼기 함수(substraction function), 가우스 함수(gaussian function)

  - 가중 kNN (Weighted kNN) : 가우시안을 구하고 평균을 구한다 




교차검증


  - 데이터를 학습 세트와 테스트 세트로 나누는 기법들을 총칭한다. (cross validation set) : 표본값을 잘 뽑는 방법

  - training set -> test set 




이질 변수


  - 가격 결정에 너무 큰 영향을 미치는 이질적 요소

  - 변수의 단위가 틀릴때 스케일(Scale)을 조정하여 대입한다. 




실습 


  - $ pip install virtualenvwrapper

 - $ source /usr/local/bin/virtualenvwrapper.sh

 - mkvirtualenv env1

 - vi requirements.txt

// requirements.txt 내역 

beautifulsoup4==4.3.2

html5lib==0.999

lxml==3.4.2

numpy==1.9.1

pandas==0.15.2

python-dateutil==2.4.0

pytz==2014.10

six==1.9.0

wsgiref==0.1.2


  - pip install ipython  (module 없을 경우 계속 pip install <moduleName>)

  - ipython notebook 을 통해서 실습 시작

  - chapter7의 treepredict 데이터 생성 : data.txt

Referrer,Location,Read FAQ,Pages viewed,Service chosen

Slashdot,USA,Yes,18,None

Google,France,Yes,23,Premium

Digg,USA,Yes,24,Basic

Kiwitobes,France,Yes,23,Basic

Google,UK,No,21,Premium

(direct),New Zealand,No,12,None

(direct),UK,No,21,Basic

Google,USA,No,24,Premium

Slashdot,France,Yes,19,None

Digg,USA,No,18,None

Google,UK,No,18,None

Kiwitobes,UK,No,19,None

Digg,New Zealand,Yes,12,Basic

Google,UK,Yes,18,Basic

Kiwitobes,France,Yes,19,Basic


  - treepredict.py 작성 : pandas 통해서 데이터 만듦

import pandas as pd 


def main():

  data = pd.read_csv("./data.txt", sep=",")

  print data

  values = data.values

  print values


if __name__ == '__main__':

  main()


  - pandas로 하면 데이터 유형이 틀려지므로 그냥 책에 있는 내용 copy&paste

  - 실행 내역을 html로 출력

$ ipython nbconvert treepredict.ipynb

[NbConvertApp] Using existing profile dir: u'/Users/nulpulum/.ipython/profile_default'

[NbConvertApp] Converting notebook treepredict.ipynb to html

[NbConvertApp] Support files will be in treepredict_files/

[NbConvertApp] Loaded template full.tpl

[NbConvertApp] Writing 202262 bytes to treepredict.html

(env1)




<참조> 


  - https://virtualenvwrapper.readthedocs.org/en/latest/ : python 가상 환경 

  - https://pypi.python.org/pypi/virtualenv

  - iPython notebook 사용하기 

저작자 표시 비영리 변경 금지
Posted by peter yun 윤영식
2015/02/14 11:29

의사결정 과정 모델링에 대해 알아본다. 의사결정트리는 고객 프로파일링, 재무 위험 분석, 보조 진단, 트래픽 예측과 같은 넓은 응용분야에서 사용한다. 예로 사용자가 유료 고객이 될 가망성을 예측하여 사용자가 고객이 될 것임을 시사하는 요소를 알았다면 이 정보를 이용해서 광고 전략을 짜거나 사이트의 특정 측면에 쉽게 접근할 수 있게 만들거나 유료 고객의 숫자를 늘리는 데 도움이 되는 다른 전략들을 사용할 수 있다.




가입 유형 추정 


  - 유료 고객이 될 가망성을 예측하기 : 베이지안 분류기, 신경망을 이용

  - 관찰 결과를 분류하는 방법 : 의사 결정 트리를 if~then으로 만들고 경로를 따라 내려가면 해답에 이르게 됨 




트리 학습 


  - CART(Classification and Regression Tree) : 데이터를 분리하는 최적의 변수 찾기 true or false로 분기해야 하기 때문 

  - 최적 단편 선정

    + 최상위 부모로 있을 노드를 선정하고 그 하위로 나뉘어 내려감  

    + 지니 불순도(Gini imprity) : 집합 내의 항목 중 하나에 무작위로 적용될 기대 오류율 - 확률이 0이면 모든 것이 올바른 집합안에 있음

    + 엔트로피 : 데이터를 두개의 그룹으로 나누어 엔트로피를 줄여야 한다.

       p(i) = frequency(outcome) = count(outcome) / count(total rows) Entropy = sum of p(i) x log(p(i))  

       p(i) = 빈도(출력) = 횟수(출력)/횟수(가로줄 개수)

       엔트로피 = 모든 출력에 대해 p(i) * log(p(i))의 합 




재귀적으로 트리 만들기


  - 전체 그룹에 먼저 엔트로피를 구함 

  - 어떤 속성이 가장 잘 나누는지 결정하기 위해 정보이득(information gain)을 계산 -> 모든 속성마다 정보이득을 계산해 가장 높은 정보이득을 가진 것을 선택한다. 

  - 관측 값에서 더 분할 할지를 결정 : 새로운 노드마다 최적을 속성을 계산하면서 트리를 생성한다. 




트리 가지치기 


  - 트리를 학습시키면 학습 데이터를 과대하게 반영하는 과잉적합(overfitted) 문제에 직면한다. 

  - 노드 쌍을 병합해서 경계값 이하로 엔트로피를 늘 수 있는지 본다. 그렇다면 한개 노드로 병합한다. -> 과잉적합을 회피 

  - 최소 이득이 높아지면 상위 부모 노드로 병합.

 



손상된 데이터 다루기


  - 데이터 조각이 없을(손상된) 경우 : 각 가지의 결과를 계산하고 개별 가중치로 결합한다.




<참조> 


  - 의사결정트리

  - slideshare 의사결정트리

저작자 표시 비영리 변경 금지
Posted by peter yun 윤영식
2015/02/07 11:59

문서 필터링의 예를 알아본다. 이메일을 문서로 보고 학습된 정보를 통해 좋고 나쁨을 확률적인 값을 구한다. supervised learning의 예이다  




스팸 필터링 

  

  - 분류된 문서를 통해 판단

  - 문서를 bad, good으로 분류 : word === feature 

  - 분류된 것(특성==단어)의 출현횟수를 0과 1사이 값 확률로 변환한다.

  - 스팸필터를 계속 학습 시킨다.




기본 분류기 


  - 나이브 베이지안 분류기 (Naive Bayesian classifier) : A확률과 B확률은 독립적이다. 

    + Pr(A | B)

    + A == feature, B == Category이다. 

    + Category는 문장이 good(0), bad(1) 인지 정의한 정보 

    + 즉, 카테고리별로 피쳐를 분류해서 독립적으로 본다. 

  - 스팸필터의 경우 bad로 필터링되는 경계값을 보통 3으로 설정해서 bad가 될 확률이 good으로 분류될 확률에 비해 3배 높게 설정한다.

  - 피셔 방식(Fisher method) : 특성별 분류 확률 (개별특성) -> 개별특성들에 대한 확률 결합

    + 여기서는 카테고리별로 보지 않고 먼저 피쳐를 보고 카테고리전체를 본다. 

    + Pr(B | A) x Pr(A)/Pr(B)


    Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B)



<참조>


  - 나이브 베이지안 수행하기

저작자 표시 비영리 변경 금지

'Growth Hacker > Machine Learning' 카테고리의 다른 글

[ML] 9주차 - 가격 모델링  (0) 2015/02/21
[ML] 8주차 - 7장 의사결정트리  (0) 2015/02/14
[ML] 7주차 - 6장 문서 필터링  (0) 2015/02/07
[ML] 6주차 - 5장 최적화  (0) 2015/01/31
[ML] 4주차 - 군집하기  (0) 2015/01/03
[ML] 3주차 - 추천하기  (0) 2014/12/13
Posted by peter yun 윤영식
2015/01/31 12:01

최적의 방법을 찾는 행위 



최적화

  

  - Optimization은 무엇일까요?

    + 최고가 아닌 최적을 찾는 것.

  - Optimization 을 왜 하는가?

    + 기회 비용을 최소화해 최적화 값을 얻기 위해 통계적 최적화를 사용할 수 있다. 

  - Optimization 을 하면 최고인가?

    + 최적을 하는 것이다. 




해답 표현하기


  - 예) 비행편 출발 시간, 도착 시간을 하루 중 가장 먼저 출발하는 것을 0부터 시작해서 1씩 증가, 각 인원에 대한 수치를 1차원 배열로 나열하는 행위를 모델링이라 한다. 

    예) [1,4,5,2,3,7,4,2]

  - 첫값 : 0, 그리고 1식 증가 

  - 비행편 API 제공 : 카약 http://www.kayak.com/labs/api/search (개발자 키를 발급 받아야 함)

  - 랜덤 값을 사용한다. 얼마나 제대로 된 랜덤 값을 만들어 내느냐가 중요하다. 만약 랜덤 값을 사용하면 stochastic optimization 즉, 통계적인 최적화이다. 

  - 랜덤 값에 대한 부분은 도메인 지식을 필요로 한다?




비용 함수 (Cost Function)


  - 비용이 될 만한 것을 도출

  - 비용 함수에 적용하여 비용이 많이 들수록 큰값을 반환 




언덕등반 (hill climbing)


  - 무작위 해답으로 시작해서 더 좋은 해답을 찾아 이웃 해답들ㅇ르 살펴보는 기법

  - 내리막에서 오르막이 시작될 즈음에서 찾음. 좌우 비교를 통함. 

  - 결점 : 오르락 내리락할 때 작은 내리막이 최적이라고 판단할 수 있은 오류




시뮬레이티드 어닐링 (Simulated Annealing)


  - 물리학에서 영감을 받음

  - 언덕 등반의 결점을 보안

  - 나쁜 선택이 현재 선택이 될 수 있지만 계속 진행할 수록 낳아진다. 

  - 시장에서 많이 사용. 




유전자 알고리즘 (Genetic Algorithm)


  - 개체군(population)이란 무작위 해답들을 생성하면서 시작

  - elitism, 돌연변이(mutation), 교배(crossover), 번식(breeding)

  - 존 홀랜드 1975년 발생 "Adaptation in Natural and Artificial Systems"




선호도 최적화  


  - 최적화 기법의 필요 조건 : 문제가 정의된 비용 함수 + 유사한 해답이 유사한 결과를 낼 것




네트워크 시각화 

  

  - SNS에서 사용 



<참조> 


  - 시뮬레이티드 어닐링

  - 두번째

저작자 표시 비영리 변경 금지

'Growth Hacker > Machine Learning' 카테고리의 다른 글

[ML] 8주차 - 7장 의사결정트리  (0) 2015/02/14
[ML] 7주차 - 6장 문서 필터링  (0) 2015/02/07
[ML] 6주차 - 5장 최적화  (0) 2015/01/31
[ML] 4주차 - 군집하기  (0) 2015/01/03
[ML] 3주차 - 추천하기  (0) 2014/12/13
[ML] 2주차 - 추천하기  (0) 2014/12/06
Posted by peter yun 윤영식

티스토리 툴바