johnson_lindenstrauss_min_dim#

sklearn.random_projection.johnson_lindenstrauss_min_dim(n_samples, *, eps=0.1)[source]#

计算随机投影的“安全”分量数。

随机投影 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_components, n_features) 的随机高斯 N(0, 1) 矩阵(或稀疏 Achlioptas 矩阵)进行的投影。

保证 eps-嵌入的最小分量数由以下公式给出:

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

注意,维度数量与原始特征数量无关,而是取决于数据集的大小:数据集越大,eps-嵌入所需的最小维度就越高。

用户指南 中阅读更多内容。

参数:
n_samplesint 或 int 数组

样本数量,必须是一个大于 0 的整数。如果给定一个数组,它将按数组元素计算安全的分量数。

epsfloat 或形状为 (n_components,) 的 float 数组,默认=0.1

Johnson-Lindenstrauss 引理所定义的最大畸变率,范围在 (0, 1) 之间。如果给定一个数组,它将按数组元素计算安全的分量数。

返回:
n_componentsint 或 int 的 ndarray

在给定 n_samples 的情况下,以高概率保证 eps-嵌入所需的最小分量数。

References

示例

>>> 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])