在使用scikit-learn框架进行机器学习开发时,经常需要创建自定义的评估器。这些评估器可以基于scikit-learn提供的基类,如BaseEstimator或其子类。开发者应该在除了fit方法之外的所有方法开始处使用check_is_fitted函数来检查评估器是否已经被拟合。如果需要自定义或加速检查过程,可以像下面的例子中那样实现__sklearn_is_fitted__方法。
下面的例子展示了一个自定义评估器的使用,这个评估器继承了scikit-learn的BaseEstimator和ClassifierMixin类,并展示了如何使用__sklearn_is_fitted__方法和check_is_fitted实用函数。__sklearn_is_fitted__方法通过检查_is_fitted属性的存在来检查评估器的拟合状态。
from sklearn.base import BaseEstimator, ClassifierMixin
from sklearn.utils.validation import check_is_fitted
class CustomEstimator(BaseEstimator, ClassifierMixin):
def __init__(self, parameter=1):
self.parameter = parameter
def fit(self, X, y):
"""
将评估器拟合到训练数据。
"""
self.classes_ = sorted(set(y))
# 自定义属性,用于跟踪评估器是否已经被拟合
self._is_fitted = True
return self
def predict(self, X):
"""
进行预测。
如果评估器尚未被拟合,则抛出NotFittedError。
"""
check_is_fitted(self)
# 执行预测逻辑
predictions = [self.classes_[0]] * len(X)
return predictions
def score(self, X, y):
"""
计算分数。
如果评估器尚未被拟合,则抛出NotFittedError。
"""
check_is_fitted(self)
# 执行评分逻辑
return 0.5
def __sklearn_is_fitted__(self):
"""
检查拟合状态并返回布尔值。
"""
return hasattr(self, "_is_fitted") and self._is_fitted
这个自定义评估器类CustomEstimator展示了如何使用__sklearn_is_fitted__方法和check_is_fitted实用函数。在fit方法中,设置了评估器的classes_属性,并标记评估器为已拟合。在predict和score方法中,使用check_is_fitted函数来确保评估器在执行预测或评分之前已经被拟合。
__sklearn_is_fitted__方法是一个特殊的方法,它允许scikit-learn框架检查评估器是否已经被拟合。这个方法通过检查评估器对象是否有_is_fitted属性来工作。如果评估器已经被拟合,这个方法将返回True,否则返回False。
以下是一些使用自定义评估器的示例: