开发人员实用工具#
scikit-learn 包含许多用于协助开发的实用工具。这些工具位于 sklearn.utils 中,涵盖多个类别。以下所有函数和类都位于 sklearn.utils 模块中。
警告
这些实用工具旨在在 scikit-learn 包内部使用。它们不保证在 scikit-learn 的不同版本之间保持稳定。特别是,随着 scikit-learn 依赖项的发展,反向移植将会被移除。
验证工具#
这些工具用于检查和验证输入。当你编写接受数组、矩阵或稀疏矩阵作为参数的函数时,应在适用的情况下使用以下工具。
assert_all_finite:如果数组包含 NaN 或 Inf,则抛出错误。as_float_array:将输入转换为浮点数数组。如果传入稀疏矩阵,则返回稀疏矩阵。check_array:检查输入是否为 2D 数组,如果为稀疏矩阵则抛出错误。可以可选地指定允许的稀疏矩阵格式,以及是否允许 1D 或 N 维数组。默认调用assert_all_finite。check_X_y:检查 X 和 y 长度一致,对 X 调用 check_array,对 y 调用 column_or_1d。对于多标签分类或多目标回归,请指定 multi_output=True,在这种情况下将对 y 调用 check_array。indexable:检查所有输入数组是否具有一致长度,并且可以使用 safe_index 进行切片或索引。这用于验证交叉验证的输入。validation.check_memory检查输入是否为joblib.Memory-like,这意味着它可以转换为sklearn.utils.Memory实例(通常是表示cachedir的字符串)或具有相同的接口。
如果你的代码依赖于随机数生成器,则不应使用诸如 numpy.random.random 或 numpy.random.normal 的函数。这种方法可能导致单元测试中的可重复性问题。相反,应使用 numpy.random.RandomState 对象,该对象是通过传递给类或函数的 random_state 参数构建的。然后可以使用下面的函数 check_random_state 来创建随机数生成器对象。
check_random_state:根据参数random_state创建np.random.RandomState对象。如果
random_state为None或np.random,则返回一个随机初始化的RandomState对象。如果
random_state是一个整数,则用于为新的RandomState对象设置种子。如果
random_state是一个RandomState对象,则直接传递它。
例如
>>> from sklearn.utils import check_random_state
>>> random_state = 0
>>> random_state = check_random_state(random_state)
>>> random_state.rand(4)
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318])
在开发自己的 scikit-learn 兼容估计器时,可以使用以下帮助函数。
validation.check_is_fitted:检查估计器是否已拟合,然后再调用transform、predict或类似方法。这个帮助函数允许在估计器之间引发标准化的错误消息。validation.has_fit_parameter:检查给定的参数是否在给定估计器的fit方法中受支持。
高效线性代数与数组操作#
extmath.randomized_range_finder:构造一个正交矩阵,其范围近似于输入的范围。这在下面的extmath.randomized_svd中使用。extmath.randomized_svd:计算 k-截断随机 SVD。该算法使用随机化来加速计算,以找到精确的截断奇异值分解。它对于大型矩阵且只需要提取少量分量的情况特别快。arrayfuncs.cholesky_delete:(用于lars_path)从 Cholesky 分解中删除一个项。arrayfuncs.min_pos:(用于sklearn.linear_model.least_angle)查找数组中正值的最小值。extmath.fast_logdet:高效计算矩阵的对数行列式。extmath.density:高效计算稀疏向量的密度。extmath.safe_sparse_dot:点积,可正确处理scipy.sparse输入。如果输入是密集矩阵,则等同于numpy.dot。extmath.weighted_mode:scipy.stats.mode的扩展,允许每个项具有实数值的权重。
高效随机抽样#
random.sample_without_replacement:实现高效算法,用于从大小为n_population的总体中不重复地抽取n_samples个整数。
稀疏矩阵的高效例程#
sklearn.utils.sparsefuncs cython 模块包含编译扩展,用于高效处理 scipy.sparse 数据。
sparsefuncs.mean_variance_axis:计算 CSR 矩阵沿指定轴的均值和方差。用于在KMeans中归一化容忍度停止准则。sparsefuncs_fast.inplace_csr_row_normalize_l1和sparsefuncs_fast.inplace_csr_row_normalize_l2:可用于将单个稀疏样本归一化为单位 L1 或 L2 范数,如Normalizer中所示。sparsefuncs.inplace_csr_column_scale:可用于将 CSR 矩阵的列乘以一个常数比例因子(每列一个比例因子)。用于在StandardScaler中将特征缩放到单位标准差。sort_graph_by_row_values:可用于对 CSR 稀疏矩阵进行排序,使得每行都按递增值存储。这在使用依赖于最近邻图的估计器中预计算稀疏距离矩阵时非常有用,可以提高效率。
图例程#
graph.single_source_shortest_path_length:(目前未在 scikit-learn 中使用)返回从单个源到图上所有连接节点的最短路径长度。代码改编自 networkx。如果再次需要此功能,使用graph_shortest_path中的一次 Dijkstra 算法迭代会快得多。
测试函数#
discovery.all_estimators:返回 scikit-learn 中所有估计器的列表,用于测试一致的行为和接口。discovery.all_displays:返回 scikit-learn 中所有显示器(与绘图 API 相关)的列表,用于测试一致的行为和接口。discovery.all_functions:返回 scikit-learn 中所有函数的列表,用于测试一致的行为和接口。
多类和多标签实用函数#
multiclass.is_multilabel:帮助函数,用于检查任务是否为多标签分类。multiclass.unique_labels:帮助函数,用于从不同格式的目标中提取有序的唯一标签数组。
帮助函数#
gen_even_slices:生成器,用于创建多达n的n包切片。用于dict_learning和k_means。gen_batches:生成器,用于创建包含从 0 到n的批次大小元素的切片。safe_mask:帮助函数,用于将掩码转换为 numpy 数组或 scipy 稀疏矩阵期望的格式(稀疏矩阵仅支持整数索引,而 numpy 数组支持布尔掩码和整数索引)。safe_sqr:帮助函数,用于统一对类似数组、矩阵和稀疏矩阵进行平方 (**2)。
哈希函数#
murmurhash3_32提供了MurmurHash3_x86_32C++ 非加密哈希函数的 Python 包装器。此哈希函数适用于实现查找表、Bloom 过滤器、Count Min Sketch、特征哈希和隐式定义的稀疏随机投影。>>> from sklearn.utils import murmurhash3_32 >>> murmurhash3_32("some feature", seed=0) == -384616559 True >>> murmurhash3_32("some feature", seed=0, positive=True) == 3910350737 True
sklearn.utils.murmurhash模块也可以从其他 cython 模块“cimport”,从而受益于 MurmurHash 的高性能,同时避免 Python 解释器的开销。
警告和异常#
deprecated:用于将函数或类标记为已弃用的装饰器。ConvergenceWarning:自定义警告,用于捕获收敛问题。用于sklearn.covariance.graphical_lasso。