태그 보관물: scikit-learn

scikit-learn 0.19 Release

파이썬의 대표적인 머신 러닝 라이브러리인 scikit-learn 0.19 버전이 릴리즈 되었습니다. 0.19 버전에는 여러가지 새로운 기능과 버그 수정들이 포함되었습니다. 대표적으로는 이상치 탐지를 위한 sklearn.neighbors.LocalOutlierFactor, 분위 값을 사용하는 sklearn.preprocessing.QuantileTransformer, 이진 분류기를 엮어 앙상블 시킬 수 있는 sklearn.multioutput.ClassifierChain,  교차 검증에서 훈련 세트와 테스트 세트의 점수를 모두 리턴해 주는 sklearn.model_selection.cross_validate가 추가되었습니다.

sklearn.decomposition.NMF의 solver 매개변수에 ‘mu'(Multiplicative Update)가 추가 되었고 sklearn.linear_model.LogisticRegression에 L1 규제를 사용한 SAGA 알고리즘의 구현인 ‘saga’ 옵션이 solver 매개변수에 추가되었습니다. 또 cross_val_score와 GridSearchCV, RandomizedSearchCV의 scoring 매개변수에 복수개의 스코어 함수를 지정할 수 있게 되었고 Pipeline 클래스에 memory 매개변수가 추가되어 그리드 서치 안에서 반복적으로 수행될 때 전처리 작업을 캐싱할 수 있게 되었습니다. 이 외에도 많은 버그가 수정되고 기능이 향상되었습니다. 자세한 내용은 릴리즈 노트를 참고하세요.

scikit-learn 0.19 버전은 pip 나 conda 를 이용하여 손쉽게 설치가 가능합니다.

$ conda install scikit-learn

$ pip install --upgrade scikit-learn

‘파이썬 라이브러리를 활용한 머신러닝’ 1, 2장

번역서 “파이썬 라이브러리를 활용한 머신러닝“의 1장과 2장의 내용을 담은 파이썬 머신러닝 페이지를 올렸습니다! 공개를 허락해 주신 한빛미디어에 다시 한번 감사의 말씀을 드립니다.

이 책의 1장과 2장은 지도 학습에 관련된 scikit-learn의 주요 클래스들을 다루고 있습니다. 여러 사람에게 유용한 자료가 되었으면 좋겠습니다. 최대한 출판된 책과 동일하게 포스트를 만들었는데 혹시 에러타가 있다면 언제든지 알려 주세요. 그럼 재미있게 읽어 주세요! 🙂

‘파이썬 라이브러리를 활용한 머신러닝’ 출간

b6119391002_lscikit-learn의 코어 개발자이자 배포 관리자인 안드레아스 뮐러Andreas Mueller와 매쉬어블의 데이터 과학자인 세라 가이도Sarah Guido가 쓴 ‘Introduction to Machine Learning with Python‘를 번역한 ‘파이썬 라이브러리를 활용한 머신러닝‘을 출간하였습니다.

출간 직전에 원서가 새로 릴리즈되어서 한바탕 소동을 벌이기는 등 이런 저런 일들이 오랜 작업 기간동안 생겼던 것 같습니다. 추운 겨울에 시작한 일을 한 여름이 되어서야 내놓게 되었네요. 책은 출간이 새로운 시작인 것 같습니다. 에러타나 궁금한 점 등 어떤 이야기도 괜찮습니다. 도서 페이지에 있는 양식을 통해 자유롭게 보내 주세요.

그리고 혹, 서점에 가시면 잘 보이는 곳으로 옮겨놔 주세요! 🙂

(업데이트) 번역서의 1장, 2장 전체를 블로그에 공개할 예정입니다. 공개를 허락해 주신 한빛미디어에 깊이 감사드립니다. 원고를 정리해서 올릴려면 1주일 정도 걸릴 것 같습니다. 😀

scikit-learn v0.18.1 Release

사이킷런 0.18 버전의 버그와 개선사항을 포함한 0.18.1 버전이 릴리즈 되었습니다. 사이킷런을 사용하는 모든 사람들에게 이 업데이트가 권장됩니다. 자세한 버그와 개선사항은 여기를 참고해 주세요. 아나콘다에서는 아래 명령으로 간단히 업데이트할 수 있습니다.

