Машинное обучение с использованием Python

53

Я рассматриваю возможность использования библиотек Python для проведения экспериментов по машинному обучению. До сих пор я полагался на WEKA, но в целом был довольно недоволен. Это связано прежде всего с тем, что я обнаружил, что WEKA не так хорошо поддерживается (очень мало примеров, документации мало, а поддержка сообщества менее чем желательна в моем опыте), и я оказался в затруднительном положении без помощи в будущем. Еще одна причина, по которой я обдумываю этот шаг, заключается в том, что мне действительно нравится Python (я новичок в Python) и не хочу возвращаться к кодированию на Java.

Итак, мой вопрос, что является более

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

Мне особенно интересно заниматься классификацией текста, и поэтому я хотел бы использовать библиотеку, которая имеет хорошую коллекцию классификаторов, методов выбора признаков (информационное усиление, хи-квадрат и т. Д.) И возможности предварительной обработки текста (определение текста, удаление стоп-слов). , TF-IDF и т. д.).

Основываясь на прошлых темах электронной почты здесь и в других местах, я до сих пор изучал PyML, scikits-learn и Orange. Каким был опыт людей в отношении вышеупомянутых 3 метрик, которые я упоминаю?

Любые другие предложения?

Энди
источник
Большое спасибо всем за ваши комментарии. Я думаю, что сейчас я пойду с NLTK + scikit-learn и посмотрю, куда идут дела.
Энди
1
Я не могу не предложить вам взглянуть на R , который имеет гораздо большую библиотеку ML и (созданный специально для этой работы) обеспечивает гораздо более однородную среду. Пакет интеллектуального анализа текста R представлен здесь .
@mbq: Да, я хорошо осведомлен о R, но, поскольку перед тем, как приступить к фактическому интеллектуальному анализу текста, мне приходится много программировать «не по статистике», я думаю, что пока что буду придерживаться Python.
Энди
1
Вы можете использовать как Python, так и R. Один из вариантов - использовать не зависящий от языка метод хранения, такой как база данных, для сохранения результатов между этапами обработки данных.
Фахим Митха
Вы можете использовать Weka из кода Python: dimitri-christodoulou.blogspot.com/2012/03/...

Ответы:

40

Об опции scikit-learn: 100 тыс. (Разреженных) функций и 10 тыс. Выборок достаточно малы, чтобы поместиться в памяти, и, следовательно, отлично подходят для scikit-learn (такого же размера, как набор данных из 20 групп новостей).

Вот руководство, которое я дал на PyCon 2011 с главой по классификации текста с упражнениями и решениями:

Я также выступил с докладом на тему, которая является обновленной версией версии, которую я дал на PyCon FR. Вот слайды (и встроенное видео в комментариях):

Что касается выбора функций, взгляните на этот ответ по кворе, где все примеры основаны на документации scikit-learn:

В scikit-learn мы пока не извлекаем функции коллокации. Для этого используйте nltk и nltk-trainer:

ogrisel
источник
Благодарю. Это кажется особенно хорошим способом продвижения вперед. Я попробую.
Энди
@ogrisel, некоторые ссылки гниют с первыми тремя ссылками (видео в четвертой ссылке также отсутствует). Вот ссылка на новый домен Scikit scikit-learn.org
xtian
14

Что касается работы с текстом, взгляните на NLTK. Очень, очень хорошо поддерживается и документируется (есть даже книга в Интернете или на бумаге, если вы предпочитаете) и будет выполнять предварительную обработку, которую вы требуете. Возможно, вы также найдете Gensim полезным; акцент делается на моделировании векторного пространства, и в нем есть масштабируемые реализации LSI и LDA (я думаю, что и pLSI), если они представляют интерес. Это также сделает выбор с помощью tf-idf - я не уверен, что NLTK делает. Я использовал их на корпусах ~ 50k без особых затруднений.

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

Генсим: http://nlp.fi.muni.cz/projekty/gensim/

К сожалению, что касается основного направления вашего вопроса, я не знаком с конкретными библиотеками, на которые вы ссылаетесь (хотя раньше я использовал немного scikits-learn).

JMS
источник
3
+1 за НЛТК. У Оливье Гризеля, который занимается исследованиями в области машинного обучения и обработки естественного языка, есть несколько хороших учебных пособий и слайдов по сети. Например, я могу подумать о статистическом обучении и классификации текста с помощью NLTK и scikit-learn (PyCON FR 2010).
ЧЛ
@chi Спасибо за этот урок, я немного покопался и, кажется, у него там много хороших материалов. Также отображает путаницу с тепловой картой в своих слайдах;)
JMS
9

Python имеет широкий спектр библиотек ML (см. Также mloss.org). Тем не менее, я всегда чувствую, что это больше полезно для мл исследователей, чем для мл практиков.

Numpy / SciPy и matplotlib являются отличными инструментами для научной работы с Python. Если вы не боитесь взломать большинство математических формул самостоятельно, вы не будете разочарованы. Кроме того, очень просто использовать графический процессор с cudamat или gnumpy - эксперименты, которые занимали дни раньше, теперь выполняются за часы или даже минуты.

Последний ребенок на блоке, вероятно, Теано . Это символический язык для математических выражений, который поставляется с opmitimzations, реализациями GPU и автоматическим дифференцированием über-функций, которое является не чем иным, как удивительным для методов, основанных на градиенте.

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

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

bayerj
источник
8

Позвольте мне предложить оранжевый

комплексный

да

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

да

хорошо поддерживаются библиотеки для выполнения ML в Python?

да

библиотека, которая имеет хорошую коллекцию классификаторов, методов выбора функций (информационное усиление, Chi-Sqaured и т. д.),

Все это работает из коробки в Orange

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

Я никогда не использовал Orange для обработки текста, хотя

Борис Горелик
источник
+1 за апельсин. У них есть отличная документация, показывающая, как быстро освоиться, и вы можете использовать их графический интерфейс для визуального программирования или библиотеки вызовов из Python.
Джош Хеманн
4

Не уверен, что это особенно полезно, но для программистов есть руководство по изучению статистики на Python, которое доступно онлайн. http://www.greenteapress.com/thinkstats/

Кажется, это довольно неплохо из моего краткого сканирования, и, похоже, в нем говорится о некоторых методах машинного обучения, так что это может быть хорошим местом для начала.

richiemorrisroe
источник
3

Проверьте libsvm .

Майк Лоуренс
источник
4
libsvm не подходит для большого количества функций и образцов. Лучше использовать liblinear от тех же авторов. линейные модели обычно достаточно хороши в многомерном пространстве.
Огризель
Разве libsvm не является движком svm для scikits-learn и 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. Поддержка манипулирования данными и их преобразования также более богата в scikit-learn. Spark Mllib имеет достаточные модули преобразования данных, которые выполняют большинство задач. Таким образом, если у вас возникнут проблемы с масштабируемостью с помощью spark mllib, вы все равно сможете выполнить свою работу. Он имеет всю поддержку для корреляционного анализа, извлечения функций (tf-idf, word2vec, CountVectorizer), преобразования функций (Tokenizer, StopWordsRemover, nn-грамм, 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. Я нахожу это очень поучительным. Надеюсь, что это может быть то же самое для вас.

Алехандро Каррера
источник