파이썬을 이용한 머신 러닝


53

기계 학습 실험을 위해 Python 라이브러리 사용을 고려하고 있습니다. 지금까지 WEKA에 의존하고 있었지만 전반적으로 불만족 스러웠습니다. WEKA가 제대로 지원되지 않는 것으로 나타났습니다 (예를 들어, 문서가 드물고 커뮤니티 지원이 내 경험에서 바람직하지 않습니다). 내가이 움직임을 생각하고있는 또 다른 이유는 내가 정말로 파이썬을 좋아하고 (파이썬에 익숙하지 않다) Java에서 코딩으로 돌아가고 싶지 않기 때문입니다.

그래서 제 질문은 무엇입니까?

  1. 포괄적
  2. 확장 가능 (100k 기능, 10k 예) 및
  3. 파이썬에서 ML을 수행하기 위해 잘 지원되는 라이브러리?

특히 텍스트 분류에 관심이 있으므로 분류기, 기능 선택 방법 (정보 획득, Chi-Sqaured 등) 및 텍스트 사전 처리 기능 (스템 밍, 스톱 워드 제거)이 우수한 라이브러리를 사용하고 싶습니다. , tf-idf 등).

과거와 현재의 이메일 스레드를 기준으로 지금까지 PyML, scikits-learn 및 Orange를 살펴 보았습니다. 내가 언급 한 위의 3 가지 지표에 대한 사람들의 경험은 어떻습니까?

다른 제안?


의견을 보내 주셔서 감사합니다. 나는 지금 NLTK + scikit-learn과 함께 가고 어디로 가는지 볼 것이라고 생각합니다.
Andy

1
ML 라이브러리가 더 크고 (이 작업을 위해 특별히 만들어진) 훨씬 더 균질 한 환경을 제공하는 R 을 제안하는 것을 도울 수 없습니다 . R의 텍스트 마이닝 패키지가 여기표시됩니다 .

@mbq : 예, R에 대해 잘 알고 있지만 실제 텍스트 마이닝을 수행하기 전에 많은 "비 통계"프로그래밍을 수행해야하므로 지금은 Python을 사용한다고 생각합니다.
Andy

1
Python과 R을 모두 사용할 수 있습니다. 한 가지 옵션은 데이터베이스와 같은 언어 중립 저장 방법을 사용하여 데이터 처리 단계 사이에 결과를 유지하는 것입니다.
Faheem Mitha

파이썬 코드에서 Weka를 사용할 수 있습니다 : dimitri-christodoulou.blogspot.com/2012/03/…

답변:


40

scikit-learn 옵션 정보 : 100k (스파 스) 기능 및 10k 샘플은 메모리에 적합 할 정도로 작기 때문에 scikit-learn (20 개 뉴스 그룹 데이터 세트와 동일한 크기)으로 완벽하게 수행 할 수 있습니다.

다음은 연습 및 솔루션을 사용하여 텍스트 분류에 대한 장과 함께 PyCon 2011에서 제공 한 자습서입니다.

또한 PyCon FR에서 제공 한 버전의 업데이트 버전 인 주제에 대해서도 이야기했습니다. 슬라이드와 주석에 포함 된 비디오는 다음과 같습니다.

기능 선택에 대해서는 모든 예제가 scikit-learn 문서를 기반으로하는 quora에서이 답변을 살펴보십시오.

scikit-learn에는 배열 기능 추출이 아직 없습니다. 그 동안 nltk 및 nltk-trainer를 사용하여이를 수행하십시오.


감사. 이것은 특히 좋은 방법으로 보입니다. 나는 그것을 시도 할 것이다.
Andy

@ogrisel, 처음 세 개의 링크가있는 일부 링크가 썩었습니다 (링크 4의 비디오도 누락되었습니다). 여기에 새로운 Scikit 도메인에 대한 링크의 scikit-learn.org
xtian

14

