Python kullanarak Makine Öğrenmesi


53

Makine Öğrenimi deneylerimi yapmak için Python kütüphanelerini kullanmayı düşünüyorum. Şimdiye kadar WEKA'ya güveniyordum, ama genel olarak oldukça memnun kaldım. Bunun temel nedeni WEKA'nın o kadar iyi desteklenmediğini tespit etmem (çok az örnek, dokümantasyon seyrek ve topluluk desteği benim deneyimimden daha az isteniyor) ve kendimi yapışkan durumlarda kendime yardım etmeden bulmam. Bu hareketi düşündüğüm bir başka neden de Python'u (Python'da yeniyim) gerçekten sevmem ve Java'daki kodlamaya geri dönmek istememem.

Öyleyse sorum şu, dahası ne?

  1. kapsamlı
  2. ölçeklenebilir (100k özellikler, 10k örnekler) ve
  3. Python'da ML yapmak için iyi desteklenmiş kütüphaneler var mı?

Özellikle metin sınıflandırma yapmakla ilgileniyorum ve bu yüzden iyi bir sınıflandırıcı koleksiyonuna, özellik seçim yöntemlerine (Bilgi Kazancı, Chi-Sqaured vb.) Ve metin ön işleme özelliklerine (kaynak, kelime silme kaldırma) sahip bir kütüphaneyi kullanmak istiyorum. , tf-idf vb.).

Buradaki ve başka yerlerdeki geçmiş e-posta başlıklarına göre, şu ana kadar PyML, scikits-learn ve Orange'a bakıyorum. İnsanların deneyimleri, bahsettiğim yukarıdaki 3 metrikle ilgili nasıl olmuştur?

Başka bir önerin var mı?


Yorumlarınız için herkese çok teşekkür ederim. Şimdilik NLTK + scikit-learn ile gideceğim ve işlerin nereye gittiğini göreceğim.
Andy,

1
Size daha büyük ML kütüphanesi olan ve (özellikle bu iş için yapılmış) çok daha homojen bir ortam sağlayan R'ye bakmanızı önermekte yardımcı olamam . R'nin metin madenciliği paketi burada sunulmaktadır .

@mbq: Evet, R'nin farkındayım, ancak asıl metin madenciliğini yapmadan önce çok fazla “istatistik dışı” programlama yapmak zorunda kaldığımdan beri şimdilik Python'a bağlı kalacağımı düşünüyorum.
Andy,

1
Hem Python hem de R'yi kullanabilirsiniz. Bir seçenek, sonuçları veri işleme adımları arasında tutmak için veritabanı gibi bir dil gibi boş saklama yöntemini kullanmaktır.
Faheem Mitha

Yanıtlar:


40

Scikit-learn seçeneği hakkında: 100k (seyrek) özellikleri ve 10k örnekleri belleğe sığacak kadar küçüktür, bu nedenle scikit-learn ile mükemmel şekilde yapılabilir (20 haber grubu veri setiyle aynı boyutta).

İşte PyCon 2011'de alıştırmalar ve çözümlerle birlikte metin sınıflandırma üzerine bir bölüm verdim:

Ayrıca PyCon FR'de verdiğim sürümün güncellenmiş bir sürümü olan konu hakkında bir konuşma yaptım. İşte slaytlar (ve yorumların içine gömülü video):

Özellik seçimine gelince, tüm örneklerin scikit-learn belgelerine dayandığı quora hakkındaki bu cevaba bakınız:

Henüz scikit-learn'da sıralama özelliği çıkartma özelliğine sahip değiliz. Bunu yapmak için nltk ve nltk-trainer kullanın.


Teşekkürler. Bu, özellikle ileriye dönük bir yol gibi görünüyor. Deneyeceğim.
Andy,

@ogrisel, ilk üç bağlantıdan bazılarının çürüdüğü (dördüncü bağlantıdaki video da eksik). İşte yeni Scikit alan adı için bir link. Scikit-learn.org
xtian

14

Metinle çalışma konusunda NLTK’ya bir göz atın. Çok, çok iyi desteklenmiş ve belgelenmiş (çevrimiçi bir kitap ya da tercih ederseniz bir kâğıt kitap bile var) ve ihtiyacınız olan ön hazırlık işlemini yapacak. Gensim'i de faydalı bulabilirsiniz; vurgu, vektör uzayı modellemesinde ve eğer ilgilenirse LSI ve LDA'nın (pLSI da) ölçeklenebilir uygulamaları var. Ayrıca, tf-idf ile seçim yapacak - NLTK'nın yaptığından emin değilim. Bunları ~ 50k şirketlerinde fazla zorluk çekmeden kullandım.

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

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

Maalesef, sorunuzun ana itimiyle ilgili olarak, referans aldığınız belirli kütüphanelere aşina değilim.


3
NLTK için +1. Makine Öğrenimi araştırması ve Doğal Dil İşleme yapan Olivier Grisel’in web üzerinde dolaştığı bazı dersler ve slaytlar var. Aklıma NLTK ile İstatistiksel Öğrenme ve Metin Sınıflandırma ve scikit-öğrenme örneğin, (PyCON FR 2010).
chl

@chi Bu eğitim için teşekkürler, biraz alay ediyordum ve dışarısı çok hoş bir malzeme. Ayrıca slaytlarında bir ısı haritası olan bir karışıklık matrisi gösterir;)
JMS

9

Python'un çok çeşitli ML kütüphaneleri vardır (mloss.org'u da inceleyin). Ancak, ml uygulayıcıları için olduğundan, ml araştırmacılar için her zaman daha fazla kullanım hissine sahip olduğumu hissediyorum.

