簡體   English   中英

將自定義估算器與cross_val_score結合使用失敗

[英]Using custom estimator with cross_val_score fails

我正在嘗試將cross_val_score與自定義估算器一起使用。 重要的是,此估算器接收一個成員變量,該成員變量可稍后在fit函數中使用。 但似乎在cross_val_score內部,成員變量已銷毀(或正在創建估計器的新實例)。 這是可以重現該錯誤的最少代碼:

from sklearn.model_selection import cross_val_score
from sklearn.base import BaseEstimator

class MyEstimator(BaseEstimator):
    def __init__(self, member):
        self._member = member

    def fit(self, X, y):
        if self._member is None:
            raise Exception('member is None.')

X = np.array([[1, 1, 1], [2 ,2 , 2]])
y = np.array([1, 2])

score_values = cross_val_score(
            MyEstimator('some value'),
            X,
            y,
            cv=2, 
            scoring='r2'
        )

在上面的代碼中,總是引發Exception。 有辦法解決嗎?

Sklearn在內部克隆估算器,以創建估算器的多個副本。 參考 ; 使用clone功能。

from sklearn.base import clone
t = MyEstimator('some value')
t1 = clone(t)
t._member, t1._member
#
('some value', None)

克隆僅從對象復制構造函數參數值。

解:

使您的構造函數參數和對象屬性保持一致,因此從下划線開始或到處刪除下划線!

class MyEstimator(BaseEstimator):
    def __init__(self, member):
        self.member = member

    def fit(self, X, y):
        if self.member is None:
            raise Exception('member is None.')

    def predict(self, X):
        return [1]

X = np.array([[1, 1, 1], [2 ,2 , 2],[3,3,3]])
y = np.array([1, 2,3])

score_values = cross_val_score(
            MyEstimator('some value'),
            X,
            y,
            cv=3, 
            scoring='r2',error_score='raise'
        )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM