gpt4 book ai didi

python - 如何在 sklearn 中使用带有自定义估算器的 GridSearchCV?

转载 作者:太空狗 更新时间:2023-10-29 23:55:00 27 4
gpt4 key购买 nike

我有一个应该与 sklearn api 兼容的估算器。我正在尝试使用 gridsearchcv 拟合此估算器的一个参数,但我不知道该怎么做。

这是我的代码:

import numpy as np
import sklearn as sk

from sklearn.linear_model import LinearRegression, LassoLarsCV, RidgeCV
from sklearn.linear_model.base import LinearClassifierMixin, SparseCoefMixin, BaseEstimator


class ELM(BaseEstimator):

def __init__(self, n_nodes, link='rbf', output_function='lasso', n_jobs=1, c=1):
self.n_jobs = n_jobs
self.n_nodes = n_nodes
self.c = c

if link == 'rbf':
self.link = lambda z: np.exp(-z*z)
elif link == 'sig':
self.link = lambda z: 1./(1 + np.exp(-z))
elif link == 'id':
self.link = lambda z: z
else:
self.link = link

if output_function == 'lasso':
self.output_function = LassoLarsCV(cv=10, n_jobs=self.n_jobs)
elif output_function == 'lr':
self.output_function = LinearRegression(n_jobs=self.n_jobs)

elif output_function == 'ridge':
self.output_function = RidgeCV(cv=10)

else:
self.output_function = output_function

return


def H(self, x):

n, p = x.shape
xw = np.dot(x, self.w.T)
xw = xw + np.ones((n, 1)).dot(self.b.T)
return self.link(xw)

def fit(self, x, y, w=None):

n, p = x.shape
self.mean_y = y.mean()
if w == None:
self.w = np.random.uniform(-self.c, self.c, (self.n_nodes, p))
else:
self.w = w

self.b = np.random.uniform(-self.c, self.c, (self.n_nodes, 1))
self.h_train = self.H(x)
self.output_function.fit(self.h_train, y)

return self

def predict(self, x):
self.h_predict = self.H(x)
return self.output_function.predict(self.h_predict)

def get_params(self, deep=True):
return {"n_nodes": self.n_nodes,
"link": self.link,
"output_function": self.output_function,
"n_jobs": self.n_jobs,
"c": self.c}

def set_params(self, **parameters):
for parameter, value in parameters.items():
setattr(self, parameter, value)



### Fit the c parameter ###
X = np.random.normal(0, 1, (100,5))
y = X[:,1] * X[:,2] + np.random.normal(0, .1, 100)

gs = sk.grid_search.GridSearchCV(ELM(n_nodes=20, output_function='lr'),
cv=5,
param_grid={"c":np.linspace(0.0001,1,10)},
fit_params={})

#gs.fit(X, y) # Error

最佳答案

您的代码中有 2 个问题:

  1. 您没有为 GridSearchCV 指定 scoring 参数。您似乎在做回归,所以 mean_squared_error 是一个选项。

  2. 您的set_params 不会返回对对象本身的引用。您应该在 for 循环之后添加 return self

    正如 Andreas 已经提到的,您很少需要在 scikit-learn 中重新定义 set_paramsget_params。只需继承 BaseEstimator 就足够了。

关于python - 如何在 sklearn 中使用带有自定义估算器的 GridSearchCV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29393739/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com