参数不会在 scikit-learn GridSearchCV 中自定义估计器
Parameters are not going to custom estimator in scikit-learn GridSearchCV
我正在尝试将参数传递给 scikit learn 中的自定义估算器,但失败了。我希望在网格搜索期间更改参数 lr
。
问题是 lr
参数没有改变...
代码示例是从here
复制和更新的
(原始代码对我不起作用)
GridSearchCV
任何带有自定义估算器且参数不断变化的完整工作示例,我们将不胜感激。
我在 ubuntu
18.10 使用 scikit-learn
0.20.2
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)
特维辛,马库斯
您无法看到 lr
值的变化,因为您正在构造函数内部打印。
如果我们在.fit()
函数内部打印,我们可以看到lr
值的变化。
这是因为 way the different copies of estimators are created. See 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
我正在尝试将参数传递给 scikit learn 中的自定义估算器,但失败了。我希望在网格搜索期间更改参数 lr
。
问题是 lr
参数没有改变...
代码示例是从here
复制和更新的(原始代码对我不起作用)
GridSearchCV
任何带有自定义估算器且参数不断变化的完整工作示例,我们将不胜感激。
我在 ubuntu
18.10 使用 scikit-learn
0.20.2
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)
特维辛,马库斯
您无法看到 lr
值的变化,因为您正在构造函数内部打印。
如果我们在.fit()
函数内部打印,我们可以看到lr
值的变化。
这是因为 way the different copies of estimators are created. See 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