Spec-Zone.ru › scikit-learn

8.7. Приближение ядер

Этот подмодуль содержит функции, приближающие отображения признаков, соответствующие некоторым ядрам, например используемым в машинах опорных векторов (см. Машины опорных векторов). Следующие функции признаков выполняют нелинейные преобразования входных данных, которые могут служить основой для линейной классификации или других алгоритмов.

Преимущество использования приближённых явных отображений признаков по сравнению с ядерным трюком, в котором отображения признаков используются неявно, заключается в том, что явные отображения лучше подходят для онлайн-обучения и могут значительно снизить стоимость обучения на очень больших наборах данных. Стандартные SVM с ядром плохо масштабируются для больших наборов данных, но, используя приближённое отображение ядра, можно применять гораздо более эффективные линейные SVM. В частности, сочетание приближений отображения ядра с SGDClassifier может сделать возможным нелинейное обучение на больших наборах данных.

Поскольку эмпирических исследований приближённых вложений пока немного, по возможности рекомендуется сравнивать результаты с результатами точных ядерных методов.

См. также

Полиномиальная регрессия: расширение линейных моделей с помощью базисных функций — точное полиномиальное преобразование.

8.7.1. Метод Нюстрёма для приближения ядер

Метод Нюстрёма, реализованный в Nystroem, — это общий метод приближения ядер матрицами пониженного ранга. Он достигает этого путём выборки без возвращения строк и столбцов данных, для которых вычисляется ядро. Если вычислительная сложность точного метода составляет \(\mathcal{O}(n^3_{\text{samples}})\), то сложность приближения равна \(\mathcal{O}(n^2_{\text{components}} \cdot n_{\text{samples}})\), где можно задать \(n_{\text{components}} \ll n_{\text{samples}}\) без существенного снижения качества [WS2001].

На основе признаков данных можно построить спектральное разложение матрицы ядра \(K\), а затем разделить её на выбранные и невыбранные точки данных.

\[\begin{split}K = U \Lambda U^T = \begin{bmatrix} U_1 \\ U_2\end{bmatrix} \Lambda \begin{bmatrix} U_1 \\ U_2 \end{bmatrix}^T = \begin{bmatrix} U_1 \Lambda U_1^T & U_1 \Lambda U_2^T \\ U_2 \Lambda U_1^T & U_2 \Lambda U_2^T \end{bmatrix} \equiv \begin{bmatrix} K_{11} & K_{12} \\ K_{21} & K_{22} \end{bmatrix}\end{split}\]

где:

  • \(U\) — ортонормированная матрица
  • \(\Lambda\) — диагональная матрица собственных значений
  • \(U_1\) — ортонормированная матрица выбранных образцов
  • \(U_2\) — ортонормированная матрица невыбранных образцов

Поскольку \(U_1 \Lambda U_1^T\) можно получить ортонормированием матрицы \(K_{11}\), а \(U_2 \Lambda U_1^T\) можно вычислить (как и её транспонированную матрицу), остаётся определить только \(U_2 \Lambda U_2^T\). Для этого выразим её через уже вычисленные матрицы:

\[\begin{split}\begin{align} U_2 \Lambda U_2^T &= \left(K_{21} U_1 \Lambda^{-1}\right) \Lambda \left(K_{21} U_1 \Lambda^{-1}\right)^T \\&= K_{21} U_1 (\Lambda^{-1} \Lambda) \Lambda^{-1} U_1^T K_{21}^T \\&= K_{21} U_1 \Lambda^{-1} U_1^T K_{21}^T \\&= K_{21} K_{11}^{-1} K_{21}^T \\&= \left( K_{21} K_{11}^{-\frac12} \right) \left( K_{21} K_{11}^{-\frac12} \right)^T .\end{align}\end{split}\]

Во время fit класс Nystroem вычисляет базис \(U_1\) и нормирующую константу \(K_{11}^{-\frac12}\). Позже, во время transform, вычисляется матрица ядра между базисом (заданным атрибутом components_) и новыми точками данных, X. Затем для получения конечного результата эту матрицу умножают на матрицу normalization_.

По умолчанию Nystroem использует ядро rbf, но может использовать любую функцию ядра или предварительно вычисленную матрицу ядра. Число используемых образцов, которое также является размерностью вычисляемых признаков, задаётся параметром n_components.

Примеры

  • См. пример Создание признаков, связанных со временем, в котором показан эффективный конвейер машинного обучения с использованием ядра Nystroem.
  • См. Приближение явного отображения признаков для ядер RBF — сравнение ядра Nystroem с RBFSampler.

