在机器学习领域,确保评估器与scikit-learn框架的API兼容是非常重要的。这可以通过使用pytest的参数化装饰器来实现。参数化装饰器允许为不同的评估器生成一系列的检查,以确保它们遵循scikit-learn的约定。这些检查可以分为几个类别,包括API兼容性检查、遗留检查等。
API兼容性检查是一组确保评估器与scikit-learn的API兼容的检查。这些检查是scikit-learn评估器的一个要求,详细信息可以参考。遗留检查是一组将逐渐被归入其他类别的检查。每个检查的id被设置为评估器的pprint版本以及检查的名称和关键字参数,这允许使用pytest的-k选项来指定要运行的测试。
例如,可以使用以下命令来运行特定的测试:pytest test_check_estimators.py -k check_estimators_fit_returns_self。在参数化装饰器中,可以指定一个评估器实例列表,这些实例将用于生成检查。从版本0.24开始,传递类已被弃用,并且在0.24版本中移除了对类的支持。因此,应该传递实例而不是类。
此外,还可以指定一个名为legacy的布尔参数,默认值为True,以决定是否包含遗留检查。随着时间的推移,将从这个类别中移除检查,并将它们移动到它们特定的类别中。返回值是一个装饰器,即pytest.mark.parametrize,它允许为测试函数提供参数。
下面是一个使用parametrize_with_checks装饰器的示例代码:
from sklearn.utils.estimator_checks import parametrize_with_checks
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeRegressor
@parametrize_with_checks([
LogisticRegression(),
# ...其他评估器实例
DecisionTreeRegressor()
])
def test_sklearn_compatible_estimator(estimator, check):
# 执行检查
check(estimator)