Машинне навчання за допомогою Python


53

Я розглядаю можливість використання бібліотек Python для експериментів з машинного навчання. Поки що я покладався на WEKA, але в цілому був досить незадоволений. Це передусім тому, що я вважаю, що WEKA не настільки добре підтримується (дуже мало прикладів, документація є рідкою, а підтримка спільноти є меншою, ніж бажана на моєму досвіді), і я опинився в складних ситуаціях, коли допомоги не буде. Ще одна причина, що я задумуюсь над цим кроком, полягає в тому, що мені дуже подобається Python (я новачок у Python) і не хочу повертатися до кодування на Java.

Тож моє запитання - що більше

  1. всебічний
  2. масштабованість (100 к функцій, 10 к. прикладів) та
  3. добре підтримуються бібліотеки для того, щоб робити ML в Python там?

Мене особливо цікавить класифікація тексту, і тому я хотів би використовувати бібліотеку, яка має гарну колекцію класифікаторів, методи вибору функцій (посилення інформації, Chi-Sqaured тощо) та можливості попередньої обробки тексту (стримування, видалення стоп-слова) , tf-idf тощо).

Грунтуючись на минулих потоках електронної пошти тут і в інших місцях, я до цього часу переглядав PyML, scikits-learn та Orange. Яким був досвід людей щодо вищезгаданих 3 показників, які я згадую?

Будь-які інші пропозиції?


Дуже дякую всім за ваші коментарі. Я думаю, що зараз я поїду з NLTK + scikit-learn та побачу, куди йдуть справи.
Енді

1
Я не можу не запропонувати вам подивитися на R , який має більшу бібліотеку ML та (створений спеціально для цієї роботи) забезпечує набагато більш однорідне середовище. Пакет гірничо текст R є тут представлені .

@mbq: Так, я дуже обізнаний з R, але оскільки мені доводиться робити стільки "нестатистичних" програмувань, перш ніж робити фактичний видобуток тексту, я думаю, що поки що буду дотримуватися Python.
Енді

1
Ви можете використовувати як Python, так і R. Один із варіантів - використовувати метод нейтралізованого мови зберігання, як базу даних, для збереження результатів між етапами обробки даних.
Faheem Mitha

Ви можете використовувати Weka зі свого коду Python: dimitri-christodoulou.blogspot.com/2012/03/…

Відповіді:


40

Про варіант scikit-learn: 100k (рідкісні) функції та 10k-зразки досить малі, щоб вміститись у пам'яті, отже, цілком підходить для scikit-learn (такий же розмір, як 20 даних груп новин).

Ось підручник, який я дав на PyCon 2011 з главою про класифікацію тексту з вправами та рішеннями:

Я також говорив на тему, яка є оновленою версією версії, яку я виголосив у PyCon FR. Ось слайди (та вбудоване відео у коментарях):

Що стосується вибору функцій, подивіться цю відповідь на кворі, де всі приклади базуються на документації scikit-learn:

У нас ще немає вилучення функції колокації в scikit-learn. Використовуйте nltk та nltk-trainer, щоб це зробити в середній час:


Дякую. Це виглядає як особливо хороший шлях вперед. Я спробую.
Енді

@ogrisel, деяка посилання гниє з першими трьома посиланнями (відео у посиланні чотири також відсутнє). Ось посилання на новий домен Scikit scikit-learn.org
xtian

14

Що стосується роботи з текстом, погляньте на НЛТК. Дуже, дуже добре підтримується та документально підтверджено (є навіть книга в Інтернеті або на папері, якщо ви хочете) і зробить необхідну попередню обробку. Можливо, вам також буде корисний Gensim; акцент робиться на векторному моделюванні простору, і це має масштабовані реалізації LSI та LDA (я теж думаю, що pLSI), якщо це цікавить. Він також зробить відбір за допомогою tf-idf - я не впевнений, що це робить NLTK. Я без особливих труднощів використовував шматки цих карпорів на ~ 50k.

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

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

На жаль, що стосується основної суті вашого питання, я не знайомий з конкретними бібліотеками, на які ви посилаєтесь (хоча раніше я використовував шматочки науковців).


3
+1 для NLTK. Олів'є Грізель, який займається дослідженнями машинного навчання та обробки природних мов, має кілька хороших навчальних посібників та слайдів з Інтернету. Я можу подумати про статистичне навчання та класифікацію тексту, наприклад, з NLTK та scikit-learn (PyCON FR 2010).
chl

@chi Спасибі за цей підручник, я трохи роздумував, і, здається, у нього багато хорошого матеріалу. Також відображається матриця плутанини з тепловою картою на слайдах;)
JMS

9