8.7.2. Ядро радиальных базисных функций

RBFSampler строит приближённое отображение для ядра радиальных базисных функций, также известного как Random Kitchen Sinks [RR2007]. Это преобразование можно использовать для явного моделирования отображения ядра перед применением линейного алгоритма, например линейного SVM:

>>> from sklearn.kernel_approximation import RBFSampler
>>> from sklearn.linear_model import SGDClassifier
>>> X = [[0, 0], [1, 1], [1, 0], [0, 1]]
>>> y = [0, 0, 1, 1]
>>> rbf_feature = RBFSampler(gamma=1, random_state=1)
>>> X_features = rbf_feature.fit_transform(X)
>>> clf = SGDClassifier(max_iter=5)
>>> clf.fit(X_features, y)
SGDClassifier(max_iter=5)
>>> clf.score(X_features, y)
1.0

Отображение основано на приближении значений ядра методом Монте-Карло. Функция fit выполняет выборку методом Монте-Карло, а метод transform отображает данные. Из-за присущей процессу случайности результаты разных вызовов функции fit могут различаться.

Функция fit принимает два аргумента: n_components — целевую размерность преобразования признаков, и gamma — параметр ядра RBF. Чем выше значение n_components, тем точнее приближение ядра и тем ближе результаты к результатам, полученным с помощью SVM с ядром. Обратите внимание, что «обучение» функции признаков фактически не зависит от данных, переданных функции fit. Используется только размерность данных. Подробное описание метода приведено в [RR2007].

При заданном значении n_components RBFSampler часто менее точен, чем Nystroem. Однако вычисления RBFSampler обходятся дешевле, поэтому эффективнее использовать пространства признаков большей размерности.

../_images/sphx_glr_plot_kernel_approximation_002.png

Сравнение точного ядра RBF (слева) с приближением (справа)

Примеры

  • См. Приближение явного отображения признаков для ядер RBF — сравнение ядра Nystroem с RBFSampler.

8.7.3. Аддитивное ядро хи-квадрат

Аддитивное ядро хи-квадрат — это ядро для гистограмм, часто используемое в компьютерном зрении.

Используемое здесь аддитивное ядро хи-квадрат задаётся выражением

\[k(x, y) = \sum_i \frac{2x_iy_i}{x_i+y_i}\]

Это не совсем то же самое, что sklearn.metrics.pairwise.additive_chi2_kernel. Авторы работы [VZ2010] предпочитают приведённый выше вариант, поскольку он всегда является положительно определённым. Так как ядро аддитивно, при построении вложения можно рассматривать все компоненты \(x_i\) отдельно. Это позволяет выбирать точки преобразования Фурье через равные интервалы вместо аппроксимации методом Монте-Карло.

Класс AdditiveChi2Sampler реализует детерминированную выборку для отдельных компонентов. Для каждого компонента выполняется \(n\) выборок, что даёт \(2n+1\) измерений на каждое входное измерение (множитель два обусловлен действительной и мнимой частями преобразования Фурье). В литературе обычно выбирают \(n\), равное 1 или 2, увеличивая размер набора данных до n_samples * 5 * n_features (при \(n=2\)).

Приближённое отображение признаков, предоставляемое AdditiveChi2Sampler, можно сочетать с приближённым отображением признаков, предоставляемым RBFSampler, чтобы получить приближённое отображение признаков для экспоненцированного ядра хи-квадрат. Подробности см. в работе [VZ2010], а сочетание с RBFSampler описано в работе [VVZ2010].

8.7.4. Асимметричное ядро хи-квадрат

Асимметричное ядро хи-квадрат задаётся выражением:

\[k(x,y) = \prod_i \frac{2\sqrt{x_i+c}\sqrt{y_i+c}}{x_i + y_i + 2c}\]

Оно обладает свойствами, сходными со свойствами экспоненцированного ядра хи-квадрат, часто используемого в компьютерном зрении, но допускает простое приближение отображения признаков методом Монте-Карло.

Использование SkewedChi2Sampler аналогично описанному выше использованию RBFSampler. Разница заключается только в свободном параметре, обозначенном \(c\). Обоснование этого отображения и математические подробности приведены в работе [LS2010].

8.7.5. Приближение полиномиального ядра с помощью Tensor Sketch

Полиномиальное ядро — популярный тип функции ядра, задаваемый выражением:

\[k(x, y) = (\gamma x^\top y +c_0)^d\]

где:

  • x, y — входные векторы
  • d — степень ядра

