Pembelajaran Mesin menggunakan Python

53

Saya mempertimbangkan untuk menggunakan pustaka Python untuk melakukan eksperimen Machine Learning saya. Sejauh ini, saya mengandalkan WEKA, tetapi secara keseluruhan tidak puas. Ini terutama karena saya menemukan WEKA tidak begitu didukung (sangat sedikit contoh, dokumentasi jarang dan dukungan masyarakat kurang dari yang diinginkan dalam pengalaman saya), dan telah menemukan diri saya dalam situasi yang sulit tanpa bantuan yang akan datang. Alasan lain saya merenungkan langkah ini adalah karena saya benar-benar menyukai Python (saya baru mengenal Python), dan tidak ingin kembali ke pengkodean di Jawa.

Jadi pertanyaan saya adalah, apa lagi

  1. luas
  2. scalable (fitur 100k, contoh 10k) dan
  3. perpustakaan yang didukung dengan baik untuk melakukan ML dengan Python di luar sana?

Saya sangat tertarik melakukan klasifikasi teks, dan ingin menggunakan perpustakaan yang memiliki koleksi pengklasifikasi yang baik, metode pemilihan fitur (Penguatan Informasi, Chi-Sqaured, dll.), Dan kemampuan pra-pemrosesan teks (membendung, menghentikan penghentian kata-kata) , tf-idf dll.).

Berdasarkan utas email sebelumnya di sini dan di tempat lain, saya telah melihat PyML, scikits-learn dan Orange sejauh ini. Bagaimana pengalaman orang-orang sehubungan dengan 3 metrik di atas yang saya sebutkan?

Ada saran lain?

Andy
sumber
Terima kasih banyak semuanya atas komentar Anda. Saya pikir untuk sekarang saya akan pergi dengan NLTK + scikit-belajar dan melihat ke mana perginya.
Andy
1
Saya tidak dapat membantu mengusulkan Anda untuk melihat R , yang memiliki perpustakaan ML jauh lebih besar dan (dibuat khusus untuk pekerjaan ini) menyediakan lingkungan yang jauh lebih homogen. Paket penambangan teks R disajikan di sini .
@ MBB: Ya, saya sangat menyadari R, tetapi karena saya harus melakukan begitu banyak pemrograman "non-statistik" sebelum melakukan penambangan teks yang sebenarnya, saya pikir saya akan tetap menggunakan Python untuk saat ini.
Andy
1
Anda bisa menggunakan kedua Python dan R. Satu opsi adalah menggunakan metode penyimpanan netral bahasa seperti database untuk menjaga hasil di antara langkah-langkah pemrosesan data.
Faheem Mitha
Anda dapat menggunakan Weka dari kode Python Anda: dimitri-christodoulou.blogspot.com/2012/03/…

Jawaban:

40

Tentang opsi scikit-learn: fitur 100k (jarang) dan sampel 10k cukup kecil untuk ditampung dalam memori sehingga dapat dilakukan dengan scikit-learning (ukuran yang sama dengan 20 newsgroup dataset).

Berikut ini adalah tutorial yang saya berikan di PyCon 2011 dengan bab tentang klasifikasi teks dengan latihan dan solusi:

Saya juga memberi ceramah tentang topik yang merupakan versi terbaru dari versi yang saya berikan di PyCon FR. Berikut ini slide (dan video yang disematkan di komentar):

Adapun pemilihan fitur, lihat jawaban ini pada quora di mana semua contoh didasarkan pada dokumentasi scikit-learn:

Kami belum memiliki ekstraksi fitur kolokasi di scikit-learn. Gunakan nltk dan nltk-trainer untuk melakukan ini dalam waktu yang bersamaan:

ogrisel
sumber
Terima kasih. Ini sepertinya cara yang bagus untuk maju. Saya akan mencobanya.
Andy
@ogrisel, beberapa tautan membusuk dengan tiga tautan pertama (video di tautan empat juga hilang). Berikut tautan ke domain Scikit baru scikit-learn.org
xtian
14

