УДК 004
Фартушнов Н. С. студент магистратуры
2 курс
Поволжский Государственный Университет Телекоммуникаций и Информатики научный руководитель: Бахарева Н.Ф., д.т.н.
профессор Россия, г. Самара
БИБЛИОТЕКИ ЯЗЫКА PYTHON ДЛЯ МАШИННОГО ОБУЧЕНИЯ, ИХ ВОЗМОЖНОСТИ И ПРЕИМУЩЕСТВА
Аннотация: Данная работа может помочь понять, чем хорош язык python в машинном обучении. Синтаксис Python проще и выше уровнем по сравнению с Java, C и C++. У него живое сообщество, культура с открытым исходным кодом, сотни высококачественных библиотек, ориентированных на машинное обучение, и огромная база поддержки от гигантов в индустрии (например, Google, Dropbox, Airbnb и др.). Эта статья будет посвящена некоторым библиотекам и возможностям Python, ориентированным на машинное обучение.
Ключевые слова: машинное обучение,python, numpy, pandas, matplotlib, seaborn, scickit-learn.
Fartushnov N.S. master's degree student 2nd year
Povolzhskiy State University of Telecommunications and Informatics scientific supervisor: Bahareva N.F., Dr. of Engineering
professor Russia, Samara
PYTHON LANGUAGE LIBRARIES FOR MACHINE LEARNING, THEIR OPPORTUNITIES AND ADVANTAGES
Annotation: This work may help to understand what python is good for in machine learning. Python syntax is simpler and higher than Java, C, and C ++. It has a vibrant community, an open-source culture, hundreds of high-quality machine learning-oriented libraries, and a huge support base from industry giants (like Google, Dropbox, Airbnb, etc.). This article will focus on some Python machine-learning libraries and features.
Key words: machine learning, python, numpy, pandas, matplotlib, seaborn, scikit-learn.
Существует несколько базовых пакетов/библиотек Python, которые необходимо освоить для эффективного машинного обучения. Фундаментальные библиотеки, которые нужно знать и осваивать.
1. Numpy
NumPy является основным пакетом, необходимым для высокопроизводительных научных вычислений и анализа данных в языке Python. Это основа, на которой построены почти все инструменты более высокого уровня, такие как Pandas и sckit-learning. TensorFlow использует массивы NumPy как фундаментальный строительный блок, поверх которого они строили свои объекты Tensor и графический поток для задач глубокого обучения. Многие операции NumPy реализуются в C, что делает их сверхбыстрыми. Для информатики и современных задач машинного обучения это неоценимое преимущество. Возможности библиотеки представлен на рис. 1.
Numpy Cheat Sheet
Numpy (Numerical Python)
Numpy (Numerical Python)
What is NumPy?
Foiiidation pacuge tor scientific computing m Python Why NumPy?
• Numpy 'ndarray' is a much more efficient way of siorrg and manipulating "numerical data" than the budt-lri Python data structures.
• Uxanes written in lower-level languages, such as C. can operate on data stored In Numpy 'ndarray' without copying any data.
N-DIMENSIONAL ARRAY (NDARRAY)
What la NdArray?
Fast and space-effoenl multidimensional array (container lor homogeneous data) providing vactonnd arithmetic operations
2, np.ones 12. 3)
3, np.«pty(3, «, 5> # three dimensonel -idaray of
Setting data with assignment
I octetrayltndarrayl < 0] - 0 *
H ndefray! ■ two-dlmansons, ndarrayi < 0 creates a two-dimensional boctoan array
COMMON OPERATIONS
1 Transposing
• A special form of reshaping which returns a 'view' on the underlying data without copying anythmg.
SUCING (INDEXING/SUBSETTING)
1 S>cing(le. r.darroyl:2:Sl)aa'vlew'on the origmal array Data is NOT copied Any motivations (I e ndarrayl [2: si - a) to the 'view' will be reflected in the original array 1 Instead of a 'view', explicit copy of stong ma ; darrayl(2:61.copyl)
1 Multidimensional array indexing notation
ndarrayl|0](2] OTndarrayllO, 2] I
# f means seied from 3rd column or
Setocting data by boolean rdexlng ALWAYS creates a oopy of the data.
The 'and' and 'or" Keywords do NOT wort with boolean arrays Use & and |.
* Fancy indexing |aka indexing using integer arrays') Select a subset of rows in a particiiar order
I ndarray;1 13, 8, 4] ¡ I ndarraylJ [-1, C) ]
# negative indices select rows from the end
Fancy indexing ALWAYS create* a copy of the data
irt (scqi : » any seouence (list y. etc) to return a nsarray
I. Vectorized expressions
• np. where {cond, x, y i is a vectorized verson of the expression 'x if condition else /
p.wtier* liMf г i xAr-лу > 0, 1, » a new array (same shape) of1 or -1 *
Example usage is find the first etement that has a "price > number' In an array of price data
Compute mean ndarrayl .mean О 0Г
np.mean(ndarrayl)
Compute statisli cs ndarrayl-mean(axis » X)
over axis • ndarrayl.sun(axia - 01
5 Boolean arrays methods
Count» of'True«' in boolean array (ndarrayl > 0).aua()
If at least one value is True' ndarrayl.any()
If all values are True' ndarrayl.all()
1 Note: These meffx I arrays, »tiers non-i Ms also work with non-boolean ero elements evaluate to True
6. Sorting
Inplace sorting ndarrayl. aortO
Return a sorted copy л siaad of inplace aortedl - np.sort(ndarrayl )
7 Set methods
Return sorted яр.unique(r.darrayll unique values
Test membership of ndarrayl values in (Z 3,6) reeultBoolaanArray -np.lnld(ndarrayl, (2, 3, «II
• Other set methods lntraoctldli.unicnldO, oatdif f Id 1 > ■ aetKorld (I
8. Random number generation (np random) • Supplements the built-in Python random * with functions tor efficiently generating wtiole arrays of sample values from many kinds of probability ttstrtbutions
1 aanplee-np . rarden. rcroel (elie -(3, 3)) 1
I . Python built-in random ONLY samples one value at a time.
Created by Ariorme Cotton and Sean Chen wrtvw.datasciencefree.com Based on content from 'Python for Data Analysis' by Wes McOnney
Updated: August 18.2016
Рис. 1 - Возможности библиотеки NumPy
2. Pandas
Это самая популярная библиотека в машинном обучении Python для проведения анализа данных общего назначения. Pandas построен на массиве Numpy, тем самым сохраняя функцию быстрой скорости выполнения и предлагая множество функций проектирования данных, включая:
— Чтение/запись множества различных форматов данных
— Выбор подмножеств данных
— Расчет по строкам и столбцам вниз
— Поиск и заполнение отсутствующих данных
— Применение операций к независимым группам в данных
— Преобразование данных в различные формы
— Совмещение нескольких наборов данных
— Расширенные функциональные возможности временных рядов
— Визуализация через Matplotlib и Seaborn
На рис. 2 показаны возможности данной библиотеки.
Рис. 2 - Возможности библиотеки Pandas
3. Matplotlib и Seaborn
Визуализация данных и описание с помощью данных - это важные навыки, которые необходимы каждому ученому в области обработки данных для эффективной передачи информации, полученной в результате анализа, любой аудитории. Это не менее важно в стремлении к мастерству в машинном обучении (ML). Очень часто в процессе ML, вы должны выполнить исследовательский анализ набора данных, прежде чем принять решение о применении конкретного ML алгоритма.
Matplotlib является наиболее широко используемой библиотекой визуализации 2-D Python, оснащенной богатым набором команд и интерфейсов для создания высококачественной графики из имеющихся данных. Ниже представлены графики построенные с помощью Matplotlib (рис. 3).
Figure 1 □ * ouvnr » ¡ R I <nwpto«ib. togo-py
« + + q в (ииян^вн^н
Рис. 3 - Графики построенные с помощью библиотеки Matplotlib
Seaborn - это еще одна отличная библиотека визуализации, ориентированная на статистическую печать. Seaborn предоставляет API (с гибким выбором стиля печати и цветов по умолчанию) поверх Matplotlib, определяет простые функции высокого уровня для общих статистических типов печати и интегрируется с функциональностью, обеспечиваемой Pandas (рис. 4).
Example of Seaborn plots
Рис. 4 - Примеры графиков Seaborn
4. Scickit-learn
Scickit-learn - самый важный общий пакет машинного обучения Python, который вы должны освоить. Он имеет различные алгоритмы классификации, регрессии и кластеризации, включая вспомогательные векторные машины, случайные леса, повышение градиента, k-средства и DBSCAN, и предназначен для взаимодействия с числовыми и научными библиотеками Python, NumPy и SciPy. Он предоставляет ряд контролируемых и без контроля алгоритмов обучения через последовательный интерфейс. Различные
библиотеки имеют уровни надежности и поддержки, необходимые для использования в производственных системах. Это означает, что основное внимание уделяется таким проблемам, как простота использования, качество кода, совместная работа, документация и производительность.
Некоторые скрытые возможности Scickit-learn.
Scickit-learn - отличный пакет для обучения начинающим и опытным специалистам. Однако даже опытные специалисты по ML могут быть не осведомлены обо всех скрытых возможностях этого пакета, которые могут существенно помочь в выполнении их задачи. Я попытаюсь перечислить несколько из этих относительно менее известных методов/интерфейсов, доступных в Scickit-learn.
Pipeline: Может быть использован для преобразования цепочки нескольких оценок в одну. Это полезно, так как часто существует фиксированная последовательность шагов при обработке данных, например, выбор признаков, нормализация и классификация.
Grid-search: Hyper-parameters - это параметры, которые непосредственно не изучаются в оценщиках. В Scickit-learn они передаются в качестве аргументов конструктору классов оценщика. Можно и рекомендуется искать наилучший балл перекрестной проверки в пространстве гиперпараметров. Любой параметр, предоставляемый при построении устройства оценки, может быть оптимизирован таким образом.
Кривые валидации: Каждый оценщик имеет свои преимущества и недостатки. Ошибка обобщения может быть разложена в терминах смещения, дисперсии и шума. Отклонением оценщика является его средняя ошибка для различных наборов обучения. Отклонение оценщика показывает, насколько он чувствителен к различным наборам учебных материалов. Шум является свойством данных. Очень полезно построить график влияния одного гиперпараметра на балл обучения и балл проверки, чтобы выяснить, является ли оценка избыточной или недостаточной для некоторых значений гиперпараметра. Scickit-learn имеет встроенный метод для этого (рис. 5).
Рис. 5 - Построенные кривые валидации
Однокамерное кодирование категориальных данных: Это чрезвычайно распространенная задача предварительной обработки данных для преобразования входных категориальных признаков в двоичные кодировки
"один в k" для использования в задачах классификации или прогнозирования (например, логистическая регрессия со смешанными числовыми и текстовыми признаками). Scickit-learn предлагает мощные, но простые методы для достижения этой цели. Они работают непосредственно на массивах Pandas dataframe или Numpy, тем самым освобождая пользователя для записи любой специальной функции map/apply для этих преобразований.
Генерация полиномиальных элементов: для бесчисленных задач регрессионного моделирования. Часто полезно усложнять модель, рассматривая нелинейные элементы входных данных. Простой и распространенный метод - полиномиальные особенности, которые могут получить термины высокого порядка и взаимодействия элементов. Scickit -learn имеет готовую функцию для генерации таких перекрестных терминов более высокого порядка из заданного набора признаков и выбора пользователем высшей степени полинома.
Генераторы наборов данных: Scickit-learn включает в себя различные генераторы случайных выборок, которые могут быть использованы для построения искусственных наборов данных контролируемого размера и сложности. Он имеет функции для классификации, кластеризации, регрессии, декомпозиции матрицы и многокомпонентного тестирования (рис. 6).
Orte informative feature, one Cluster per class Two informative features, one Cluster per class
о • О® . о ° ^ о * • • ® i ! • • •«•• О о ЬЧ«0® V'.v • 1 0 -1 ■ -2 Л*?' 4 t Ч** 0£> Л" • ■ ♦ °o
-2 -1 0 Г wo informative features, Ыо 1 2 clusters per class -3-2-10 1 2 Multi-class, two informative features, one cluster
о" О о А °0 о 0 5« 0 • _ О О о 1 « • ? - ч о о ооо о ° о 2 1 0 -1 -2 ee oOQ"OO
-3 -2 -1 0 Three blobs 1 2 -2-10 1 Gaussian divided into three quantiles
. J ф' '■ISA ' О 2 ■ 1 0-1 ■ -2 о о 43® ° .4®»°» °° „ Jp о 0 о 0 ° о о V О о
-7.5 -5.0 -2.5 0.0 2.5 5.0 -1 0 1 2
Рис. 6 - Графики кластеризации
5. Практика интерактивного машинного обучения
Проект Jupyter родился из проекта Шу^п в 2014 году и быстро развивался для поддержки интерактивной науки данных и научных вычислений на всех основных языках программирования. Нет сомнений, что это сильно повлияло на то, как специалист по данным может быстро протестировать и прототипировать свою идею и продемонстрировать работу сверстникам и сообществу с открытым исходным кодом.
Однако обучение и эксперименты с данными дают большой эффект присутствия, когда пользователь может интерактивно контролировать
параметры модели и видеть эффект (почти) в реальном времени. Большинство распространенных визуализаций в Jupiter являются статическими.
Но если вы хотите больше управления, вы хотите изменить переменные простым нажатием на кнопку мыши, тогда можно использовать виджет IPython.
Виджеты - это насыщенные событиями объекты питона, которые имеют представление в браузере, часто в виде элемента управления, такого как ползунок, текстовое поле и т.д., через внешний (HTML/JavaScript) канал визуализации.
Использованные источники:
1. Иванов, В.М. Интеллектуальные системы : учебное пособие / В.М. Иванов. — Екатеринбург : Изд-во Урал. ун-та, 2015. — 92 с.
2. Остроух, А.В. Интеллектуальные информационные системы и технологии: Монография / А.В. Остроух, Н.Е. Суркова. - Красноярск: Научно-инновационный центр, 2015. - 370 с.
3. Вьюгин, В.В. Математические основы машинного обучения и прогнозирования: учебное пособие / В.В. Вьюгин. — Москва: 2013. — 387 с.