Scikit-Learn: тонкие вопросы о реализации методов машинного обучения

Рассмотрим несколько с виду простых вопросов об алгоритмах машинного обучения и их реализации, на которые, однако, немногие смогут верно ответить (можете попробовать сами – не читая объяснений, также в посте приведены дополнительные вопросы специально оставленные без ответа). Материал для среднего уровня (тех, кто уже знает ML и библиотеку sklearn).

Читать далее

Python и Pandas: делаем быстрее

Давно в блоге не было материалов для любителей Python. В прошлом году я провёл эксперимент: предложил студентам усовершенствовать свои фрагменты кода для предобработки данных. В некоторых местах я специально писал неоптимально, а в некоторых думал, что оптимально… сейчас расскажу, что из этого получилось. При чтении старайтесь не пролистывать быстро вниз: попробуйте догадаться, какие из предложенных вариантов кода самые быстрые.

bystro.jpg

Читать далее

Считаем категории

Одна из самых частых мелких подзадач, которые мне приходится делать при анализе данных, — для категориального признака определить число вхождений для каждой категории. Есть много способов её решения — я постарался описать всё, что пришли в голову на языке Python. Есть методы, в которых эту подзадачу приходится решать много раз на данных большого объёма, поэтому время решения критично… а ещё многие студенты не знают о стандартных способов решения этой задачи.

count Читать далее

Cтекинг (Stacking) и блендинг (Blending)

Стекинг (Stacked Generalization или Stacking) — один из самых популярных способов ансамблирования алгоритмов, т.е. использования нескольких алгоритмов для решения одной задачи машинного обучения. Пожалуй, он замечателен уже тем, что постоянно переизобретается новыми любителями анализа данных. Это вполне естественно, его идея лежит на поверхности. Известно, что если обучить несколько разных алгоритмов, то в задаче регрессии их среднее, а в задаче классификации — голосование по большинству, часто превосходят по качеству все эти алгоритмы. Возникает вопрос: почему, собственно, использовать для ансамблирования такие простые операции как усреднение или голосование? Можно же ансамблироование доверить очередному алгоритму (т.н. «метаалгоритму») машинного обучения.

stacked

Читать далее

Случайный лес (Random Forest)

Случайный лес — один из самых потрясающих алгоритмов машинного обучения, придуманные Лео Брейманом и Адель Катлер ещё в прошлом веке. Он дошёл до нас в «первозданном виде» (никакие эвристики не смогли его существенно улучшить) и является одним из немногих универсальных алгоритмов. Универсальность заключается, во-первых, в том, что он хорош во многих задачах (по моим оценкам, 70% из встречающихся на практике, если не учитывать задачи с изображениями), во-вторых, в том, что есть случайные леса для решения задач классификации, регрессии, кластеризации, поиска аномалий, селекции признаков и т.д.

random_forest.jpg Читать далее

Питон (Python)

Сейчас практически все, кто занимается анализом малых данных, делают это с помощью Питона… а ведь ещё 5 лет назад не было пакетов типа scikit-learn и единственной средой с реализованными бустингом, случайным лесом и т.п. оставался R (+ RStudio, т.к. никаких ноутбуков тоже не было). Или приходилось реализовывать все алгоритмы «с нуля», что я и делал в том же Matlab-е. Ещё были разные программки на С/С++ типа libSVM, SVMlight

%d0%bf%d0%b8%d1%82%d0%be%d0%bd

Читать далее

Matlab

Начал выкладывать слайды своего курса ПЗАД. В его рамках я рассказываю также и про связку Matlab, R, Python (последнее время без R — в зависимости от настроения). Так получилось, что работать в Матлабе мне всегда нравилось: в своё время быстро перешёл на него с С, великолепная графика и помощь. Из минусов только отсутствие хороших библиотек для машинного обучения и платность.

matlab Читать далее

Python: категориальные признаки

Увидел несколько «немного неуклюжих» программ на Питоне, в которых авторы возились с категориальными признаками и решил написать небольшую заметку: как делать базовые вещи в несколько строк. Все примеры выложены на гитхабе, а ниже пояснения.

contries

Читать далее

NumPy — делаем быстрее

Чтобы ускорить выполнение кода на интерпретируемом языке программирования, следуют известным советам по избеганию использования циклов, своевременному выделению памяти, применению параллелизации и встроенных средств линейной алгебры. Для М-языка (Matlab) все советы можно найти в гл.15 уже старенькой книги автора. В принципе, они все годятся и для библиотеки NumPy языка Python, поскольку она практически копирует функционал Матлаба. Но кроме самих советов есть некоторые тонкости их использования. Сейчас на одном конкретном примере покажем, как можно ускорить выполнение кода.

speed

Читать далее