Python має широкий спектр бібліотек ML (перевірити також mloss.org). Однак у мене завжди є відчуття, що це більше користь для дослідників мл, ніж для практикуючих мл.

Numpy / SciPy та matplotlib - чудові інструменти для наукової роботи з Python. Якщо ви не боїтеся зламати більшість математичних формул самостійно, ви не розчаруєтесь. Крім того, дуже просто використовувати GPU з cudamat або gnumpy - експерименти, які тривали дні раніше, зараз завершуються за години або навіть хвилини.

Останній хлопець на блоці - це, мабуть, Теано . Це символічна мова для математичних виразів, яка постачається з оптимізаціями, реалізацією графічного процесора та автоматичною диференціацією über, що для методів, заснованих на градієнті, не є дивовижним.

Крім того, наскільки я знаю, NLTK, згаданий JMS, - це в основному бібліотека природних мов з відкритим кодом номер один.

Python - це правильний інструмент для машинного навчання.


8

Дозвольте запропонувати помаранчевий

всебічний

Так

масштабований (100 к. функцій, 10 к. прикладів)

Так

добре підтримуються бібліотеки для того, щоб робити ML в Python там?

Так

бібліотека, яка має гарну колекцію класифікаторів, методи вибору функцій (посилення інформації, Chi-Sqaured тощо),

Все це виходить з коробки в Orange

та можливості попередньої обробки тексту (стримування, видалення стоп-слова, tf-idf тощо).

Я жодного разу не використовував Orange для обробки тексту


+1 для помаранчевого. У них є чудова документація, яка показує, як швидко досягти швидкості, і ви можете користуватися або їх графічним графічним графічним інтерфейсом, або викликати бібліотеки з Python.
Джош Геман

4

Не впевнений, що це особливо корисно, але в Інтернеті є посібник для вивчення програм статистики на Python. http://www.greenteapress.com/thinkstats/

З мого короткого сканування це здається досить непоганим, і, здається, йдеться про деякі методи машинного навчання, тому це може бути гарним місцем для початку.


3

Перевірте libsvm .


4
libsvm не відповідає масштабам великої кількості функцій та зразків. Краще використовувати ті самі автори. лінійні моделі зазвичай досить хороші у просторі з високими розмірами.
ogrisel

Хіба не libsvm двигун svm для науковців, які навчаються та Orange? Або вони справді відпадають до ліблінеарних у лінійному випадку?
Джон Робертсон

3

SHOGUN ( 将軍 ) - це масштабний набір інструментів машинного навчання, який здається перспективним.



1

Як підкреслив @ogrisel, scikit-learn є одним з найкращих пакетів машинного навчання для Python. Він добре підходить для наборів даних, розміром в 100 кб (розріджених) можливостей та 10-ти зразків, і навіть для незначно більших наборів даних, які можуть містити понад 200 к рядків. В основному, будь-який набір даних, що вписується в пам'ять.

Але, якщо ви шукаєте високомасштабну рамку машинного навчання Python, я б дуже рекомендував Pyspark MLlib. Оскільки набори даних в ці дні можуть зростати великими експоненціально (зважаючи на великі дані та глибоку хвилю навчання), вам часто потрібна платформа, яка зможе добре масштабуватись та швидко працювати не тільки на фазі навчання моделі, але й під час фази інженерії функцій (трансформація функції , вибір функції). Давайте розглянемо всі три показники для платформи Spark Mllib, які вас цікавлять:

  1. Масштабованість: Якщо ваш набір даних може вміститись у пам’яті, scikit-learn має стати вибором. Якщо вона занадто велика, щоб вписатись у пам'ять, Spark - це шлях. Тут важливо зазначити, що Spark працює швидше лише в розподілених умовах.

  2. Вичерпність : Sklearn набагато багатший з точки зору гідної реалізації великої кількості широко використовуваних алгоритмів порівняно з іскровим мільлібом. Підтримка маніпулювання та трансформації даних також багатша в науковому навчанні. Spark Mllib має достатню кількість модулів для трансформації даних, яка робить фокус більшість разів. Отже, якщо у вас виникне іскровий мільліб для проблем масштабованості, ви все одно зможете виконати роботу. Він має всю підтримку кореляційного аналізу, вилучення функцій (tf-idf, word2vec, CountVectorizer), трансформацію функцій (Tokenizer, StopWordsRemover, nn-gram, Binarizer, PCA тощо). Детальний список див. За посиланням нижче:

Видобуток, перетворення та вибір функцій в Spark mllib

  1. Класифікація: Іскровий 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. Я вважаю це дуже повчальним. Сподіваюсь, це могло б бути те ж саме.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.