$ conda update scikit-learn

해커에게 전해들은 머신러닝

머신러닝과 딥러닝은 최근에 많은 개발자들에게 큰 관심을 받게 된것 같습니다. 이글은 서점에 있는 입문서를 보는데도 어려움을 느끼는 제 친구들을 위해 시작했습니다. 그러다 한빛미디어 세미나를 위해 조금 확장하여 작성하였습니다. 혹 머신러닝을 잘 아는 분이 이 글을 읽는다면 더 많은 사람들에게 도움이 될 수 있도록 부족한 점이나 잘못된 점을 알려 주시면 감사하겠습니다. 궁금한 점이나 개선할 부분 등 어떤 의견도 환영합니다.

세미나의 동영상이 한빛미디어 사이트에 등록되었습니다. 이 동영상을 수강하시면 제게도 도움이 됩니다. 🙂

가능하면 용어나 수식의 기호는 중용을 선택할 수 있도록 노력했고 수학 이론은 꼭 필요한 것만 다루었습니다. 여러 알고리즘이 있지만 가장 간단한 회귀 분석 부터 뉴럴 네트워크까지 자연스럽게 이어질 수 있도록 했습니다.

이 글에서 사용된 주피터 노트북 코드는 깃허브에서 확인할 수 있습니다. 소스 코드는 scikit-learn 버전 0.18 ,0.18.1 과 텐서플로우 버전 0.10, 0.11 에서 테스트 되었습니다.

그리고 이 글은 OpenAI의 안드레이 카패시(Andrej Karpathy)의 글 ‘해커가 알려주는 뉴럴 네트워크‘에서 일부분 영감을 얻었음을 밝힙니다. 재미있게 읽어 주세요.

 

해커에게 전해들은 머신러닝 #1

  • 머신러닝이란
  • 우리에게 필요한 도구들
  • 머신러닝 알고리즘 분류
  • 당뇨병 데이터
  • 하나의 뉴런
  • 경사하강법
  • 사이킷런에서는
  • 배치, 미니배치
  • 최소제곱법

해커에게 전해들은 머신러닝 #2

  • 테스트 데이터
  • 학습 속도
  • 검증 데이터
  • 정형화
  • 두개의 뉴런
  • 유방암 데이터
  • 로지스틱 회귀 분석
  • 사이킷런에서는

해커에게 전해들은 머신러닝 #3

  • 여러개를 분류하기
  • 소프트맥스
  • 손글씨 숫자 데이터
  • 딥 뉴럴 네트워크
  • 완전 연결 레이어
  • 그래디언트 행렬 계산
  • 완전 연결 뉴럴 네트워크
  • 사이킷런에서는

해커에게 전해들은 머신러닝 #4

  • 콘볼루션
  • 스트라이드, 패딩
  • 렐루
  • 서브샘플링
  • 텐서 크기
  • 콘볼루션 뉴럴 네트워크
  • 학습 결과

scikit-learn 0.18 Release

사이킷런(scikit-learn) 0.18 버전이 정식 릴리즈 되었습니다. 아나콘다를 사용할 경우 conda 명령으로 바로 업데이트 할 수 있습니다. 0.18 버전에는 퍼셉트론(Perceptron)이 추가되어 뉴럴 네트워크를 사이킷런에서 구현할 수 있게 되었습니다. 상세한 변경 내용은 이곳을 참고해 주세요.

New ML book & scikit-learn v0.18

rc_cat오라일리에서 새로운 파이썬 머신러닝 책인 ‘Introduction to Machine Learning with Python‘이 곧 출시될 예정입니다. 전체 챕터가 거의 다 써졌고 eBook 형태로 미리 구입해서 볼 수 있습니다. 이 책은 넘파이(numpy), 판다스(pandas), 사이킷런(sckit-learn)을 사용하며 최대한 수식은 줄인(아마 하나도 없는 것 같습니다) 실용서라고 볼 수 있습니다.

