Spec-Zone.ru › scikit-learn

johnson_lindenstrauss_min_dim

sklearn.random_projection.johnson_lindenstrauss_min_dim(n_samples, *, eps=0.1)[исходный код]

Находит «безопасное» количество компонент для случайного проецирования.

Искажение, вносимое случайным проецированием p, с высокой вероятностью изменяет расстояние между двумя точками только в (1 +- eps) раза в евклидовом пространстве. Проекция p является eps-вложением, определённым следующим образом:

(1 - eps) ||u - v||^2 < ||p(u) - p(v)||^2 < (1 + eps) ||u - v||^2

Где u и v — любые строки из набора данных формы (n_samples, n_features), eps принадлежит интервалу ]0, 1[, а p — проекция с помощью случайной гауссовской матрицы N(0, 1) формы (n_components, n_features) (или разреженной матрицы Ахлиоптаса).

Минимальное количество компонент, гарантирующее eps-вложение, задаётся формулой:

n_components >= 4 log(n_samples) / (eps^2 / 2 - eps^3 / 3)

Обратите внимание, что количество измерений не зависит от исходного числа признаков, а определяется размером набора данных: чем больше набор данных, тем выше минимальная размерность eps-вложения.

Подробнее см. в руководстве пользователя.

Параметры:
n_samplesint or array-like of int

Количество образцов должно быть целым числом больше 0. Если передан массив, безопасное количество компонент будет вычислено поэлементно.

epsfloat or array-like of shape (n_components,), dtype=float, default=0.1

Максимальный уровень искажения в диапазоне (0, 1), определённый леммой Джонсона — Линденштрауса. Если передан массив, безопасное количество компонент будет вычислено поэлементно.

Возвращает:
n_componentsint or ndarray of int

Минимальное количество компонент, которое с высокой вероятностью гарантирует eps-вложение для n_samples.

Ссылки

[1]

https://en.wikipedia.org/wiki/Johnson%E2%80%93Lindenstrauss_lemma

[2]

Санджой Дасгупта и Анупам Гупта, 1999, «Элементарное доказательство леммы Джонсона — Линденштрауса».

Примеры

>>> from sklearn.random_projection import johnson_lindenstrauss_min_dim
>>> johnson_lindenstrauss_min_dim(1e6, eps=0.5)
np.int64(663)
>>> johnson_lindenstrauss_min_dim(1e6, eps=[0.5, 0.1, 0.01])
array([    663,   11841, 1112658])
>>> johnson_lindenstrauss_min_dim([1e4, 1e5, 1e6], eps=0.1)
array([ 7894,  9868, 11841])

Примеры в галерее

Граница Джонсона — Линденштрауса для вложения с помощью случайных проекций

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

Spec-Zone.ru

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