python - sklearn 中 GridSearchCV 的自定义估计器
问题描述
我正在尝试实现自定义估算器并使用GridSearchCV
. 我还没有完全理解这一点并且遇到了一些问题(请参阅下面的更新)。
这是我的估算器,coeffs
其中包含我要优化的四个参数。v1, v2, sm
是输入数据(NumPy 数组)。
from sklearn.base import BaseEstimator, RegressorMixin
import numpy as np
class wc(BaseEstimator, RegressorMixin):
def __init__(self, verbose=False):
self.verbose = verbose
def fit(self, coeffs, v1, v2, sm):
return self
def predict(self, coeffs, v1, v2, sm):
a = coeffs[0]
b = coeffs[1]
c = coeffs[2]
d = coeffs[3]
theta = 40.0
t = np.exp(-2 * b * v2 * np.arccos(np.cos(theta * np.pi / 180)))
sigmav = a * v1 * np.cos(theta) * (1 - t ** 2)
sigmas = c + d * sm
sigma = sigmav + t ** 2 * sigmas
return sigma
wcm = wc()
现在我定义一个函数来进行网格搜索:
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import make_scorer
def wcm_params_selection(v1, v2, sm, y, nfolds):
a = np.arange(0.0, 10.0, 0.1)
b = np.arange(0.0, 10.0, 0.1)
c = np.arange(-10.0, 0, 0.1)
d = np.arange(0.0, 10.0, 0.1)
param_grid = {'a': a, 'b': b, 'c': c, 'd': d}
my_func = make_scorer(mean_squared_error, greater_is_better=False)
grid_search = GridSearchCV(wcm, param_grid, scoring=my_func, cv=nfolds)
grid_search.fit(v1=v1, v2=v2, sm=sm, y=y)
return grid_search.best_params_
跑步
v1,v2,sm = np.array([5.0]),np.array([5.0]),np.array([0.5]) # single predictor test values
y = np.array([-10]) # measurement
wcm_params_selection(v1=v1, v2=v2, sm=sm, y=y, nfolds=5)
这给了我错误信息TypeError: fit() missing 1 required positional argument: 'X'
。
更新:
我已经更新了很多代码,我想我越来越接近了。很高兴获得有关此正确性的一些反馈。a
有了一些测试数据,我似乎最终b
总是为 0。
估计器类:
class wc(BaseEstimator, RegressorMixin):
def __init__(self, a, b, c, d):
self.a = a
self.b = b
self.c = c
self.d = d
def fit(self, X, y):
X, y = check_X_y(X, y)
self.is_fitted_ = True
return self
def predict(self, X):
X = check_array(X)
check_is_fitted(self, 'is_fitted_')
v1 = X[:, 0]
v2 = X[:, 0]
sm = X[:, 1]
theta = 40.0
t = np.exp(-2 * self.b * v2 * np.arccos(np.cos(theta * np.pi / 180)))
sigmav = self.a * v1 * np.cos(theta) * (1 - np.power(t, 2))
sigmas = self.c + self.d * sm
sigma = sigmav + np.power(t, 2) * sigmas
return sigma
网格搜索功能:
def wcm_params_selection(X, y, nfolds):
a = np.arange(0.0, 5.0, 1)
b = np.arange(0.0, 10.0, 1)
c = np.arange(-35, 0, 2)
d = np.arange(15, 60, 1)
param_grid = {'a': a, 'b': b, 'c': c, 'd': d}
my_func = make_scorer(mean_squared_error, greater_is_better=False)
grid_search = GridSearchCV(wc, param_grid, scoring=my_func, cv=2)
grid_search.fit(X, y)
return grid_search.best_params_
并调整模型以预测值:
wcm_params = wcm_params_selection(X, y, 5)
wcmfit = wc(a=wcm_params['a'], b=wcm_params['b'], c=wcm_params['c'], d=wcm_params['d'])
wcmfit = wcmfit.fit(X, y)
out = wcmfit.predict(X)
score = wcmfit.score(X, y)
不幸的是,我完全迷路了,我总是收到 a 和 b 的 0,这是不正确的。任何支持将不胜感激。
解决方案
推荐阅读
- ruby-on-rails - “语法错误,意外'\n',期待'。' 或 &. 或 :: 或 '['" 与 Ruby on Rails
- snowflake-cloud-data-platform - 查询分析 - 非常高的同步率?
- node.js - Mern stack Heroku build 提供白页
- c# - 无法将数据模型添加到我的项目中。C# WPF MySQL
- javascript - 如何输出从对象到标记的所有内容?
- php - Woocommerce API。创建产品图片
- reactjs - 如何解决此 npm 安装错误?我应该更新 node-sass 还是 pyton 的问题?
- visual-studio - VS 或 IIS 如何停止从客户端访问 appsettings.json
- django-models - 错误ValueError在哪里:ModelForm没有指定模型类
- angular - 多个组件使用相同的 templateurl