参数不会传递给scikit-learn GridSearchCV中的自定义估计器

时间:2019-03-28 08:08:21

标签: python scikit-learn parameter-passing gridsearchcv

我正在尝试并且无法将参数传递给scikit learning中的自定义估算器。我希望在网格搜索期间更改参数lr。 问题是lr参数没有更改...

代码示例已从here复制并更新

(原始代码对我都无效)

任何带有自定义估算器且参数不断变化的GridSearchCV的完整示例。

我使用ubuntu 0.20.2进入scikit-learn 18.10

from sklearn.model_selection import GridSearchCV
from sklearn.base import BaseEstimator, ClassifierMixin
import numpy as np

class MyClassifier(BaseEstimator, ClassifierMixin):

     def __init__(self, lr=0.1):
         # Some code
         print('lr:', lr)
         return self

     def fit(self, X, y):
         # Some code
         return self

     def predict(self, X):
         # Some code
         return X % 3

params = {
    'lr': [0.1, 0.5, 0.7]
}
gs = GridSearchCV(MyClassifier(), param_grid=params, cv=4)

x = np.arange(30)
y = np.concatenate((np.zeros(10), np.ones(10), np.ones(10) * 2))
gs.fit(x, y)

脉络菌素,马库斯

1 个答案:

答案 0 :(得分:0)

由于在构造函数中进行打印,因此无法看到lr值的变化。

如果在.fit()函数中打印,我们可以看到lr值的变化。 由于way会创建不同的估算器副本,因此会发生这种情况。请参阅here以了解创建多个副本的过程。

from sklearn.model_selection import GridSearchCV
from sklearn.base import BaseEstimator, ClassifierMixin
import numpy as np

class MyClassifier(BaseEstimator, ClassifierMixin):

    def __init__(self, lr=0):
         # Some code
        print('lr:', lr)
        self.lr = lr

    def fit(self, X, y):
         # Some code
        print('lr:', self.lr)
        return self

    def predict(self, X):
         # Some code
         return X % 3

params = {
    'lr': [0.1, 0.5, 0.7]
}
gs = GridSearchCV(MyClassifier(), param_grid=params, cv=4)

x = np.arange(30)
y = np.concatenate((np.zeros(10), np.ones(10), np.ones(10) * 2))
gs.fit(x, y)
gs.predict(x)

输出:

lr: 0
lr: 0
lr: 0
lr: 0.1
lr: 0
lr: 0.1
lr: 0
lr: 0.1
lr: 0
lr: 0.1
lr: 0
lr: 0.5
lr: 0
lr: 0.5
lr: 0
lr: 0.5
lr: 0
lr: 0.5
lr: 0
lr: 0.7
lr: 0
lr: 0.7
lr: 0
lr: 0.7
lr: 0
lr: 0.7
lr: 0
lr: 0.1