Học máy bằng Python


53

Tôi đang xem xét sử dụng các thư viện Python để thực hiện các thí nghiệm Machine Learning của mình. Cho đến nay, tôi đã dựa vào WEKA, nhưng đã không hài lòng về tổng thể. Điều này chủ yếu là vì tôi thấy WEKA không được hỗ trợ tốt (rất ít ví dụ, tài liệu còn thưa thớt và hỗ trợ cộng đồng ít hơn mong muốn trong kinh nghiệm của tôi), và đã thấy mình trong tình huống khó khăn không có sự giúp đỡ sắp tới. Một lý do khác khiến tôi suy ngẫm về động thái này là vì tôi thực sự thích Python (tôi mới biết về Python) và không muốn quay lại mã hóa trong Java.

Vì vậy, câu hỏi của tôi là, những gì nhiều hơn

  1. toàn diện
  2. có thể mở rộng (tính năng 100k, ví dụ 10k) và
  3. thư viện được hỗ trợ tốt để làm ML trong Python ngoài kia?

Tôi đặc biệt quan tâm đến việc thực hiện phân loại văn bản và vì vậy tôi muốn sử dụng một thư viện có bộ sưu tập tốt các phân loại, phương pháp chọn tính năng (Information Gain, Chi-Sqaured, v.v.) và khả năng xử lý trước văn bản (xuất phát, xóa từ khóa , tf-idf, v.v.).

Dựa trên các chủ đề e-mail trước đây ở đây và các nơi khác, tôi đã xem xét PyML, scikits-learn và Orange cho đến nay. Làm thế nào có kinh nghiệm của mọi người đối với 3 số liệu trên mà tôi đề cập?

Bất cứ một đề nghị nào khác?


Cảm ơn mọi người rất nhiều vì ý kiến ​​của bạn. Tôi nghĩ bây giờ tôi sẽ đi với NLTK + scikit-learn và xem mọi thứ sẽ đi đến đâu.
Andy

1
Tôi không thể giúp bạn đề nghị bạn xem R , thư viện ML lớn hơn và (được tạo ra đặc biệt cho công việc này) cung cấp một môi trường đồng nhất hơn nhiều. Gói khai thác văn bản của R được trình bày ở đây .

@mbq: Vâng, tôi rất biết về R, nhưng vì tôi phải thực hiện nhiều chương trình "phi thống kê" trước khi thực hiện khai thác văn bản thực tế, tôi nghĩ bây giờ tôi sẽ gắn bó với Python.
Andy

1
Bạn có thể sử dụng cả Python và R. Một tùy chọn là sử dụng phương thức lưu trữ trung lập ngôn ngữ như cơ sở dữ liệu để giữ kết quả ở giữa các bước xử lý dữ liệu.
Faheem Mitha

Bạn có thể sử dụng Weka từ mã Python của mình: dimitri-christodoulou.blogspot.com/2012/03/ mẹo

Câu trả lời:


40

Về tùy chọn scikit-learn: các tính năng 100k (thưa thớt) và 10k mẫu đủ nhỏ để vừa trong bộ nhớ, do đó hoàn toàn có thể thực hiện được với scikit-learn (cùng kích thước với bộ dữ liệu 20 nhóm tin).

Đây là một hướng dẫn tôi đã đưa ra tại PyCon 2011 với một chương về phân loại văn bản với các bài tập và giải pháp:

Tôi cũng đã nói chuyện về chủ đề phiên bản cập nhật của phiên bản tôi đã đưa ra tại PyCon FR. Dưới đây là các slide (và video được nhúng trong các bình luận):

Về lựa chọn tính năng, hãy xem câu trả lời này trên quora nơi tất cả các ví dụ được dựa trên tài liệu tìm hiểu scikit:

Chúng tôi chưa có tính năng trích xuất sắp xếp thứ tự trong scikit-learn. Sử dụng nltk và nltk-trainer để thực hiện việc này trong thời gian trung bình:


Cảm ơn. Đây có vẻ là một cách đặc biệt tốt về phía trước. Tôi sẽ thử nó.
Andy

@ogrisel, một số liên kết thối với ba liên kết đầu tiên (video trong liên kết bốn cũng bị thiếu). Đây là một liên kết đến tên miền Scikit mới scikit-learn.org
xtian

14

