Python 3.x 自定义回归器:GridSearchCV表示';获取参数';从BaseSitMator继承时未实现 你好 感谢您花时间看这篇文章。

Python 3.x 自定义回归器:GridSearchCV表示';获取参数';从BaseSitMator继承时未实现 你好 感谢您花时间看这篇文章。,python-3.x,pandas,scikit-learn,scipy,signal-processing,Python 3.x,Pandas,Scikit Learn,Scipy,Signal Processing,我正在努力实现一个scikit学习API版本的这个,数据是可用的。我的自定义类复制作者的结果,但不使用GridSearchCV 本质上,他在一些光谱数据上实现偏最小二乘回归,将最佳成分数确定为产生最低MSE的成分数。我的尝试如下所示,我能够复制作者的MSE结果以进行最佳校准,下面的\uuuu init\uuu的默认参数设置为这些参数。请注意,我是从baseestimator和RegressorMixin继承的 #从github repo的博客文章中下载.csv #创建df,洗牌,然后创建'X'和

我正在努力实现一个scikit学习API版本的这个,数据是可用的。我的自定义类复制作者的结果,但不使用GridSearchCV

本质上,他在一些光谱数据上实现偏最小二乘回归,将最佳成分数确定为产生最低MSE的成分数。我的尝试如下所示,我能够复制作者的MSE结果以进行最佳校准,下面的
\uuuu init\uuu
的默认参数设置为这些参数。请注意,我是从
baseestimator
RegressorMixin
继承的

#从github repo的博客文章中下载.csv
#创建df,洗牌,然后创建'X'和'y'`
df=pd.read\u csv(“nirpyrearch/data/peach\u spectrum+brixvalues.csv”)
df=df.sample(replace=False,frac=1).copy()
y=df['Brix']。数值
X=df[[i表示列表中的i(df.列),如果i中的“wl”]].值
class Savgolps(基本估计量,回归系数):
“我的回归者”
定义初始值(self,savgol_窗口=17,savgol_多订单=2,savgol_deriv=2,pls_组件=7):
self.savgol\u窗口=savgol\u窗口
self.savgol_多序=savgol_多序
self.savgol_deriv=savgol_deriv
self.pls\u components=pls\u components
def配合(自、X、y):
#检查X和y的形状是否正确
十、 y=检查X(X,y)
self.X_ux=X
self.y_uu=y
self.X_savgol=savgol_过滤器(X,self.savgol_窗口,self.savgol_多序,self.savgol_deriv)
self.pls=pls回归(n\u组件=self.pls\u组件)。拟合(self.X\u savgol\u,self.y\u)
#返回分类器
回归自我
def预测(自我、X、应用_savgol=True):
#检查是否符合要求
#检查是否安装了(自身)
#输入验证
X=检查数组(X)
如果适用_savgol:
X=savgol_过滤器(X,self.savgol_窗口,self.savgol_多序,self.savgol_-deriv)
预测y=自我预测(X)
返回预定时间
def分数(自我、y_pred):
mse=均方误差(y_真=self.y_,y_pred=y_pred,)
返回mse
现在,我可以初始化模型,并使用
.get_params()
获取包含
\uuu init\uuu
中4个参数的dict

s\u pls=savgolps(pls\u组件=7)
请获取参数()
因此,
get_params()
似乎存在。这是有道理的,因为它是从BaseEstimator继承的。我还可以使用
fit()
方法复制作者的结果

s_pls=s_pls.fit(X=X,y=y)
y_pred=s_pls.predict(X)
#这应该是~0.6566
s_pls.得分(y_pred)
那么,为什么在下面的代码中应用GridSearchCV会产生显示的错误

parameters={'savgol_window':[3,30],'savgol_polyorder':[2,4],'savgol_deriv':[1,3],'pls_components':[2,15]}
clf=GridSearchCV(Savgolls,参数,cv=10)
clf.配合(X,y)
屈服

TypeError回溯(最近一次调用)
在里面
---->1 clf.fit(X,y.ravel())
C:\tools\Anaconda3\envs\dev_py37\u tf\lib\site packages\sklearn\model\u selection\\u search.py in fit(self、X、y、groups、**fit\u参数)
631 n_分割=cv.get_n_分割(X,y,组)
632
-->633 base_估计器=克隆(self.estimator)
634
635 parallel=parallel(n_作业=self.n_作业,verbose=self.verbose,
克隆中的C:\tools\Anaconda3\envs\dev\u py37\u tf\lib\site packages\sklearn\base.py(估计器,安全)
58“它似乎不是scikit学习估计器”
59“因为它没有实现“get_params”方法。”
--->60%(repr(估计器)、类型(估计器)))
61 klass=估计量__
62新对象参数=估计器。获取参数(深=假)
TypeError:无法克隆对象“”(类型):它似乎不是scikit学习估计器,因为它未实现“get_params”方法。

谢谢你的帮助 如果要向GridSearchCV传递一个类,则应传递一个实例:
clf=GridSearchCV(SavgolPLS(),parameters,cv=10)