johnson_lindenstrauss_min_dim#
- sklearn.random_projection.johnson_lindenstrauss_min_dim(n_samples, *, eps=0.1)[source]#
查找用于随机投影的“安全”组件数量。
随机投影
p
引入的失真,在欧氏空间中以高概率仅将两点之间的距离改变 (1 ± eps) 倍。投影p
是一个 eps-embedding,定义如下:(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-embedding 的最小组件数量由以下公式给出:
n_components >= 4 log(n_samples) / (eps^2 / 2 - eps^3 / 3)
请注意,维数独立于原始特征数量,而是取决于数据集的大小:数据集越大,eps-embedding 的最小维数越高。
在用户指南中了解更多信息。
- 参数:
- n_samplesint 或 int 数组
样本数量,应为大于 0 的整数。如果给定一个数组,它将按数组计算安全的组件数量。
- epsfloat 或形状为 (n_components,) 的浮点数数组,默认为 0.1
根据 Johnson-Lindenstrauss 引理定义的,在 (0, 1) 范围内的最大失真率。如果给定一个数组,它将按数组计算安全的组件数量。
- 返回:
- n_componentsint 或 int 类型的 ndarray
在给定 n_samples 的情况下,以高概率保证 eps-embedding 的最小组件数量。
参考文献
示例
>>> 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])