텍스트 작업 측면에서 NLTK를 살펴보십시오. 매우 잘 지원되고 문서화되어 있으며 (온라인으로 책이 있거나 원하는 경우 종이로도 제공됨) 필요한 사전 절차를 수행합니다. Gensim도 유용 할 것입니다. 벡터 공간 모델링에 중점을두고 있으며 관심이 있다면 LSI 및 LDA (pLSI도 생각할 수 있음)의 확장 가능한 구현이 있습니다. 또한 tf-idf로 선택을 수행합니다-NLTK가 확실하지 않습니다. 나는 ~ 50k의 코 도라에서 많은 어려움없이 이것들을 사용했습니다.

NLTK : http://www.nltk.org/

Gensim : http://nlp.fi.muni.cz/projekty/gensim/

불행히도, 귀하의 질문에 대한 주요 견해에 관해서는 귀하가 참조하는 특정 라이브러리에 익숙하지 않습니다 (이전에 약간의 scikits-learn을 사용했지만).


3
NLTK의 경우 +1 기계 학습 연구 및 자연어 처리를 수행하는 올리비에 그리 젤 (Olivier Grisel)은 웹에서 유용한 자습서와 슬라이드를 제공합니다. 예를 들어 NLTK 및 scikit-learn (PyCON FR 2010)을 사용한 통계 학습 및 텍스트 분류를 생각할 수 있습니다 .
chl

@chi이 튜토리얼을 이용해 주셔서 감사합니다. 나는 약간의 파고를 쳤으며 거기에 좋은 자료가 많이있는 것 같습니다. 슬라이드에 히트 맵이있는 혼동 행렬도 표시합니다.)
JMS

9

파이썬에는 다양한 ML 라이브러리가 있습니다 (mloss.org도 확인하십시오). 그러나 나는 항상 그것이 의사 실무자보다 ml 연구자들에게 더 많이 사용된다는 느낌을 가지고 있습니다.

Numpy / SciPymatplotlib 는 Python을 사용한 과학적 작업을위한 훌륭한 도구입니다. 대부분의 수학 공식을 직접 해킹하는 것을 두려워하지 않는다면 실망하지 않을 것입니다. 또한 cudamat 또는 gnumpy 와 함께 GPU를 사용하는 것이 매우 쉽습니다 . 몇 일 전에 걸린 실험이 이제 몇 시간 또는 몇 분 안에 완료됩니다.

블록의 최신 아이는 아마도 Theano 일 것 입니다 . 이것은 기울기 기반 방법에 적합하지 않은 최적화, GPU 구현 및 über 기능 자동 차별화와 함께 제공되는 수학적 표현을위한 상징적 언어입니다.

또한 내가 아는 한 JMS에서 언급 한 NLTK는 기본적으로 가장 뛰어난 오픈 소스 자연어 라이브러리입니다.

파이썬은 기계 학습에 적합한 도구입니다.


8

오렌지를 제안하겠습니다

포괄적

확장 가능 (100k 기능, 10k 예)

파이썬에서 ML을 수행하기 위해 잘 지원되는 라이브러리?

분류기, 기능 선택 방법 (정보 획득, Chi-Sqaured 등)이 잘 갖추어 진 라이브러리,

이 모든 작업은 주황색 상자에서 작동합니다.

및 텍스트 전처리 기능 (스테 밍, 스톱 워드 제거, tf-idf 등).

그래도 텍스트 처리에 Orange를 사용한 적이 없습니다.


주황색은 +1 여기에는 빠른 속도로 익히는 방법을 보여주는 훌륭한 문서가 있으며 시각적 프로그래밍 GUI를 사용하거나 Python에서 라이브러리를 호출 할 수 있습니다.
Josh Hemann

4

이것이 유용한 지 확실하지 않지만 프로그래머가 온라인으로 사용할 수있는 Python의 통계를 배우는 안내서가 있습니다. http://www.greenteapress.com/thinkstats/

내 짧은 스캔에서 꽤 좋아 보이고 일부 머신 러닝 방법에 대해 이야기하는 것처럼 보이므로 시작하기에 좋은 곳일 수 있습니다.


3

libsvm을 확인하십시오 .