Về mặt làm việc với văn bản, hãy xem NLTK. Rất, được hỗ trợ rất tốt và được ghi lại (thậm chí có một cuốn sách trực tuyến hoặc trên giấy nếu bạn thích) và sẽ thực hiện các yêu cầu trước khi bạn yêu cầu. Bạn cũng có thể thấy Gensim hữu ích; trọng tâm là mô hình hóa không gian vectơ và nó có các triển khai LSI và LDA có thể mở rộng (tôi nghĩ là pLSI) nếu đó là những điều đáng quan tâm. Nó cũng sẽ thực hiện lựa chọn bởi tf-idf - Tôi không chắc chắn rằng NLTK có. Tôi đã sử dụng những mảnh này trên cỗ máy ~ 50k mà không gặp nhiều khó khăn.

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

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

Thật không may, vì lực đẩy chính của câu hỏi của bạn, tôi không quen thuộc với các thư viện cụ thể mà bạn tham khảo (mặc dù tôi đã sử dụng các bit của scikits-learn trước đây).


3
+1 cho NLTK. Olivier Grisel, người đang thực hiện nghiên cứu về Machine Learning và Xử lý ngôn ngữ tự nhiên, có một số hướng dẫn và slide tốt trên web. Tôi có thể nghĩ về Học thống kê và Phân loại văn bản với NLTK và scikit-learn (PyCON FR 2010), chẳng hạn.
chl

@chi Cảm ơn về hướng dẫn đó, tôi đã chọc ngoáy một chút và có vẻ như anh ấy có rất nhiều tài liệu hay ngoài đó. Cũng hiển thị một ma trận nhầm lẫn với một bản đồ nhiệt trong các slide của mình;)
JMS

9

Python có một loạt các thư viện ML (hãy xem mloss.org). Tuy nhiên, tôi luôn có cảm giác rằng nó được sử dụng nhiều hơn cho các nhà nghiên cứu ml hơn là cho các học viên ml.

Numpy / SciPymatplotlib là những công cụ tuyệt vời cho công việc khoa học với Python. Nếu bạn không ngại tự mình hack trong hầu hết các công thức toán học, bạn sẽ không thất vọng. Ngoài ra, rất dễ sử dụng GPU với cudamat hoặc gnumpy - các thử nghiệm mất vài ngày trước đó giờ đã hoàn thành trong vài giờ hoặc thậm chí vài phút.

Đứa trẻ mới nhất trong khối có lẽ là Theano . Nó là ngôn ngữ tượng trưng cho các biểu thức toán học đi kèm với các tùy chọn, triển khai GPU và phân biệt tự động tính năng über, không có gì tuyệt vời cho các phương pháp dựa trên độ dốc.

Ngoài ra, theo như tôi biết thì NLTK được JMS đề cập về cơ bản là thư viện ngôn ngữ tự nhiên nguồn mở số một ngoài kia.

Python là công cụ phù hợp cho việc học máy.


8

Hãy để tôi đề nghị Orange

toàn diện

Đúng

khả năng mở rộng (tính năng 100k, ví dụ 10k)

Đúng

thư viện được hỗ trợ tốt để làm ML trong Python ngoài kia?

Đúng

thư viện có bộ sưu tập tốt các phân loại, phương pháp lựa chọn tính năng (Thông tin đạt được, Chi-Sqaured, v.v.),

Tất cả những công việc này đều có trong Orange

và khả năng xử lý trước văn bản (xuất phát, loại bỏ từ khóa, tf-idf, v.v.).

Tôi chưa bao giờ sử dụng Orange để xử lý văn bản, mặc dù


+1 cho Cam. Họ có tài liệu tuyệt vời chỉ ra cách tăng tốc nhanh chóng và bạn có thể sử dụng GUI lập trình trực quan của họ hoặc gọi thư viện từ Python.
Josh Hemann

4

Không chắc chắn nếu điều này đặc biệt hữu ích, nhưng có một hướng dẫn cho các lập trình viên tìm hiểu số liệu thống kê trong Python có sẵn trực tuyến. http://www.greenteapress.com/thinkstats/

Nó có vẻ khá tốt từ lần quét ngắn của tôi, và dường như nói về một số phương pháp học máy, vì vậy nó có thể là một nơi tốt để bắt đầu.


3

Kiểm tra libsvm .


