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