4
libsvm은 많은 기능과 샘플로 확장 할 수 없습니다. 동일한 저자가 liblinear를 더 잘 사용하십시오. 선형 모델은 일반적으로 고차원 공간에서 충분합니다.
ogrisel

scikits-learn과 orange 모두에 대해 svm 엔진을 libsvm하지 않습니까? 아니면 선형 사례에서 실제로 liblinear로 넘어 갑니까?
존 로버트슨

3

쇼군 ( 将軍 )은 대규모 머신 러닝 툴박스로 유망한 것으로 보입니다.



1

@ogrisel이 강조한 것처럼 scikit-learn은 Python을위한 최고의 머신 러닝 패키지 중 하나입니다. 100k (스파 스)의 작은 특징과 10k 샘플의 데이터 세트, 심지어 200k 개 이상의 행을 포함 할 수있는 약간 더 큰 데이터 세트에도 적합합니다. 기본적으로 메모리에 맞는 모든 데이터 세트.

그러나 확장 성이 뛰어난 Python Machine Learning 프레임 워크를 찾고 있다면 Pyspark MLlib를 적극 권장합니다. 요즘의 데이터 세트는 기하 급수적으로 커질 수 있기 때문에 (빅 데이터 및 딥 러닝 물결을 감안할 때) 모델 교육 단계뿐만 아니라 기능 엔지니어링 단계 (기능 변환 단계)에서도 잘 확장되고 빠르게 실행될 수있는 플랫폼이 필요합니다. , 기능 선택). 관심있는 Spark Mllib 플랫폼에 대한 세 가지 메트릭을 모두 살펴 보겠습니다.

  1. 확장 성 : 데이터 세트가 메모리에 맞으면 scikit-learn을 선택해야합니다. 메모리에 맞추기에는 너무 큰 경우 Spark를 사용하는 것이 좋습니다. 여기서 주목해야 할 것은 Spark는 분산 설정에서만 더 빠르게 작동한다는 것입니다.

  2. 포괄 성 : Sklearn은 스파크 mllib와 비교할 때 일반적으로 사용되는 많은 수의 알고리즘을 적절하게 구현하는 측면에서 훨씬 풍부합니다. 데이터 조작 및 변환에 대한 지원도 scikit-learn에서 더 풍부합니다. Spark Mllib에는 대부분의 트릭을 수행하는 충분한 데이터 변환 모듈이 있습니다. 따라서 확장 성 문제로 인해 Spark mllib로 끝나더라도 작업을 계속 수행 할 수 있습니다. 상관 분석, 기능 추출 (tf-idf, word2vec, CountVectorizer), 기능 변환 (Tokenizer, StopWordsRemover, nn-gram, Binarizer, PCA 등)을 모두 지원합니다. 자세한 목록은 아래 링크를 참조하십시오.

Spark mllib에서 기능 추출, 변환 및 선택

  1. 분류 : Spark mllib에는 대부분의 시간 (텍스트 분류에 잘 작동하는 알고리즘 포함)을 사용하는 모든 주요 알고리즘 구현이 있습니다. mllib를 통해 사용 가능한 알고리즘에 대한 자세한 개요는 아래 링크를 참조하십시오.

Mllib 분류 및 회귀

보너스 : Apache Spark는 Python, R, Java 및 Scala를 지원합니다. 따라서 내일 다른 언어 (개인 선택 또는 전문적인 이유로)로 실험하기로 결정한 경우 완전히 새로운 프레임 워크를 배울 필요가 없습니다.


0

아직도 조언을 찾고 있는지 모르겠습니다 (5 개월 전에이 질문을했습니다 ...). 방금이 책을 시작했고 지금까지는 꽤 좋습니다 :

https://www.amazon.com.mx/dp/1491962291/ref=cm_cr_ryp_prd_ttl_sol_3

저자는 코드, 예제를 보여주고 ML 알고리즘의 "비하인드"이론과 수학을 설명합니다. 나는 이것이 매우 유익한 것을 찾고 있습니다. 이것이 당신을 위해 동일 할 수 있기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.