johnson_lindenstrauss_min_dim#
- sklearn.random_projection.johnson_lindenstrauss_min_dim(n_samples, *, eps=0.1)[源码]#
查找一个“安全”的随机投影分量数。
随机投影
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 or array-like of int
样本数量,应为大于 0 的整数。如果给出数组,则将逐元素计算安全分量数。
- epsfloat or array-like of shape (n_components,), dtype=float, default=0.1
Johnson-Lindenstrauss 引理定义的范围内 (0, 1) 的最大失真率。如果给出数组,则将逐元素计算安全分量数。
- 返回:
- n_componentsint or ndarray of int
以良好概率保证具有 n_samples 的 eps-embedding 的最小分量数。
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])