Технологии машинного обучения используются во многих отраслях. В этой статье мы поговорим о использовании библиотеки SciPy при выполнении научных и технических вычислений.
SciPy — это бесплатная библиотека Python с открытым исходным кодом, используемая для различных вычислений, в том числе и для задач Machine Learning. Различные модули библиотеки позволяют оптимизировать алгоритмы, интегрировать, использовать линейную алгебру или обрабатывать сигналы. Кроме того, SciPy можно интегрировать с другими инструментами, такими как Matplotlib для визуализации данных.
По сути, SciPy представляет собой набор математических алгоритмов и различных полезных функций, построенных на основе расширениях NumPy языка Python. Она значительно расширяет возможности интерактивной сессии Python, предоставляя пользователю функции и классы для манипулирования и визуализации данных.
Здесь у читателя, хорошо знакомого с темой машинного обучения на Python может возникнуть резонный вопрос: чем SciPy отличается от распространенной библиотеки NumPy.
Да, и SciPy и NumPy — это основные библиотеки, предлагающие широкий спектр функций и методов на Python. Однако между ними есть несколько различий, так к примеру, SciPy предлагает больше деталей при выполнении вычислений. Также, она позволяет выполнять более сложные математические операции, такие как численные алгоритмы и алгебраические функции. С другой стороны, Numpy больше ориентирована на сортировку, индексацию и упорядочивание данных.
Скорость вычислений в NumPy выше, поскольку он основан на языке C. SciPy, с другой стороны, написана на языке Python и поэтому обеспечивает меньшую скорость, но более функциональна.
Также будучи библиотекой, основанной на функциях, SciPy не использует концепцию массивов, в отличии от Numpy, которая позволяет строить многомерные массивы объектов, содержащих однотипные данные.
Установка SciPy
Установить эту библиотеку достаточно просто с помощью менеджера пакетов pip. Просто выполните следующую команду в терминале:
pip install scipy
После успешной установки давайте посмотрим, какие математические задачи позволяет решать данный инструмент.
Что входит в состав SciPy
В состав библиотеки SciPy входит множество различных пакетов, реализующие разнообразный математический функционал. Рассмотрим основные пакеты и состава библиотеки.
Пакет scipy.constants представляет собой набор физических и математических констант, которые можно использовать в своих вычислениях. Если при расчетах нам потребуется преобразование Фурье, то можно воспользоваться пакетом scipy.fftpack. Кластерные алгоритмы для векторного квантования находятся в пакете scipy.cluster.
Если вы забыли что‑то из линейной алгебры, которой так любят мучать в вузах, то вам пригодится пакет scipy.linalg. Функции для интерполяции и интегрирования находятся в пакетах scipy.interpolation и scipy.integrate соответственно.
Для работы с разреженными матрицами пригодится пакет scipy.sparse, а для пространственных структур и алгоритмов — scipy.spatial.
Это далеко не полный список тех пакетов, которые входят в состав SciPy. Далее мы рассмотрим несколько примеров работы с некоторыми из этих пакетов.
Константы SciPy
Существует множество констант, которые включены в пакет scipy.constant. Преимущественно, эти константы используются при работе в общей научной области. Давайте посмотрим, как импортируются и используются эти константные переменные.
В качестве примера мы выведем на экран значение константы золотого сечения — отношение частей и целого, при котором отношения частей между собой и наибольшей части к целому равны.
import scipy print("sciPy -golden ratio Value = %.18f"%scipy.constants.golden)

Таким образом, мы импортировали и распечатали константу золотого сечения с помощью SciPy.В пакете scipy.constant, также есть функция find(), которая возвращает список ключей physical_constant, содержащих заданную строку.
В следующем примере мы попробуем в SciPy поискать константы Больцмана (физическая константа, определяющая связь между температурой и тепловой энергией микрочастиц вещества):
from scipy.constants import find find('boltzmann')

