在进行机器学习模型的开发和测试时,确保模型遵循特定的约定是非常重要的。Pytest提供了一种装饰器,使得可以轻松地为不同的估计器生成检查。这种装饰器允许通过命令行参数指定要运行的测试,从而提高了测试的灵活性和效率。
具体来说,每个检查的id被设置为估计器的pprint版本以及检查的名称和关键字参数。这使得可以通过使用pytest的-k选项来指定要运行的测试。例如,如果想要运行名为"check_estimators_fit_returns_self"的测试,可以通过以下命令来实现:
pytest test_check_estimators.py -k check_estimators_fit_returns_self
在参数化估计器检查时,需要提供一个估计器实例的列表。从版本0.24开始,传递类已经被弃用,并且对类的的支持在0.24版本中被移除。因此,应该传递实例而不是类。这个变化提高了代码的健壮性,并确保了测试的准确性。
返回值是一个装饰器,它实际上是pytest.mark.parametrize的包装。这意味着可以利用Pytest的强大功能来参数化测试。此外,还可以参考check_estimator函数,它用于检查估计器是否遵循scikit-learn的约定。
下面是一个使用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)
通过这种方式,可以确保估计器遵循scikit-learn的约定,从而提高代码的质量和可维护性。此外,通过参数化测试,可以更灵活地选择要运行的测试,从而提高了测试的效率。
最后,值得一提的是scikit-learn 0.22版本的发布亮点。这个版本带来了许多新功能和改进,包括对估计器检查的改进。通过使用这个版本的scikit-learn,可以更好地利用Pytest进行参数化估计器检查,从而确保模型遵循最佳实践。