저자 중 한명인 안드리아스 뮐러(Andreas C. Mueller)는 뉴욕 대학교 리서치 엔지니어로 사이킷런의 코어 개발자 중 한명입니다. 누구보다도 사이킷런에 대해 잘 설명했으리라 생각됩니다. 그런데 이 책에서는 사이킷런의 안정버전인 0.17.x을 사용하지 않고 아직 개발버전인 0.18dev0을 선택했습니다. 혹시나 0.18 버전이 곧 릴리즈 되는건가 하는 생각에 저자에게 직접 물어 보았습니다. 역시나 이 책이 페이퍼백으로 출시될 때와 비슷한 시점인 대략 몇달 후에 0.18 버전이 릴리즈 될 것 같다고 합니다. 아마 늦어도 연내에는 0.18 버전이 나올 것으로 보입니다.

0.18 버전에 관심이 있는 것은 여러가지 기능 개선과 성능에 향상도 있겠지만 무엇보다도 뉴럴 네트워크 부분에 멀티레이어 퍼셉트론이 지원되기 때문입니다. MLPClassifier 와 MLPRegressor 클래스이며 사이킷런 개발버전 문서에서 확인할 수 있습니다.

주요 특징을 보면 활성화 함수로는 시그모이드, 하이퍼볼릭탄젠트, 렐루가 있고 최적화 옵션으로는 l-bfgs, SGD(Stochastic Gradient Descent), 아담(ADAM)이 있습니다. 모멘텀(Momentum)과 네스테로프 모멘텀(Nesterovs Momentum)을 설정할 수 있는 옵션도 보입니다. 옵션의 기본값을 보면 사람들이 어떤 것들을 선호하고 있는지를 미루어 짐작할 수 있는데요. 활성화함수는 렐루가 기본값이고 최적화는 아담입니다. 모멘텀과 네스테로프 모멘텀은 SGD와 함께 쓸 수 있는데 네스테로프 모멘텀의 기본값이 True로 되어 있습니다.

즉 사이킷런의 API는 렐루와 함께 아담이나 SGD+네스테로프 모멘텀을 사용하는 것이 기본으로 되어 있습니다. 올해 초에 작성되기 시작한 ‘Fundamental of Deep Learning‘ 책에서는 저자가 네스테로프 모멘텀에 대해 약간 보수적인 의견을 피력했었는데 사이킷런은 좀 더 적극적으로 적용하는 것 같습니다. 텐서플로우 0.9 버전에는 아직 네스테로프 모멘텀을 지원하지 않지만 바로 얼마전에 마스터 브랜치에 네스테로프 모멘텀을 지원하는 코드가 추가되었습니다! 아마 다음 릴리즈에서는 정식으로 포함되어 사용할 수 있을 것 같습니다. 현재 텐서플로우에 있는 네스테로프 모멘텀 옵션의 기본값은 False입니다.

사이킷런은 현재 GPU를 지원하지는 않습니다만 사이킷런의 장기 목표에는 GPU 지원도 포함되어 있는 것 같습니다. 사이킷런의 뉴럴 네트워크 사용에 관한 보다 자세한 설명은 가이드 문서를 참고하세요.

TPOT: Automatic ML

tpot-ml-pipeline

이미지출처: TPOT 도큐먼트

여러 머신러닝 모델을 기반으로 피처 셀렉션(feature selection)과 하이퍼파라메타(hyperparameter) 튜닝을 자동으로 해 주는 머신러닝 자동화 라이브러리 TPOT(깃허브)을 소개해 드립니다. TPOT은 scikit-learn을 기반으로 하고 있는 파이썬 라이브러리입니다. TPOT이 재미있는 점은 자동화 처리를 하는 것 뿐만 아니라 어떻게 모델을 만들었는지를 파이썬 코드로 익스포트(export)시켜 줍니다!

tpot-demo

이미지출처: TPOT 도큐먼트

유사한 툴로는 auto-sklearn(깃허브) 이 있습니다. 아직 두 라이브러리의 장단점이나 성능에 대한 자료는 없습니다.

(추가) 저자가 쓴 TPOT(Tree-based Pipeline Optimization Tool)에 대한 논문 ‘Automating biomedical data science through tree-based pipeline optimization'(1601-07925v1)입니다. 참고하시면 TPOT의 배경 이론을 이해하는 데 도움이 될 것 같습니다.