Как видно, мы получили несколько значений, теперь если мы хотим использовать какое‑то конкретное, достаточно выполнить:
scipy.constants.physical_constants['Boltzmann constant in Hz/K']
Полагаю, с константами в SciPy все понятно и можно переходить к работе с различными функциями.
Начнем с кластеризации.
Кластеризация в SciPy
Кластеризация — это задача разделения совокупности значений или точек данных на некоторое количество групп таким образом, чтобы точки данных в одной группе были более похожи на другие точки данных в той же группе и не были похожи на точки данных в других группах. Каждая группа, образованная в результате кластеризации, называется кластером. Существует два типа кластеров: центральный, иерархический.
В качестве примера работы с кластерами в SciPy мы рассмотрим, как реализовать алгоритм K‑means, который является одним из самых популярных алгоритмов кластеризации. Алгоритм K‑means корректирует классификацию наблюдений в кластеры и обновляет центроиды (среднее арифметическое всех точек) кластеров до тех пор, пока их положение не станет стабильным в течение последовательных итераций.
В примере ниже мы с помощью NumPy сгенерировали два набора случайных точек. После объединения этих наборов мы отбеливаем данные. Отбеливание данных — это метод предварительной обработки, который удаляет корреляцию или зависимости между признаками в наборе данных. По сути, отбеливание нормализует данные и является важным шагом перед использованием кластеризации k‑means. В завершении, мы используем функцию kmeans и передаем ей данные и количество кластеров, которые мы хотим получить.
import numpy as np from scipy.cluster.vq import kmeans, whiten import matplotlib.pyplot as plt import seaborn as sns sns.set_style("darkgrid") # Создаем 50 точек в двух кластерах a и b pts = 100 a = np.random.multivariate_normal([0, 0], [[4, 1], [1, 4]], size=pts) b = np.random.multivariate_normal([30, 10], [[10, 2], [2, 1]], size=pts) features = np.concatenate((a, b)) # Отбеливаем данные whitened = whiten(features) # Find 2 clusters in the data codebook, distortion = kmeans(whitened, 2) # Рисуем графики plt.scatter(whitened[:, 0], whitened[:, 1]) plt.scatter(codebook[:, 0], codebook[:, 1], c='r') plt.show()
Получаем следующий графический вывод:

Преобразуем пространственные данные в частотные
Еще одна полезная функция SciPy Это Fast Fourier Transformation — математическая техника, которая используется для преобразования пространственных данных в частотные.
SciPy предоставляет модуль fftpack, который используется для вычисления преобразования Фурье. В примере ниже мы построим график простой периодической функции sin и посмотрим, как функция scipy.fft преобразует ее.
from matplotlib import pyplot as plt import numpy as np import seaborn as sns sns.set_style("darkgrid") #Частота в Герцах fre = 10 fre_samp = 100 t = np.linspace(0, 2, 2 * fre_samp, endpoint = False ) a = np.sin(fre 2 np.pi * t) plt.plot(t, a) plt.xlabel('Time (s)') plt.ylabel('Signal amplitude') plt.show()
В результате работы данного кода получим следующий вывод:
Теперь используем функцию fftpack для того, чтобы выполнить преобразование Фурье:
from scipy import fftpack A = fftpack.fft(a) frequency = fftpack.fftfreq(len(a)) * fre_samp plt.stem(frequency, np.abs(A),use_line_collection=True) plt.xlabel('Frequency in Hz') plt.ylabel('Frequency Spectrum Magnitude') plt.show()
Этот пакет предоставляет нам такие функции, как fftfreq(), которая генерирует частоты дискретизации. Также функция fftpack.dct() позволяет вычислить дискретное косинусное преобразование (DCT).
Заключение
В этой статье мы рассмотрели некоторые возможности, которые предоставляет библиотека SciPy, в частности основные математические функции и примеры работы с ними. Возможности библиотеки SciPy позволяют существенно упростить решение различных задач машинного обучения.
Если вы хотите углубить знания и посмотреть, как прикладные инструменты Python используются в реальных задачах анализа данных и машинного обучения — приглашаем вас на открытые вебинары:
ссылка на оригинал статьи https://habr.com/ru/articles/885992/
Добавить комментарий