UMAP API 指南
UMAP 只有两个类:UMAP
和继承自它的 ParametricUMAP
。
UMAP
- class umap.umap_.UMAP(n_neighbors=15, n_components=2, metric='euclidean', metric_kwds=None, output_metric='euclidean', output_metric_kwds=None, n_epochs=None, learning_rate=1.0, init='spectral', min_dist=0.1, spread=1.0, low_memory=True, n_jobs=-1, set_op_mix_ratio=1.0, local_connectivity=1.0, repulsion_strength=1.0, negative_sample_rate=5, transform_queue_size=4.0, a=None, b=None, random_state=None, angular_rp_forest=False, target_n_neighbors=-1, target_metric='categorical', target_metric_kwds=None, target_weight=0.5, transform_seed=42, transform_mode='embedding', force_approximation_algorithm=False, verbose=False, tqdm_kwds=None, unique=False, densmap=False, dens_lambda=2.0, dens_frac=0.3, dens_var_shift=0.1, output_dens=False, disconnection_distance=None, precomputed_knn=(None, None, None))[source]
均匀流形逼近和投影
找到数据的低维嵌入,该嵌入逼近潜在的流形。
- 参数:
- n_neighbors: float (可选, 默认 15)
用于流形逼近的局部邻域的大小(以邻近样本点的数量计)。较大的值可获得更全局的流形视图,而较小的值则保留更多局部数据。通常值应在 2 到 100 的范围内。
- n_components: int (可选, 默认 2)
要嵌入到的空间的维度。默认为 2 以便于可视化,但也合理地可以设置为 2 到 100 范围内的任何整数值。
- metric: string 或 function (可选, 默认 ‘euclidean’)
用于计算高维空间中距离的度量。如果传入字符串,它必须与有效的预定义度量匹配。如果需要通用度量,可以提供一个接受两个 1d 数组并返回 float 的函数。为了性能考虑,此函数必须是 numba jit 编译的函数。有效的字符串度量包括:
euclidean
manhattan
chebyshev
minkowski
canberra
braycurtis
mahalanobis
wminkowski
seuclidean
cosine
correlation
haversine
hamming
jaccard
dice
russelrao
kulsinski
ll_dirichlet
hellinger
rogerstanimoto
sokalmichener
sokalsneath
yule
需要参数的度量(如 minkowski, mahalanobis 等)可以通过 metric_kwds 字典传递参数。目前需要注意并正确排序字典元素;希望未来能够解决此问题。
- n_epochs: int (可选, 默认 None)
用于优化低维嵌入的训练轮数。值越大,嵌入越准确。如果指定 None,将根据输入数据集的大小(大型数据集 200,小型数据集 500)选择一个值。
- learning_rate: float (可选, 默认 1.0)
嵌入优化的初始学习率。
- init: string (可选, 默认 ‘spectral’)
如何初始化低维嵌入。选项包括:
‘spectral’: 使用模糊 1-骨架的谱嵌入
‘random’: 随机分配初始嵌入位置。
- ‘pca’: 使用应用于输入数据后的 PCA 的前 n_components
(组件)。
- ‘tswspectral’: 使用模糊的谱嵌入,
使用截断奇异值分解来“预热”特征求解器。这旨在作为 ‘spectral’ 方法的替代方案,如果该方法初始化时间过长(或无法完成)。
初始嵌入位置的 numpy 数组。
- min_dist: float (可选, 默认 0.1)
嵌入点之间的有效最小距离。较小的值将导致更聚簇/聚集的嵌入,其中流形上的相邻点被拉得更近,而较大的值将导致点更均匀地分散。该值应相对于
spread
值设置,spread
值决定了嵌入点分散的尺度。- spread: float (可选, 默认 1.0)
嵌入点的有效尺度。结合
min_dist
,这决定了嵌入点的聚簇/聚集程度。- low_memory: bool (可选, 默认 True)
对于某些数据集,最近邻计算可能会消耗大量内存。如果您发现 UMAP 因内存限制而失败,请考虑将此选项设置为 True。这种方法计算成本更高,但避免了过多的内存使用。
- set_op_mix_ratio: float (可选, 默认 1.0)
在用于组合局部模糊单纯集以获得全局模糊单纯集的集合操作中,在(模糊)并集和交集之间进行插值。两种模糊集合操作都使用乘积 t-范数。此参数的值应在 0.0 到 1.0 之间;值为 1.0 将使用纯模糊并集,而 0.0 将使用纯模糊交集。
- local_connectivity: int (可选, 默认 1)
所需的局部连通性——即在局部层面应假定连接的最近邻数量。该值越高,流形在局部越连通。实际上,该值不应超过流形的局部内在维度。
- repulsion_strength: float (可选, 默认 1.0)
在低维嵌入优化中应用于负样本的权重。值大于一会导致负样本获得更大的权重。
- negative_sample_rate: int (可选, 默认 5)
在优化过程中,每正样本选择的负样本数量。增加此值会导致施加更大的排斥力,更高的优化成本,但准确性略高。
- transform_queue_size: float (可选, 默认 4.0)
对于转换操作(使用训练好的模型嵌入新点),这将控制搜索最近邻的积极程度。较大的值将导致性能变慢,但最近邻评估更准确。
- a: float (可选, 默认 None)
控制嵌入的更具体参数。如果为 None,则这些值将根据
min_dist
和spread
自动设置。- b: float (可选, 默认 None)
控制嵌入的更具体参数。如果为 None,则这些值将根据
min_dist
和spread
自动设置。- random_state: int, RandomState 实例或 None, 可选 (默认: None)
如果为 int,random_state 是随机数生成器使用的种子;如果为 RandomState 实例,random_state 是随机数生成器本身;如果为 None,则使用 np.random 使用的 RandomState 实例作为随机数生成器。
- metric_kwds: dict (可选, 默认 None)
传递给度量的参数,例如 Minkowski 距离的
p
值。如果为 None,则不传递任何参数。- angular_rp_forest: bool (可选, 默认 False)
是否使用角随机投影森林初始化近似最近邻搜索。这可以更快,但主要只对使用角风格距离(如余弦、相关性等)的度量有用。对于这些度量,将自动选择角森林。
- target_n_neighbors: int (可选, 默认 -1)
用于构建目标单纯集的最近邻数量。如果设置为 -1,则使用
n_neighbors
的值。- target_metric: string 或 callable (可选, 默认 ‘categorical’)
在使用监督维度约减时,用于测量目标数组距离的度量。默认情况下,这是 ‘categorical’,它根据类别是否匹配或不同来衡量距离。此外,如果需要半监督,在 ‘categorical’ 度量下,目标值 -1 将被视为未标记。如果目标数组采用连续值(例如,对于回归问题),那么 ‘l1’ 或 ‘l2’ 度量可能更合适。
- target_metric_kwds: dict (可选, 默认 None)
在执行监督维度约减时传递给目标度量的关键字参数。如果为 None,则不传递任何参数。
- target_weight: float (可选, 默认 0.5)
数据拓扑和目标拓扑之间的权重因子。0.0 的值主要侧重于数据,1.0 的值强烈侧重于目标。默认值 0.5 在数据和目标之间平均分配权重。
- transform_seed: int (可选, 默认 42)
用于转换操作随机方面的随机种子。这确保了转换操作的一致性。
- verbose: bool (可选, 默认 False)
控制日志记录的详细程度。
- tqdm_kwds: dict (可选, 默认 None)
tqdm 进度条使用的关键字参数。
- unique: bool (可选, 默认 False)
控制在嵌入之前是否对数据行进行去重。如果您的重复项数量多于
n_neighbors
,相同的输入数据点可能会位于空间的不同区域。这也违反了度量的定义。要将内部结构映射回您的数据,请使用 _unique_inverse_ 变量。- densmap: bool (可选, 默认 False)
指定是否应使用 densMAP 的密度增强目标函数进行优化。启用此选项会生成一个嵌入,其中鼓励局部密度与原始空间中的密度相关。下方带有 ‘dens’ 前缀的参数进一步控制此扩展的行为。
- dens_lambda: float (可选, 默认 2.0)
控制 densMAP 中密度相关项的正则化权重。值越高,相对于 UMAP 目标更优先保留密度;值越接近零,则反之。将此参数设置为零等同于运行原始 UMAP 算法。
- dens_frac: float (可选, 默认 0.3)
控制 densMAP 中使用密度增强目标函数的训练轮数比例(介于 0 和 1 之间)。前 (1 - dens_frac) 比例的训练轮数优化原始 UMAP 目标,然后引入密度相关项。
- dens_var_shift: float (可选, 默认 0.1)
计算密度相关目标时添加到嵌入中局部半径方差的小常数,以防止除以小数引起的数值不稳定。
- output_dens: float (可选, 默认 False)
确定是否计算并返回最终嵌入的局部半径(局部密度的反向度量),以及嵌入本身。如果设置为 True,原始数据的局部半径也包含在输出中以供比较;输出是一个元组 (embedding, original local radii, embedding local radii)。当 densmap=False 时也可以使用此选项来计算 UMAP 嵌入的密度。
- disconnection_distance: float (可选, 默认 np.inf 或有界距离的最大值)
在使用我们的 k-nn 图近似流形时,断开距离大于或等于 disconnection_distance 的任何顶点。这在您使用有界度量的情况下特别有用。当您的数据中存在与其余所有点最大程度不同的点时,UMAP 的连接流形假设可能会产生问题。连接流形假设会使这些点与一组随机的其他点具有完美的相似性。过多的此类点会人为地连接您的空间。
- precomputed_knn: tuple (可选, 默认 (None,None,None))
如果已经计算了每个点的 k 最近邻,您可以在此处传入它们以节省计算时间。 precomputed_knn 中的最近邻数量必须大于或等于 n_neighbors 参数。这应该是一个包含 nearest_neighbors() 函数输出或先前拟合的 UMAP 对象的属性的元组;(knn_indices, knn_dists, knn_search_index)。如果您希望使用由其他包计算的 k 最近邻数据,则提供一个 (knn_indices, knn_dists) 形式的元组。元组的内容应是两个形状为 (N, n_neighbors) 的 numpy 数组,其中 N 是输入数据中的项目数量。第一个数组应该是最近邻的整数索引,第二个数组应该是相应的距离。每个项目的最近邻应该是它本身,例如项目 0 的最近邻应该是 0,项目 1 的最近邻是 1,依此类推。请注意,在这种情况下您将无法转换新数据。
- fit(X, y=None, ensure_all_finite=True, **kwargs)[source]
将 X 拟合到嵌入空间中。
可选地使用 y 进行监督维度约减。
- 参数:
- X数组, 形状 (n_samples, n_features) 或 (n_samples, n_samples)
如果 metric 是 ‘precomputed’,X 必须是方阵距离矩阵。否则,它包含每行一个样本。如果 method 是 ‘exact’,X 可以是类型为 ‘csr’、‘csc’ 或 ‘coo’ 的稀疏矩阵。
- y数组, 形状 (n_samples)
用于监督维度约减的目标数组。如何处理此数组由 UMAP 实例化时的参数决定。相关的属性是
target_metric
和target_metric_kwds
。- ensure_all_finite是否对数组中的 np.inf, np.nan, pd.NA 引发错误。
- 可能的选项有: - True: 强制数组所有值为有限数。
False: 接受数组中的 np.inf, np.nan, pd.NA。
‘allow-nan’: 只接受数组中的 np.nan 和 pd.NA 值。值不能是无穷大。
- **kwargs可选
任何额外的关键字参数都传递给 _fit_embed_data。
- fit_transform(X, y=None, ensure_all_finite=True, **kwargs)[source]
将 X 拟合到嵌入空间并返回转换后的输出。
- 参数:
- X数组, 形状 (n_samples, n_features) 或 (n_samples, n_samples)
如果 metric 是 ‘precomputed’,X 必须是方阵距离矩阵。否则,它包含每行一个样本。
- y数组, 形状 (n_samples)
用于监督维度约减的目标数组。如何处理此数组由 UMAP 实例化时的参数决定。相关的属性是
target_metric
和target_metric_kwds
。- ensure_all_finite是否对数组中的 np.inf, np.nan, pd.NA 引发错误。
- 可能的选项有: - True: 强制数组所有值为有限数。
False: 接受数组中的 np.inf, np.nan, pd.NA。
‘allow-nan’: 只接受数组中的 np.nan 和 pd.NA 值。值不能是无穷大。
- **kwargs任何额外的关键字参数都传递给 _fit_embed_data。
- 返回:
- X_new数组, 形状 (n_samples, n_components)
训练数据在低维空间中的嵌入。
- 或一个元组 (X_new, r_orig, r_emb),如果设置了
output_dens
标志, - 该元组额外包含
- r_orig: 数组, 形状 (n_samples)
原始数据空间中数据点的局部半径(对数变换后)。
- r_emb: 数组, 形状 (n_samples)
嵌入中数据点的局部半径(对数变换后)。
- inverse_transform(X)[source]
将现有嵌入空间中的 X 转换回输入数据空间并返回转换后的输出。
- 参数:
- X数组, 形状 (n_samples, n_components)
要进行逆转换的新点。
- 返回
- ——-
- X_new数组, 形状 (n_samples, n_features)
数据空间中生成的新数据点。
- set_fit_request(*, ensure_all_finite: bool | None | str = '$UNCHANGED$') UMAP
请求传递给
fit
方法的元数据。请注意,此方法仅在
enable_metadata_routing=True
时相关(参见sklearn.set_config()
)。请参阅用户指南了解路由机制的工作原理。每个参数的选项如下:
True
: 请求元数据,如果提供则传递给fit
。如果未提供元数据,则忽略该请求。False
: 不请求元数据,meta-estimator 不会将其传递给fit
。None
: 不请求元数据,如果用户提供元数据,meta-estimator 将引发错误。str
: 应将元数据以给定的别名而不是原始名称传递给 meta-estimator。
默认值 (
sklearn.utils.metadata_routing.UNCHANGED
) 保留现有请求。这允许您更改某些参数的请求,而不更改其他参数的请求。在 1.3 版本中添加。
注意
此方法仅在将此估计器用作 meta-estimator 的子估计器时相关,例如在
Pipeline
中使用时。否则无效。- 参数:
- ensure_all_finitestr, True, False, 或 None, 默认=sklearn.utils.metadata_routing.UNCHANGED
fit
方法中ensure_all_finite
参数的元数据路由。
- 返回:
- self对象
更新后的对象。
- set_transform_request(*, ensure_all_finite: bool | None | str = '$UNCHANGED$') UMAP
请求传递给
transform
方法的元数据。请注意,此方法仅在
enable_metadata_routing=True
时相关(参见sklearn.set_config()
)。请参阅用户指南了解路由机制的工作原理。每个参数的选项如下:
True
: 请求元数据,如果提供则传递给transform
。如果未提供元数据,则忽略该请求。False
: 不请求元数据,meta-estimator 不会将其传递给transform
。None
: 不请求元数据,如果用户提供元数据,meta-estimator 将引发错误。str
: 应将元数据以给定的别名而不是原始名称传递给 meta-estimator。
默认值 (
sklearn.utils.metadata_routing.UNCHANGED
) 保留现有请求。这允许您更改某些参数的请求,而不更改其他参数的请求。在 1.3 版本中添加。
注意
此方法仅在将此估计器用作 meta-estimator 的子估计器时相关,例如在
Pipeline
中使用时。否则无效。- 参数:
- ensure_all_finitestr, True, False, 或 None, 默认=sklearn.utils.metadata_routing.UNCHANGED
transform
方法中ensure_all_finite
参数的元数据路由。
- 返回:
- self对象
更新后的对象。
- transform(X, ensure_all_finite=True)[source]
将 X 转换到现有嵌入空间并返回转换后的输出。
- 参数:
- X数组, 形状 (n_samples, n_features)
要转换的新数据。
- ensure_all_finite是否对数组中的 np.inf, np.nan, pd.NA 引发错误。
- 可能的选项有: - True: 强制数组所有值为有限数。
False: 接受数组中的 np.inf, np.nan, pd.NA。
‘allow-nan’: 只接受数组中的 np.nan 和 pd.NA 值。值不能是无穷大。
- 返回:
- X_new数组, 形状 (n_samples, n_components)
新数据在低维空间中的嵌入。
ParametricUMAP
一些内部函数也可以单独访问,以便进行更精细的调整工作。
有用函数
- umap.umap_.compute_membership_strengths(knn_indices, knn_dists, sigmas, rhos, return_dists=False, bipartite=False)[source]
构造每个局部模糊单纯集 1-骨架的成员强度数据——这形成一个稀疏矩阵,其中每行是一个局部模糊单纯集,表示 1-单纯形到每个其他数据点的成员强度。
- 参数:
- knn_indices: 数组, 形状 (n_samples, n_neighbors)
数据集中
n_neighbors
个最近点的索引。- knn_dists: 数组, 形状 (n_samples, n_neighbors)
数据集中
n_neighbors
个最近点的距离。- sigmas: 数组, 形状(n_samples)
从度量张量近似导出的归一化因子。
- rhos: 数组, 形状(n_samples)
局部连通性调整。
- return_dists: bool (可选, 默认 False)
是否返回与每条边相关的成对距离。
- bipartite: bool (可选, 默认 False)
最近邻集合是否表示一个二分图?也就是说,最近邻索引是否与行索引来自相同的点集?
- 返回:
- rows: 数组, 形状 (n_samples * n_neighbors)
结果稀疏矩阵(coo 格式)的行数据
- cols: 数组, 形状 (n_samples * n_neighbors)
结果稀疏矩阵(coo 格式)的列数据
- vals: 数组, 形状 (n_samples * n_neighbors)
结果稀疏矩阵(coo 格式)的条目
- dists: 数组, 形状 (n_samples * n_neighbors)
结果稀疏矩阵中每个条目关联的距离
- umap.umap_.discrete_metric_simplicial_set_intersection(simplicial_set, discrete_space, unknown_dist=1.0, far_dist=5.0, metric=None, metric_kws={}, metric_scale=1.0)[source]
将一个模糊单纯集与另一个使用离散距离从离散度量数据生成的模糊单纯集结合。目标数据假定为分类标签数据(一个标签向量),这将更新模糊单纯集以遵循该标签数据。
TODO: 可选的基于类别基数的距离加权
- 参数:
- simplicial_set: 稀疏矩阵
输入的模糊单纯集。
- discrete_space: 数组, 形状 (n_samples)
在交集中使用的分类标签。
- unknown_dist: float (可选, 默认 1.0)
未知标签 (-1) 与任何点之间的假定距离。
- far_dist: float (可选, 默认 5.0)
不匹配标签之间的距离。
- metric: str (可选, 默认 None)
如果不是 None,则使用此度量确定值之间的距离。
- metric_scale: float (可选, 默认 1.0)
如果使用自定义度量,则按此值缩放距离值——这控制着交集的权重。值越大,越偏重目标。
- 返回:
- simplicial_set: 稀疏矩阵
结果相交的模糊单纯集。
- umap.umap_.fast_intersection(rows, cols, values, target, unknown_dist=1.0, far_dist=5.0)[source]
在相交单纯集使用分类距离的假设下,执行快速交集。
- 参数:
- rows: 数组
稀疏矩阵表示中每个非零元素的行数组。
- cols: 数组
稀疏矩阵表示中每个非零元素的列数组。
- values: 数组
稀疏矩阵表示中每个非零元素的值数组。
- target: 数组, 形状 (n_samples)
在交集中使用的分类标签。
- unknown_dist: float (可选, 默认 1.0)
未知标签 (-1) 与任何点之间的假定距离。
- far_dist float (可选, 默认 5.0)
不匹配标签之间的距离。
- 返回:
- 无
- umap.umap_.fast_metric_intersection(rows, cols, values, discrete_space, metric, metric_args, scale)[source]
在相交单纯集使用分类距离的假设下,执行快速交集。
- 参数:
- rows: 数组
稀疏矩阵表示中每个非零元素的行数组。
- cols: 数组
稀疏矩阵表示中每个非零元素的列数组。
- values: 数组, 形状
稀疏矩阵表示中每个非零元素的值数组。
- discrete_space: 数组, 形状 (n_samples, n_features)
在交集中使用的分类标签向量。
- metric: numba 函数
用于计算目标数组距离的函数。
- scale: float
应用于度量的缩放。
- 返回:
- 无
- umap.umap_.find_ab_params(spread, min_dist)[source]
拟合用于低维模糊单纯复形构建中的可微分曲线的 a, b 参数。我们想要一个平滑曲线(来自一个具有简单梯度的预定义族),它最好地匹配一个偏移指数衰减。
- umap.umap_.fuzzy_simplicial_set(X, n_neighbors, random_state, metric, metric_kwds={}, knn_indices=None, knn_dists=None, angular=False, set_op_mix_ratio=1.0, local_connectivity=1.0, apply_set_operations=True, verbose=False, return_dists=None)[source]
给定数据集 X、邻域大小和距离度量,计算与数据关联的模糊单纯集(此处表示为稀疏矩阵形式的模糊图)。这是通过在每个点局部逼近测地线距离,为每个点创建一个模糊单纯集,然后通过模糊并集将所有局部模糊单纯集组合成一个全局单纯集来完成的。
- 参数:
- X: 数组, 形状 (n_samples, n_features)
要建模为模糊单纯集的数据。
- n_neighbors: int
用于近似测地线距离的邻居数量。较大的数量可以得到更全局的流形估计,可能会错过更精细的细节,而较小的值将侧重于精细的流形结构,但会牺牲整体情况。
- random_state: numpy RandomState 或等效对象
可作为 numpy 随机状态使用的对象。
- metric: string 或 function (可选, 默认 ‘euclidean’)
用于计算高维空间中距离的度量。如果传入字符串,它必须与有效的预定义度量匹配。如果需要通用度量,可以提供一个接受两个 1d 数组并返回 float 的函数。为了性能考虑,此函数必须是 numba jit 编译的函数。有效的字符串度量包括:
euclidean (或 l2)
manhattan (或 l1)
cityblock
braycurtis
canberra
chebyshev
correlation
cosine
dice
hamming
jaccard
kulsinski
ll_dirichlet
mahalanobis
matching
minkowski
rogerstanimoto
russellrao
seuclidean
sokalmichener
sokalsneath
sqeuclidean
yule
wminkowski
需要参数的度量(如 minkowski, mahalanobis 等)可以通过 metric_kwds 字典传递参数。目前需要注意并正确排序字典元素;希望未来能够解决此问题。
- metric_kwds: dict (可选, 默认 {})
传递给度量的参数,例如 Minkowski 距离的
p
值。- knn_indices: 数组, 形状 (n_samples, n_neighbors) (可选)
如果已经计算了每个点的 k 最近邻,您可以在此处传入它们以节省计算时间。这应该是一个数组,每行包含每个数据点的 k 最近邻索引。
- knn_dists: 数组, 形状 (n_samples, n_neighbors) (可选)
如果已经计算了每个点的 k 最近邻,您可以在此处传入它们以节省计算时间。这应该是一个数组,每行包含每个数据点的 k 最近邻距离。
- angular: bool (可选, 默认 False)
是否对随机投影森林使用角/余弦距离,以便为 NN-descent 设置种子,从而确定近似最近邻。
- set_op_mix_ratio: float (可选, 默认 1.0)
在用于组合局部模糊单纯集以获得全局模糊单纯集的集合操作中,在(模糊)并集和交集之间进行插值。两种模糊集合操作都使用乘积 t-范数。此参数的值应在 0.0 到 1.0 之间;值为 1.0 将使用纯模糊并集,而 0.0 将使用纯模糊交集。
- local_connectivity: int (可选, 默认 1)
所需的局部连通性——即在局部层面应假定连接的最近邻数量。该值越高,流形在局部越连通。实际上,该值不应超过流形的局部内在维度。
- verbose: bool (可选, 默认 False)
是否报告算法当前进度的信息。
- return_dists: bool 或 None (可选, 默认 None)
是否返回与每条边相关的成对距离。
- 返回:
- fuzzy_simplicial_set: coo_matrix
表示为稀疏矩阵的模糊单纯集。矩阵的 (i, j) 条目表示第 i 个和第 j 个样本点之间的 1-单纯形的成员强度。
- umap.umap_.init_graph_transform(graph, embedding)[source]
给定一个二分图,表示新点与原始数据集之间的 1-单纯形和强度,以及原始点的嵌入,初始化新点相对于强度(其在源数据中的邻居的强度)的位置。
如果一个点在我们的原始数据集中,它将嵌入到原始点的坐标处。如果一个点在我们的原始数据集中没有邻居,它将嵌入为 np.nan 向量。否则,一个点是其邻居嵌入位置的加权平均值。
- 参数:
- graph: csr_matrix (n_new_samples, n_samples)
表示 1-单纯形及其相关强度的矩阵。这些强度应该是介于零和一之间的值,且未归一化。一表示新点与我们的原始点之一相同。
- embedding: 数组, 形状 (n_samples, dim)
源数据的原始嵌入。
- 返回:
- new_embedding: 数组, 形状 (n_new_samples, dim)
新样本点的初始嵌入。
- umap.umap_.init_transform(indices, weights, embedding)[source]
给定索引和权重以及原始嵌入,初始化新点相对于索引和权重(其在源数据中的邻居的索引和权重)的位置。
- 参数:
- indices: 数组, 形状 (n_new_samples, n_neighbors)
每个新样本的邻居索引
- weights: 数组, 形状 (n_new_samples, n_neighbors)
每个新样本关联 1-单纯形的成员强度。
- embedding: 数组, 形状 (n_samples, dim)
源数据的原始嵌入。
- 返回:
- new_embedding: 数组, 形状 (n_new_samples, dim)
新样本点的初始嵌入。
- umap.umap_.make_epochs_per_sample(weights, n_epochs)[source]
给定一组权重和训练轮数,生成每个权重的每样本训练轮数。
- 参数:
- weights: 数组, 形状 (n_1_simplices)
我们希望采样每个 1-单纯形的权重。
- n_epochs: int
我们希望训练的总轮数。
- 返回:
- 每样本训练轮数的数组,每个 1-单纯形一个。
- umap.umap_.nearest_neighbors(X, n_neighbors, metric, metric_kwds, angular, random_state, low_memory=True, use_pynndescent=True, n_jobs=-1, verbose=False)[source]
在
metric
下,计算X
中每个数据点的n_neighbors
个最近点。这可能是精确计算,但更可能通过最近邻下降法进行近似。- 参数:
- X: 数组, 形状 (n_samples, n_features)
要计算其 k 邻居图的输入数据。
- n_neighbors: int
为
X
中每个样本计算的最近邻数量。- metric: string 或 callable
用于计算的度量。
- metric_kwds: dict
传递给度量计算函数的任何参数。
- angular: bool
在 NN 近似中是否使用角 rp 树。
- random_state: np.random 状态
用于近似 NN 计算的随机状态。
- low_memory: bool (可选, 默认 True)
是否追求更低内存的 NN下降。
- verbose: bool (可选, 默认 False)
计算过程中是否打印状态数据。
- 返回:
- knn_indices: 数组, 形状 (n_samples, n_neighbors)
数据集中
n_neighbors
个最近点的索引。- knn_dists: 数组, 形状 (n_samples, n_neighbors)
数据集中
n_neighbors
个最近点的距离。- rp_forest: 树列表
用于搜索的随机投影森林(如果使用,否则为 None)。
- umap.umap_.raise_disconnected_warning(edges_removed, vertices_disconnected, disconnection_distance, total_rows, threshold=0.1, verbose=False)[source]
一个简单的包装函数,用于避免大量代码重复。
- umap.umap_.reset_local_connectivity(simplicial_set, reset_local_metric=False)[source]
重置局部连通性要求——每个数据样本在单纯集中应至少对一个 1-单纯形具有完全置信度。我们可以通过局部重新缩放置信度,然后重新合并不同的局部单纯集来强制执行此操作。
- 参数:
- simplicial_set: 稀疏矩阵
要重新计算局部连通性的单纯集。
- 返回:
- simplicial_set: sparse_matrix
重新计算的单纯集,现已恢复局部连通性假设。
- umap.umap_.simplicial_set_embedding(data, graph, n_components, initial_alpha, a, b, gamma, negative_sample_rate, n_epochs, init, random_state, metric, metric_kwds, densmap, densmap_kwds, output_dens, output_metric=CPUDispatcher(<function euclidean_grad>), output_metric_kwds={}, euclidean_output=True, parallel=False, verbose=False, tqdm_kwds=None)[source]
执行模糊单纯集嵌入,使用指定的初始化方法,然后最小化高维和低维模糊单纯集 1-骨架之间的模糊集交叉熵。
- 参数:
- data: 数组, 形状 (n_samples, n_features)
要由 UMAP 嵌入的源数据。
- graph: 稀疏矩阵
高维模糊单纯集的 1-骨架,表示为一个图,我们需要其(加权)邻接矩阵的稀疏矩阵。
- n_components: int
将数据嵌入到的欧几里得空间的维度。
- initial_alpha: float
SGD 的初始学习率。
- a: float
右伴随函子的可微分近似参数
- b: float
右伴随函子的可微分近似参数
- gamma: float
应用于负样本的权重。
- negative_sample_rate: int (可选, 默认 5)
在优化过程中,每正样本选择的负样本数量。增加此值会导致施加更大的排斥力,更高的优化成本,但准确性略高。
- n_epochs: int (可选, 默认 0), 或 int 列表
用于优化低维嵌入的训练轮数。值越大,嵌入越准确。如果指定 0,将根据输入数据集的大小(大型数据集 200,小型数据集 500)选择一个值。如果指定 int 列表,则在
aux_data["embedding_list"]
中返回该列表中指定的不同轮数处的中间嵌入结果。- init: string
如何初始化低维嵌入。选项包括:
‘spectral’: 使用模糊 1-骨架的谱嵌入
‘random’: 随机分配初始嵌入位置。
‘pca’: 使用应用于输入数据的 PCA 的前 n_components。
初始嵌入位置的 numpy 数组。
- random_state: numpy RandomState 或等效对象
可作为 numpy 随机状态使用的对象。
- metric: string 或 callable
用于衡量高维空间距离的度量;当需要布局多个连通分量时使用。
- metric_kwds: dict
传递给度量函数的关键字参数;当需要布局多个连通分量时使用。
- densmap: bool
是否使用密度增强目标函数根据 densMAP 算法优化嵌入。
- densmap_kwds: dict
densMAP 优化使用的关键字参数。
- output_dens: bool
是否输出原始数据和嵌入中的局部半径。
- output_metric: function
返回嵌入空间中两点之间距离以及距离对第一个参数的梯度的函数。
- output_metric_kwds: dict
传递给 output_metric 函数的关键字参数。
- euclidean_output: bool
是否使用专门针对欧几里得输出度量的更快代码
- parallel: bool (可选, 默认 False)
是否使用 numba parallel 运行计算。并行运行是非确定性的,如果设置了随机种子,则不会使用并行,以确保可复现性。
- verbose: bool (可选, 默认 False)
是否报告算法当前进度的信息。
- tqdm_kwds: dict
tqdm 进度条使用的关键字参数。
- 返回:
- embedding: 数组, 形状 (n_samples, n_components)
将
graph
优化到n_components
维欧几里得空间中的结果。- aux_data: dict
随嵌入返回的辅助输出。当启用 densMAP 扩展时,此字典包含原始数据中的局部半径 (
rad_orig
) 和嵌入中的局部半径 (rad_emb
)。
- umap.umap_.smooth_knn_dist(distances, k, n_iter=64, local_connectivity=1.0, bandwidth=1.0)[source]
计算到第 k 近邻距离的连续版本。也就是说,这类似于 knn 距离,但允许连续的 k 值,而不是要求整数 k。本质上,我们只是计算一个距离,使得我们生成的模糊集的基数为 k。
- 参数:
- distances: 数组, 形状 (n_samples, n_neighbors)
每个样本到最近邻的距离。每行应该是一个排序好的列表,包含给定样本到其最近邻的距离。
- k: float
要近似的最近邻数量。
- n_iter: int (可选, 默认 64)
我们需要通过二分查找找到正确的距离值。这是此类搜索中使用的最大迭代次数。
- local_connectivity: int (可选, 默认 1)
所需的局部连通性——即在局部层面应假定连接的最近邻数量。该值越高,流形在局部越连通。实际上,该值不应超过流形的局部内在维度。
- bandwidth: float (可选, 默认 1)
核的目标带宽,值越大将产生越大的返回值。
- 返回:
- knn_dist: 数组, 形状 (n_samples,)
到第 k 近邻的距离,经过适当近似。
- nn_dist: 数组, 形状 (n_samples,)
每个点到第 1 近邻的距离。