4
libsvm không mở rộng tốt cho số lượng lớn các tính năng và mẫu. Sử dụng tốt hơn liblinear bởi cùng các tác giả. mô hình tuyến tính thường đủ tốt trong không gian chiều cao.
ogrisel

Không phải libsvm là công cụ svm cho cả scikits-learn và Orange? Hay họ thực sự rơi trở lại liblinear trong trường hợp tuyến tính?
John Robertson

3

SHOGUN ( 将軍 ) là một hộp công cụ học máy quy mô lớn, trong đó có vẻ đầy hứa hẹn.



1

Như @ogrisel đã nhấn mạnh, scikit-learn là một trong những gói học máy tốt nhất hiện có cho Python. Nó rất phù hợp cho các tập dữ liệu nhỏ như các tính năng 100k (thưa thớt) và các mẫu 10k, và thậm chí cho các tập dữ liệu lớn hơn một chút có thể chứa hơn 200 nghìn hàng. Về cơ bản, bất kỳ tập dữ liệu phù hợp với bộ nhớ.

Nhưng, nếu bạn đang tìm kiếm một khung công tác Python Machine Learning có khả năng mở rộng cao, tôi rất khuyến nghị Pyspark MLlib. Vì các bộ dữ liệu ngày nay có thể phát triển lớn theo cấp số nhân (được cung cấp dữ liệu lớn và sóng học sâu), bạn thường sẽ cần một nền tảng có thể mở rộng tốt và chạy nhanh không chỉ trong giai đoạn đào tạo mô hình, mà cả trong giai đoạn kỹ thuật tính năng (chuyển đổi tính năng , lựa chọn tính năng). Hãy xem tất cả ba số liệu cho nền tảng Spark Mllib mà bạn quan tâm:

  1. Khả năng mở rộng: Nếu tập dữ liệu của bạn có thể nằm gọn trong bộ nhớ, scikit-learn nên là lựa chọn của bạn. Nếu nó quá lớn để phù hợp với bộ nhớ, Spark là con đường để đi. Điều quan trọng cần lưu ý ở đây là Spark chỉ hoạt động nhanh hơn trong một cài đặt phân tán.

  2. Tính toàn diện: Sklearn phong phú hơn rất nhiều về mặt triển khai hợp lý của một số lượng lớn các thuật toán thường được sử dụng so với spark mllib. Sự hỗ trợ cho thao tác và chuyển đổi dữ liệu cũng phong phú hơn trong scikit-learn. Spark Mllib có các mô-đun chuyển đổi dữ liệu đủ để thực hiện phần lớn thời gian. Vì vậy, trong trường hợp bạn kết thúc với spark mllib vì những lo ngại về khả năng mở rộng, bạn vẫn có thể hoàn thành công việc. Nó có tất cả các hỗ trợ cho phân tích tương quan, trích xuất tính năng (tf-idf, word2vec, CountVectorizer), chuyển đổi tính năng (Tokenizer, StopemmeRemover, nn-gram, Binarizer, PCA, v.v.). Để biết danh sách chi tiết, xem liên kết dưới đây:

Trích xuất, chuyển đổi và chọn các tính năng trong Spark mllib

  1. Phân loại: Spark mllib có tất cả các triển khai thuật toán chính mà bạn đang sử dụng phần lớn thời gian (bao gồm cả thuật toán hoạt động tốt để phân loại văn bản). Để biết tổng quan chi tiết về những thuật toán có sẵn thông qua mllib, hãy xem liên kết dưới đây.

Phân loại và hồi quy Mllib

Phần thưởng: Apache Spark có hỗ trợ cho Python, R, Java và Scala. Vì vậy, nếu ngày mai bạn quyết định thử nghiệm một ngôn ngữ khác (như một lựa chọn cá nhân hoặc vì lý do nghề nghiệp), bạn sẽ không phải học một khuôn khổ hoàn toàn mới.


0

Tôi không biết nếu bạn vẫn đang tìm kiếm một số lời khuyên (bạn đã thực hiện câu hỏi này 5 tháng trước ...). Tôi mới bắt đầu cuốn sách này và cho đến nay là khá tốt:

https://www.amazon.com / mp

Tác giả cho thấy mã, ví dụ và giải thích một số lý thuyết và toán học "đằng sau hậu trường" của thuật toán ML. Tôi đang tìm thấy điều này rất nhiều hướng dẫn. Hy vọng điều này có thể giống với bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.