Интуитивно, пространство признаков полиномиального ядра степени d состоит из всех возможных произведений входных признаков степени d, что позволяет алгоритмам обучения с таким ядром учитывать взаимодействия между признаками.

Метод TensorSketch [PP2013], реализованный в PolynomialCountSketch, — это масштабируемый метод приближения полиномиального ядра, не зависящий от входных данных. Он основан на концепции Count Sketch [WIKICS] [CCF2002] — метода снижения размерности, аналогичного хешированию признаков, в котором, однако, используются несколько независимых хеш-функций. TensorSketch строит Count Sketch внешнего произведения двух векторов (или вектора самого на себя), который можно использовать как приближение пространства признаков полиномиального ядра. В частности, вместо явного вычисления внешнего произведения TensorSketch строит Count Sketch векторов, а затем использует перемножение полиномов с помощью быстрого преобразования Фурье, чтобы вычислить Count Sketch их внешнего произведения.

Удобно, что этап обучения TensorSketch сводится к инициализации нескольких случайных переменных. Поэтому он не зависит от входных данных: он определяется только числом входных признаков, но не их значениями. Кроме того, этот метод преобразует образцы за время \(\mathcal{O}(n_{\text{samples}}(n_{\text{features}} + n_{\text{components}} \log(n_{\text{components}})))\), где \(n_{\text{components}}\) — требуемая размерность выходных данных, задаваемая параметром n_components.

Примеры

  • Масштабируемое обучение с приближением полиномиального ядра

8.7.6. Математические подробности

Ядерные методы, такие как машины опорных векторов или ядерный метод главных компонент, основаны на свойстве воспроизводящих ядерных гильбертовых пространств. Для любой положительно определённой функции ядра \(k\) (так называемого ядра Мерсера) гарантируется существование отображения \(\phi\) в гильбертово пространство \(\mathcal{H}\), такого что

\[k(x,y) = \langle \phi(x), \phi(y) \rangle\]

Здесь \(\langle \cdot, \cdot \rangle\) обозначает скалярное произведение в гильбертовом пространстве.

Если алгоритм, например линейная машина опорных векторов или метод главных компонент, зависит только от скалярного произведения точек данных \(x_i\), можно использовать значение \(k(x_i, x_j)\), которое соответствует применению алгоритма к отображённым точкам данных \(\phi(x_i)\). Преимущество использования \(k\) состоит в том, что отображение \(\phi\) никогда не требуется вычислять явно, что позволяет работать с признаками сколь угодно большой (даже бесконечной) размерности.

Один из недостатков ядерных методов заключается в том, что во время оптимизации может потребоваться хранить множество значений ядра \(k(x_i, x_j)\). Если классификатор с ядром применяется к новым данным \(y_j\), для получения предсказаний необходимо вычислить \(k(x_i, y_j)\), возможно, для множества различных \(x_i\) из обучающего набора.

Классы этого подмодуля позволяют приближённо вычислить вложение \(\phi\) и работать непосредственно с представлениями \(\phi(x_i)\), что избавляет от необходимости применять ядро или хранить обучающие примеры.

Литература

[WS2001]

«Использование метода Нюстрёма для ускорения ядерных машин» Williams, C.K.I.; Seeger, M. — 2001.

[RR2007] (1,2)

«Случайные признаки для крупномасштабных ядерных машин» Rahimi, A. и Recht, B. — Advances in neural information processing 2007,

[LS2010]

«Случайные приближения Фурье для асимметричных мультипликативных ядер гистограмм» Li, F., Ionescu, C. и Sminchisescu, C. — Pattern Recognition, DAGM 2010, Lecture Notes in Computer Science.

[VZ2010] (1,2)

«Эффективные аддитивные ядра с помощью явных отображений признаков» Vedaldi, A. и Zisserman, A. — Computer Vision and Pattern Recognition 2010

[VVZ2010]

«Обобщённые отображения признаков RBF для эффективного обнаружения» Vempati, S., Vedaldi, A., Zisserman, A. и Jawahar, CV — 2010

[PP2013]

«Быстрые и масштабируемые полиномиальные ядра с помощью явных отображений признаков» Pham, N. и Pagh, R. — 2013

[CCF2002]

«Поиск часто встречающихся элементов в потоках данных» Charikar, M., Chen, K. и Farach-Colton — 2002

[WIKICS]

«Википедия: Count Sketch»

© 2007–2026 The scikit-learn developers
Licensed under the 3-clause BSD License.
https://scikit-learn.org/1.9/modules/kernel_approximation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API