Dalam hal bekerja dengan teks, lihat NLTK. Sangat, sangat baik didukung & didokumentasikan (bahkan ada buku online, atau di kertas jika Anda suka) dan akan melakukan preprocesing yang Anda butuhkan. Anda mungkin menemukan Gensim juga berguna; penekanannya adalah pada pemodelan ruang vektor dan itu punya implementasi scalable LSI dan LDA (pLSI juga saya pikir) jika itu menarik. Ini juga akan melakukan seleksi oleh tf-idf - Saya tidak yakin NLTK melakukannya. Saya telah menggunakan potongan-potongan ini pada korpora ~ 50k tanpa banyak kesulitan.

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

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

Sayangnya, mengenai dorongan utama pertanyaan Anda, saya tidak terbiasa dengan perpustakaan tertentu yang Anda referensi (walaupun saya telah menggunakan bit scikits-pelajari sebelumnya).

JMS
sumber
3
+1 untuk NLTK. Olivier Grisel, yang melakukan penelitian Machine Learning dan Natural Language Processing, memiliki beberapa tutorial dan slide yang bagus di seluruh web. Saya dapat memikirkan Pembelajaran Statistik dan Klasifikasi Teks dengan NLTK dan scikit- learning (PyCON FR 2010), misalnya.
chl
@chi Terima kasih untuk tutorial itu, saya telah sedikit mencari-cari dan sepertinya dia punya banyak materi bagus di luar sana. Juga menampilkan matriks kebingungan dengan peta panas di slide-slide-nya;)
JMS
9

Python memiliki berbagai pustaka ML (lihat juga mloss.org). Namun, saya selalu merasa bahwa itu lebih berguna untuk para peneliti ml daripada untuk praktisi ml.

Numpy / SciPy dan matplotlib adalah alat yang sangat baik untuk karya ilmiah dengan Python. Jika Anda tidak takut meretas sebagian besar rumus matematika sendiri, Anda tidak akan kecewa. Juga, sangat mudah untuk menggunakan GPU dengan eksperimen cudamat atau gnumpy - yang memakan waktu berhari-hari sebelumnya sekarang diselesaikan dalam hitungan jam atau bahkan menit.

Bocah terbaru di blok itu mungkin Theano . Ini adalah bahasa simbolis untuk ekspresi matematis yang hadir dengan opmitimzations, implementasi GPU, dan diferensiasi otomatis fitur-über yang tidak kalah mengagumkan untuk metode berbasis gradien.

Juga, sejauh yang saya tahu NLTK yang disebutkan oleh JMS pada dasarnya adalah perpustakaan bahasa alami open source nomor satu di luar sana.

Python adalah alat yang tepat untuk pembelajaran mesin.

bayerj
sumber
8

Izinkan saya menyarankan Oranye

luas

Iya

scalable (fitur 100k, contoh 10k)

Iya

perpustakaan yang didukung dengan baik untuk melakukan ML dengan Python di luar sana?

Iya

perpustakaan yang memiliki koleksi pengklasifikasi yang baik, metode pemilihan fitur (Penguatan Informasi, Chi-Sqaured dll.),

Semua ini bekerja di luar kotak di Orange

dan kemampuan pra-pemrosesan teks (stemming, stopword removal, tf-idf dll.).

Saya belum pernah menggunakan Orange untuk pemrosesan teks

Boris Gorelik
sumber
+1 untuk Orange. Mereka memiliki dokumentasi yang bagus yang menunjukkan cara mempercepat dengan cepat, dan Anda dapat menggunakan GUI pemrograman visual atau memanggil perpustakaan dari Python.
Josh Hemann
4

Tidak yakin apakah ini sangat berguna, tetapi ada panduan bagi programmer untuk mempelajari statistik dengan Python yang tersedia online. http://www.greenteapress.com/thinkstats/

Tampaknya cukup bagus dari pemindaian singkat saya, dan tampaknya berbicara tentang beberapa metode pembelajaran mesin, jadi ini mungkin tempat yang baik untuk memulai.

richiemorrisroe
sumber
3

Lihat libsvm .

