开发者工具#
Scikit-learn 包含一些帮助开发的工具。这些工具位于 sklearn.utils
中,包括多个类别的工具。以下所有函数和类都在 sklearn.utils
模块中。
Warning
这些工具旨在在 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
,这意味着它可以转换为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 范数,如在
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
-packs 切片。 用于dict_learning
和k_means
.gen_batches
: 生成器,用于从0到n
创建包含批量大小的元素的切片safe_mask
: 辅助函数,用于将掩码转换为numpy数组或scipy稀疏矩阵期望的格式(稀疏矩阵仅支持整数索引,而numpy数组支持布尔掩码和整数索引)。safe_sqr
: 用于统一平方(**2
)数组、矩阵和稀疏矩阵的辅助函数。
哈希函数#
murmurhash3_32
提供了一个Python包装器,用于MurmurHash3_x86_32
C++非加密哈希函数。此哈希函数适用于实现查找表、布隆过滤器、计数最小草图、特征哈希和隐式定义的稀疏随机投影:>>> 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模块中“cimported”,以便在跳过Python解释器开销的同时,从MurmurHash的高性能中受益。
警告和异常#
deprecated
: 用于将函数或类标记为已弃用的装饰器。ConvergenceWarning
: 自定义警告,用于捕获收敛问题。在sklearn.covariance.graphical_lasso
中使用。