6.8. Метрики парных сравнений, близости и ядра
Модуль sklearn.metrics.pairwise реализует утилиты для оценки парных расстояний или близости наборов выборок.
Этот модуль содержит метрики расстояний и ядра. Здесь приводится краткое описание обоих.
Метрики расстояний являются функциями d(a, b) такие, что d(a, b) < d(a, c) если объекты a и b считаются «более похожими», чем объекты a и c. Два абсолютно одинаковых объекта имеют расстояние 0. Одним из самых популярных примеров является евклидово расстояние. Чтобы быть «истинной» метрикой, она должна удовлетворять следующим четырем условиям:
1. d(a, b) >= 0, for all a and b 2. d(a, b) == 0, if and only if a = b, positive definiteness 3. d(a, b) == d(b, a), symmetry 4. d(a, c) <= d(a, b) + d(b, c), the triangle inequality
Ядра являются мерами сходства, т.е. s(a, b) > s(a, c) если объекты a и b считаются «более похожими», чем объекты a и c. Ядро также должно быть положительно полуопределённым.
Существует несколько способов преобразования метрики расстояния в меру сходства, такую как ядро. Пусть D - расстояние, а S - ядро:
-
-
S = np.exp(-D * gamma), где один из эвристик для выбора -
gammaявляется1 / num_features
-
S = 1. / (D / np.max(D))
Расстояния между строчными векторами X и строчными векторами Y могут быть оценены с помощью pairwise_distances. Если Y опущено, вычисляются парные расстояния между строчными векторами X. Аналогично, pairwise.pairwise_kernels может быть использовано для вычисления ядра между X и Y с использованием различных функций ядра. Более подробная информация представлена в справочнике API.
>>> import numpy as np
>>> from sklearn.metrics import pairwise_distances
>>> from sklearn.metrics.pairwise import pairwise_kernels
>>> X = np.array([[2, 3], [3, 5], [5, 8]])
>>> Y = np.array([[1, 0], [2, 1]])
>>> pairwise_distances(X, Y, metric='manhattan')
array([[ 4., 2.],
[ 7., 5.],
[12., 10.]])
>>> pairwise_distances(X, metric='manhattan')
array([[0., 3., 8.],
[3., 0., 5.],
[8., 5., 0.]])
>>> pairwise_kernels(X, Y, metric='linear')
array([[ 2., 7.],
[ 3., 11.],
[ 5., 18.]])
6.8.1. Косинусное сходство
cosine_similarity вычисляет нормированное по L2 скалярное произведение векторов. То есть, если \(x\) и \(y\) являются строчными векторами, их косинусное сходство \(k\) определяется как:
Это называется косинусное сходство, потому что евклидова (L2) нормализация проектирует векторы на единичную сферу, а их скалярное произведение является затем косинусом угла между точками, обозначенными векторами.
Это ядро является популярным выбором для вычисления сходства документов, представленных векторами tf-idf. cosine_similarity принимает scipy.sparse матрицы. (Обратите внимание, что функциональность tf-idf в sklearn.feature_extraction.text может создавать нормированные векторы, в этом случае cosine_similarity эквивалентно linear_kernel, только медленнее.)
Ссылки
- К.Д. Мэннинг, П. Рагхаван и Х. Шуце (2008). Введение в информационный поиск. Cambridge University Press. https://nlp.stanford.edu/IR-book/html/htmledition/the-vector-space-model-for-scoring-1.html
6.8.2. Линейное ядро
Функция linear_kernel вычисляет линейное ядро, то есть частный случай polynomial_kernel с degree=1 и coef0=0 (однородное). Если x и y являются столбцовыми векторами, их линейное ядро равно:
6.8.3. Полиномиальное ядро
Функция polynomial_kernel вычисляет полиномиальное ядро степени d между двумя векторами. Полиномиальное ядро представляет собой меру сходства между двумя векторами. Концептуально, полиномиальные ядра учитывают не только сходство векторов в одном измерении, но и между измерениями. При использовании в алгоритмах машинного обучения это позволяет учесть взаимодействие признаков.
Полиномиальное ядро определяется как:
где:
-
x,yявляются входными векторами -
d- степень ядра
Если \(c_0 = 0\), ядро называется однородным.
6.8.4. Сигмоидное ядро
Функция sigmoid_kernel вычисляет сигмоидное ядро между двумя векторами. Сигмоидное ядро также известно как гиперболический тангенс или ядро многослойного перцептрона (потому что в области нейронных сетей оно часто используется в качестве функции активации нейрона). Оно определяется как:
где:
-
x,yявляются входными векторами - \(\gamma\) - известный наклон
- \(c_0\) - известный сдвиг
6.8.5. Ядро RBF
Функция rbf_kernel вычисляет ядро радиальной базисной функции (RBF) между двумя векторами. Это ядро определяется как:
где x и y - входные векторы. Если \(\gamma = \sigma^{-2}\), ядро известно как гауссово ядро с дисперсией \(\sigma^2\).
6.8.6. Ядро Лапласа
Функция laplacian_kernel - это вариант ядра радиальной базисной функции, определенный как:
где x и y - входные векторы, и \(\|x-y\|_1\) - манхэттенское расстояние между входными векторами.
Оно оказалось полезным в задачах машинного обучения, применяемых к данным без шума. См., например, Machine learning for quantum mechanics in a nutshell.
6.8.7. Ядро хи-квадрат
Ядро хи-квадрат является очень популярным выбором для обучения нелинейных SVM в приложениях компьютерного зрения. Его можно вычислить с помощью chi2_kernel и затем передать в SVC с kernel="precomputed":
>>> from sklearn.svm import SVC
>>> from sklearn.metrics.pairwise import chi2_kernel
>>> X = [[0, 1], [1, 0], [.2, .8], [.7, .3]]
>>> y = [0, 1, 0, 1]
>>> K = chi2_kernel(X, gamma=.5)
>>> K
array([[1. , 0.36787944, 0.89483932, 0.58364548],
[0.36787944, 1. , 0.51341712, 0.83822343],
[0.89483932, 0.51341712, 1. , 0.7768366 ],
[0.58364548, 0.83822343, 0.7768366 , 1. ]])
>>> svm = SVC(kernel='precomputed').fit(K, y)
>>> svm.predict(K)
array([0, 1, 0, 1])
Его также можно использовать напрямую в качестве аргумента kernel:
>>> svm = SVC(kernel=chi2_kernel).fit(X, y) >>> svm.predict(X) array([0, 1, 0, 1])
Ядро хи-квадрат определяется как
Предполагается, что данные неотрицательны, и часто нормируются так, чтобы иметь норму L1 равную единице. Нормализация обосновывается связью с расстоянием хи-квадрат, которое является расстоянием между дискретными распределениями вероятностей.
Ядро хи-квадрат чаще всего используется на гистограммах (мешках) визуальных слов.
Ссылки
- Zhang, J. и Marszalek, M. и Lazebnik, S. и Schmid, C. Локальные признаки и ядра для классификации текстур и категорий объектов: всестороннее исследование Международный журнал компьютерного зрения 2007 https://hal.archives-ouvertes.fr/hal-00171412/document
© 2007–2025 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.6/modules/metrics.html