Mike Lawrence
sumber
4
libsvm tidak skala dengan baik untuk sejumlah besar fitur dan sampel. Lebih baik gunakan liblinear oleh penulis yang sama. model linier biasanya cukup baik dalam ruang dimensi tinggi.
ogrisel
Bukankah libsvm adalah mesin svm untuk scikits-learn dan Orange? Atau apakah mereka benar-benar jatuh kembali ke liblinear dalam kasus linear?
John Robertson
3

SHOGUN ( 将軍 ) adalah kotak peralatan pembelajaran mesin skala besar, yang tampaknya menjanjikan.

Wok
sumber
1

Sebagai @ogrisel disorot, scikit-learn adalah salah satu paket pembelajaran mesin terbaik di luar sana untuk Python. Ini sangat cocok untuk set data sekecil 100k (jarang) fitur dan sampel 10k, dan bahkan untuk set data yang sedikit lebih besar yang mungkin berisi lebih dari 200k baris. Pada dasarnya, setiap dataset yang sesuai dengan memori.

Tapi, jika Anda mencari kerangka kerja Pembelajaran Mesin Python yang sangat scalable, saya sangat merekomendasikan Pyspark MLlib. Karena dataset hari ini dapat tumbuh besar secara eksponensial (mengingat data besar dan gelombang pembelajaran yang dalam), Anda akan sering membutuhkan platform yang dapat menskala dengan baik dan berjalan cepat tidak hanya pada fase pelatihan model, tetapi juga selama fase rekayasa fitur (transformasi fitur) , pemilihan fitur). Mari kita lihat ketiga metrik untuk platform Spark Mllib yang Anda minati:

  1. Skalabilitas: Jika dataset Anda dapat ditampung dalam memori, scikit-learn harus menjadi pilihan Anda. Jika terlalu besar untuk muat di memori, Spark adalah cara untuk pergi. Yang penting untuk dicatat di sini adalah bahwa Spark bekerja lebih cepat hanya dalam pengaturan terdistribusi.

  2. Kelengkapan : Sklearn jauh lebih kaya dalam hal implementasi yang layak dari sejumlah besar algoritma yang umum digunakan dibandingkan dengan spark mllib. Dukungan untuk manipulasi dan transformasi data juga lebih kaya dalam scikit-belajar. Spark Mllib memiliki modul transformasi data yang memadai yang melakukan trik sebagian besar kali. Jadi, jika Anda berakhir dengan spark mllib untuk masalah skalabilitas, Anda masih bisa menyelesaikan pekerjaan. Ia memiliki semua dukungan untuk analisis korelasi, ekstraksi fitur (tf-idf, word2vec, CountVectorizer), transformasi fitur (Tokenizer, StopWordsRemover, nn-gram, Binarizer, PCA dll). Untuk daftar terperinci, lihat tautan di bawah ini:

Mengekstrak, mengubah, dan memilih fitur di Spark mllib

  1. Klasifikasi: Spark mllib memiliki semua implementasi algoritma utama yang akan sering Anda gunakan (termasuk algos yang bekerja dengan baik untuk klasifikasi teks). Untuk tinjauan umum terperinci tentang algoritma apa yang tersedia melalui mllib, lihat tautan di bawah ini.

Klasifikasi dan regresi Mllib

Bonus: Apache Spark memiliki dukungan untuk Python, R, Java, dan Scala. Jadi, jika besok Anda memutuskan untuk bereksperimen dengan bahasa yang berbeda (sebagai pilihan pribadi atau karena alasan profesional), Anda tidak perlu mempelajari kerangka kerja yang sama sekali baru.

Abhishek Arora
sumber
0

Saya tidak tahu apakah Anda masih mencari saran (Anda mengajukan pertanyaan ini 5 bulan yang lalu ...). Saya baru saja memulai buku ini dan sejauh ini cukup baik:

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

Penulis menunjukkan kode, contoh, dan menjelaskan beberapa teori dan matematika "di balik layar" algoritma ML. Saya menemukan ini sangat instruktif. Semoga ini bisa sama untuk Anda.

Alejandro Carrera
sumber