数组输入验证指南

在进行数据分析或机器学习任务时,确保输入数据的格式和类型正确是非常重要的。本文将介绍如何对输入的数组、列表或类似结构进行验证,包括数据类型检查、数值检查、稀疏矩阵格式转换等。默认情况下,输入数据会被检查是否为非空的二维数组,并且只包含有限值。如果数组的数据类型为对象,则会尝试将其转换为浮点数,如果转换失败则会抛出异常。

参数的设置对于输入验证至关重要。例如,accept_sparse 参数可以指定允许的稀疏矩阵格式,如 'csc'、'csr' 等。如果输入的稀疏矩阵格式不被允许,它将被转换为列表中的第一个格式。accept_large_sparse 参数则决定了是否接受大型稀疏矩阵,这在处理大规模数据时非常有用。

数据类型dtype)的设置也非常灵活。如果设置为 'numeric',则会保留输入数组的数据类型,除非其为对象类型。如果 dtype 是一个类型的列表,则只有在输入数组的数据类型不在该列表中时,才会进行转换。

内存布局(order)的设置决定了数组是否需要被强制为 Fortran 或 C 风格。如果设置为 None(默认值),则在 copy=False 时不对输出数组的内存布局做任何保证;否则(copy=True),会尽可能保持输出数组的内存布局与原始数组接近。

在处理数组时,有时需要强制输出数组可写(force_writeable=True),这样可以保证返回的数组是可写的,但可能需要进行复制。如果设置为 False,则会保留输入数组的可写性。

数值检查是输入验证的一个重要方面。force_all_finite 参数(已弃用,建议使用 ensure_all_finite)决定了是否在数组中出现 np.inf、np.nan 或 pd.NA 时抛出错误。如果设置为 True,则会强制数组中的所有值都是有限值;如果设置为 False,则会接受这些值;如果设置为 'allow-nan',则只接受 np.nan 和 pd.NA 值,不接受无穷大值。

此外,还可以确保数组中的值都是非负的(ensure_non_negative=True),或者确保数组是二维的(ensure_2d=True)。如果数组的维度大于二维,allow_nd=True 允许这种情况,否则会抛出错误。

还可以设置数组的最小样本数(ensure_min_samples)和最小特征数(ensure_min_features),以确保数组在第一轴(对于二维数组来说是行)上有足够的样本,以及在二维数组中有足够的特征(列)。这些检查只有在输入数据实际上有二维或者原来是一维且 ensure_2d=True 时才会执行。

如果提供了估计器(estimator),则在警告消息中会包含估计器的名称。input_name 参数用于构造错误消息,特别是当数据有 NaN 值且不允许 NaN 时,错误消息会链接到插值器文档。

最后,输入验证的结果是转换和验证后的数组。例如,使用 sklearn.utils.validation 中的 check_array 函数,可以对输入的数组进行验证,确保其符合预期的格式和类型。

from sklearn.utils.validation import check_array X = [[1, 2, 3], [4, 5, 6]] X_checked = check_array(X) print(X_checked)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485