Scikit-learn工具包内部实用工具介绍

Scikit-learn是一个强大的机器学习库,它提供了许多内部实用工具来帮助开发者更高效地进行数据处理和模型训练。这些工具被封装在sklearn.utils模块中,虽然它们主要是为了库内部使用,但了解这些工具可以帮助更好地理解Scikit-learn的工作原理。需要注意的是,这些工具的API可能会随着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实例(通常是表示缓存目录的字符串)或具有相同的接口。

在代码中依赖随机数生成器时,应避免直接使用numpy.random.randomnumpy.random.normal等函数,因为这可能导致单元测试中的可重复性问题。相反,应使用numpy.random.RandomState对象,该对象基于传递给类或函数的random_state参数构建。可以使用下面的check_random_state函数创建随机数生成器对象:

from sklearn.utils import check_random_state random_state = 0 random_state = check_random_state(random_state) random_state.rand(4)

这将输出一个随机数组。

高效的线性代数和数组操作

Scikit-learn提供了一些工具来高效地执行线性代数和数组操作。例如:

  • extmath.randomized_range_finder:构建一个正交矩阵,其范围近似于输入矩阵的范围。这在extmath.randomized_svd中使用。
  • extmath.randomized_svd:计算k-截断的随机SVD。这个算法使用随机化来加速计算,特别适合在大型矩阵上提取少量组件。
  • arrayfuncs.cholesky_delete:从Cholesky分解中删除一个项。
  • arrayfuncs.min_pos:在数组中找到正数值的最小值。
  • extmath.fast_logdet:高效计算矩阵的行列式对数。
  • extmath.density:高效计算稀疏向量的密度。
  • extmath.safe_sparse_dot:点积,可以正确处理scipy.sparse输入。如果输入是密集的,则等同于numpy.dot
  • extmath.weighted_modescipy.stats.mode的扩展,允许每个项具有实数值权重。
  • resample:以一致的方式重新采样数组或稀疏矩阵。
  • shuffle:以一致的方式重新排列数组或稀疏矩阵。在k_means中使用。

高效的随机抽样

random.sample_without_replacement实现了高效的算法,用于在不替换的情况下从大小为n_population的总体中抽取n_samples个整数。

稀疏矩阵的高效例程

sklearn.utils.sparsefuncsCython模块托管了编译扩展,用于高效处理scipy.sparse数据。例如:

  • sparsefuncs.mean_variance_axis:计算CSR矩阵沿指定轴的均值和方差。用于在KMeans中归一化容忍度停止标准。
  • sparsefuncs_fast.inplace_csr_row_normalize_l1sparsefuncs_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:返回从单个源到图中所有连接节点的最短路径。代码改编自networkx。如果再次需要,使用graph_shortest_path中的单次Dijkstra算法迭代会快得多。

测试函数

Scikit-learn还提供了一些测试函数,用于检查一致的行为和接口:

  • discovery.all_estimators:返回Scikit-learn中所有估计器的列表。
  • discovery.all_displays:返回Scikit-learn中所有显示(与绘图API相关)的列表。
  • discovery.all_functions:返回Scikit-learn中所有函数的列表。

多类和多标签实用函数

Scikit-learn还提供了一些用于多类和多标签分类的实用函数,例如:

  • multiclass.is_multilabel:辅助函数,用于检查任务是否为多标签分类。
  • multiclass.unique_labels:辅助函数,用于从不同格式的目标中提取有序的唯一标签数组。

辅助函数

Scikit-learn还提供了一些辅助函数,例如:

  • gen_even_slices:生成器,用于创建n包的切片,直到n。在dict_learningk_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 murmurhash3_32("some feature", seed=0, positive=True) == 3910350737

此外,sklearn.utils.murmurhash模块也可以从其他Cython模块中“cimport”,以便在跳过Python解释器开销的同时,从MurmurHash的高性能中受益。

Scikit-learn还提供了一些警告和异常处理工具,例如:

  • deprecated:装饰器,用于标记函数或类为已弃用。
  • ConvergenceWarning:自定义警告,用于捕获收敛问题。在sklearn.covariance.graphical_lasso中使用。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485