Numpy / SciPy ve matplotlib , Python ile bilimsel çalışmalar için mükemmel bir araçtır. Matematik formüllerinin çoğunu kendiniz kesmekten korkmazsanız, hayal kırıklığına uğramayacaksınız. Ayrıca, GPU'yu cudamat veya gnumpy ile kullanmak çok kolaydır - daha önce günlerce süren deneyler saatler, hatta dakikalar içinde tamamlandı.

Bloktaki son çocuk muhtemelen Theano . Yetkileri, GPU uygulamalarını ve degrade temelli yöntemler için harika bir şey olmayan über özellikli otomatik farklılaşmayı içeren matematiksel ifadeler için sembolik bir dildir.

Ayrıca, bildiğim kadarıyla JMS'nin bahsettiği NLTK temelde bir numaralı açık kaynaklı doğal dil kütüphanesi.

Python, makine öğrenmesi için doğru araçtır.


8

Beni önerelim Orange

kapsamlı

Evet

ölçeklenebilir (100k özellikler, 10k örnekler)

Evet

Python'da ML yapmak için iyi desteklenmiş kütüphaneler var mı?

Evet

iyi bir sınıflandırıcı koleksiyonuna sahip kütüphane, özellik seçimi yöntemleri (Bilgi Kazancı, Chi-Sqaured vb.),

Bunların hepsi Orange'daki kutudan çıktı.

ve metin ön işleme yetenekleri (stemming, stopword kaldırma, tf-idf vb.).

Yine de Orange'ı metin işlemede hiç kullanmadım


Orange için +1. Hızlanmayı nasıl hızlandıracağını gösteren harika bir dokümantasyona sahipler ve görsel-programlama GUI'lerini kullanabilir veya kütüphaneleri Python'dan arayabilirsiniz.
Josh Hemann

4

Bunun özellikle faydalı olup olmadığından emin değilsiniz ancak programcıların Python'da çevrimiçi olarak istatistik öğrenmesi için bir rehber var. http://www.greenteapress.com/thinkstats/

Kısa taramamdan oldukça iyi görünüyor ve bazı makine öğrenme yöntemleri hakkında konuşuyor gibi görünüyor, bu yüzden başlamak için iyi bir yer olabilir.


3

Libsvm'ye göz atın .


4
libsvm çok sayıda özellik ve örneğe iyi ölçeklenemez. Aynı yazarlar tarafından serbestçe kullanılması daha iyi. Doğrusal modeller genellikle yüksek boyutlu uzayda yeterince iyidir.
Ogrisel

Libsvm hem bilim adamları hem de portakallar için svm motoru değil mi? Yoksa lineer durumda gerçekten geri dönmeye mi düşüyorlar?
John Robertson



1

@Ogrisel'de vurgulandığı gibi, scikit-learn, Python için en iyi makine öğrenme paketlerinden biridir. 100k (seyrek) özellikler ve 10k örnekler kadar küçük veri kümeleri ve hatta 200k'den fazla satır içerebilen marjinal olarak daha büyük veri kümeleri için bile uygundur. Temel olarak, belleğe uyan herhangi bir veri kümesi.

Ancak, yüksek derecede ölçeklenebilir bir Python Machine Learning çerçevesi arıyorsanız, Pyspark MLlib'i şiddetle tavsiye ederim. Veri kümeleri bu günlerde katlanarak büyüyebildiğinden (büyük veri ve derin öğrenme dalgası verildiğinde), yalnızca model eğitim aşamasında değil, aynı zamanda özellik mühendisliği aşamasında da (özellik dönüşümü) iyi ölçeklenebilen ve hızlı çalışan bir platforma ihtiyacınız olacaktır. , Öznitelik Seçimi). İlgilendiğiniz Spark Mllib platformu için üç ölçümün tümüne bakalım:

  1. Ölçeklenebilirlik: Veri kümeniz hafızaya sığabiliyorsa, scikit-learn seçiminiz olmalıdır. Eğer hafızaya sığmayacak kadar büyükse, Spark'ın yolu budur. Burada dikkat edilmesi gereken en önemli şey, Spark'ın yalnızca dağınık bir ortamda daha hızlı çalışmasıdır.

  2. Kapsamlılık: Sklearn, çok sayıda yaygın olarak kullanılan algoritmaların düzgün uygulanması için spark mllib'e kıyasla çok daha zengindir. Veri manipülasyonu ve dönüşümü için destek aynı zamanda scikit-learn'de daha zengindir. Spark Mllib, çoğu zaman hile yapan yeterli veri dönüşüm modülüne sahiptir. Böylece, ölçeklenebilirlik endişeleri için spark mllib ile karşılaşırsanız, işi halledebilirsiniz. Korelasyon analizi, özellik çıkarımı (tf-idf, word2vec, CountVectorizer), özellik dönüşümü (Tokenizer, StopWordsRemover, nn-gram, Binarizer, PCA vb.) İçin tüm desteğe sahiptir. Detaylı bir liste için aşağıdaki linke bakınız:

Spark mllib'deki özellikleri çıkarma, dönüştürme ve seçme

  1. Sınıflandırma: Spark mllib, çoğu zaman kullanacağınız tüm büyük algoritmaların uygulanmasına sahiptir (metin sınıflandırma için iyi çalışan algolar dahil). Hangi algoritmaların mllib'de mevcut olduğuna dair ayrıntılı bir genel bakış için aşağıdaki linke bakınız.

MLIB Sınıflandırması ve regresyonu

Bonus: Apache Spark, Python, R, Java ve Scala'yı destekliyor. Öyleyse, yarın farklı bir dilde denemeye karar verirseniz (kişisel bir tercih olarak veya profesyonel nedenlerden dolayı), tamamen yeni bir çerçeve öğrenmek zorunda kalmazsınız.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.