make_low_rank_matrix#

sklearn.datasets.make_low_rank_matrix(n_samples=100, n_features=100, *, effective_rank=10, tail_strength=0.5, random_state=None)[源代码]#

生成一个带有钟形奇异值的低秩矩阵。

大部分方差可以通过宽度为 effective_rank 的钟形曲线来解释:奇异值分布的低秩部分为

(1 - tail_strength) * exp(-1.0 * (i / effective_rank) ** 2)

剩余奇异值的尾部较厚,呈以下方式递减

tail_strength * exp(-0.1 * i / effective_rank).

该分布的低秩部分可以被视为数据的结构化信号部分,而尾部则可以被视为无法通过少量线性分量(奇异向量)来概括的数据噪声部分。

这种奇异值分布在实践中经常见到,例如
  • 人脸的灰度图像

  • 从网络爬取的文本文档的 TF-IDF 向量

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

参数:
n_samplesint, default=100

样本数。

n_featuresint, default=100

特征数量。

effective_rankint, default=10

通过线性组合解释大部分数据所需的近似奇异向量数量。

tail_strengthfloat, default=0.5

奇异值分布中厚噪声尾部的相对重要性。该值应在 0 到 1 之间。

random_stateint, RandomState instance or None, default=None

确定数据集创建的随机数生成。传递一个 int 值以在多次函数调用中获得可重现的输出。请参阅词汇表

返回:
Xndarray of shape (n_samples, n_features)

生成的矩阵。

示例

>>> from numpy.linalg import svd
>>> from sklearn.datasets import make_low_rank_matrix
>>> X = make_low_rank_matrix(
...     n_samples=50,
...     n_features=25,
...     effective_rank=5,
...     tail_strength=0.01,
...     random_state=0,
... )
>>> X.shape
(50, 25)