Как стать автором
Обновить
567.74
OTUS
Цифровые навыки от ведущих экспертов

Знакомимся с SciPy

Время на прочтение6 мин
Количество просмотров3.4K

Технологии машинного обучения используются во многих отраслях. В этой статье мы поговорим о использовании библиотеки 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 используются в реальных задачах анализа данных и машинного обучения — приглашаем вас на открытые вебинары:

  • 28 апреля — Unsupervised подходы: Сегментация временных рядов.
    Подробнее

  • 28 апреля — Подготовка данных в Pandas.
    Подробнее

  • 12 мая — Модели матричной факторизации: теория и практика.
    Подробнее

Теги:
Хабы:
+1
Комментарии4

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS

Истории