[컴] scikit-learning 에서 naive Bayer 사용하기



설치

virtualenv / Tcl error 

예전 버전의 virtualenv 인 경우 tcl library 를 못찾는 error 가 나올 수 있다.(확실히 언제 버전부터 tcl 을 copy 하는 code 가 들어갔는지는 모르겠다. ref. 7 를 참고하자.)

여하튼 일단 virtualenv 를 최신버전으로 사용하자.
pip install virtualenv --upgrade

그리고 혹시나 현재 상태에서 사용하고 싶다면, 자신의 virtualenv 의 activate.bat 에 아래 code 를 추가하자.
set "TCL_LIBRARY=C:\Python27\tcl\tcl8.5"
set "TK_LIBRARY=C:\Python27\tcl\tk8.5"



package 설치

아래처럼 package 를 설치한다.

pip install scikit-learn
pip install numpy-1.11.0+mkl-cp34-cp34m-win_amd64.whl
pip install scipy-0.17.1-cp27-cp27m-win_amd64.whl
pip install matplotlib-1.5.1-cp27-none-win_amd64.whl


windows 에서 numpy 설치

ref. 4에 나와 있는 것처럼 ref. 1 의 pre-built 된 많은 binary 들이 numpy-1.10+mkl 을 필요로 한다.
Python Extension Packages for Windows - NumPy 에서 numpy-1.11.0+mkl-cp34-cp34m-win_amd64.whl 를 설치한다.

D:\mine\naiveBayes>pip install numpy-1.11.0+mkl-cp34-cp34m-win_amd64.whl

참고로, pip install numpy 를 하면, pre-built scipy 를 사용할 때 아래와 같은 error 가 발생한다.[ref. 5]
...
File "C:\Python27\lib\site-packages\scipy\__init__.py", line 61, in <module>
    from numpy._distributor_init import NUMPY_MKL  # requires numpy+mkl
ImportError: cannot import name NUMPY_MKL


windows 에서 scipy 설치

Python Extension Packages for Windows - Christoph Gohlke 에서 scipy whrl 을 download 하고, 아래처럼 설치한다. 참고로 내 python 은 python 2.7 이여서 cp27 이다.

D:\mine\naiveBayes>pip install scipy-0.17.1-cp27-cp27m-win_amd64.whl


linux 에서 Matplotlib 설치

설치할 때 build 를 위해 library 가 몇개 더 필요하다. 아래 글을 참고하자.
library 를 설치하고도 freetype header file 을 인식하지 못할 수 있다. 이때는 symbolic link 를 만들어 주면 된다.
  • sudo apt-get install libpng-dev libjpeg8-dev libfreetype6-dev
  • ln -s /usr/include/freetype2/ft2build.h /usr/include/  (참고)


사용

큰 data 처리하기

ref. 3 에 큰 data 에 대한 이야기가 있다.
컴퓨터 한대에서 사용가능한 RAM 용량의 20% 가 넘는 크기의 data 를 large data 라고 할 수 있다. 해결방법은 아래 2가지가 가능하다.
  1. data set 의 일부만(subset) 가지고 data 를 분석한다. 흔히 알고 있는 streaming data 를 처리하는 것이다.
  2. cloud 같은 것을 이용해서 더 큰 RAM 용량을 얻는다.

out-of-core

이중에 scikit-learn 에서  제공하는 out-of-core processing을 살펴 보자. ref. 4 에 따르면 scikit-learn  은 작은 크기의 data (smaller data) 에 최적화 되어 있다고 한다. scikit-learn 팀은 streaming data 를 처리할 수 있도록 시도하고 있다고 한다.[ref. 3]

그래서 scikit-learn 에서는 fit 대신에 사용할 수 있는 partial fit 을 제공한다.


이게 큰 data 를 여러개의 작은 조각으로 나눠서 작은 조각들을 처리해 나가는 것이다. 이를 통해서 모든 data 가 RAM 에 load 될 필요가 없어서 큰 data 를 처리할 수 있다.



pickle/unpickle

trained 된 model 을 저장해 놓을 수 있다. 이러면 매순간 predict 할 때마다 다시 train 하지 않아도 된다. 이것을 python 에서 pickle 이라 표현하는데, 이것을 위해 joblib.dump 와 joblib.load 를 제공한다. 이 녀석은 model 을 file 로 저장할 수 있게 해준다.

이 pickled 된 file 은 문제가 발생할 여지가 있다. 그래서 아래 2가지를 지키라고 한다.
  1. 절대 믿을 수 없는 data 를 unpickle 하지 마라
  2. 특정 버전의 scikit-learn 에서 save 된 Model 들은 다른 버전에서 load 되지 않을 수 있다.
pickle/unpickle 에 대한 자세한 이야기는 아래 동영상에서 확인할 수 있다.



Source code





See Also




Reference

  1. Python Extension Packages for Windows - Christoph Gohlke
  2. http://stackoverflow.com/a/37281256
  3. Riding on Large Data with Scikit-learn | Open Data Science
  4. We make the software, you make the robots - O'Reilly Radar
  5. Out-of-core classification of text documents — scikit-learn 0.17.1 documentation
  6. 6. Strategies to scale computationally: bigger data — scikit-learn 0.17.1 documentation
  7. Tcl doesn't work inside a virtualenv on Windows · Issue #93 · pypa/virtualenv · GitHub


댓글 없음:

댓글 쓰기