Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中使用sklearn-own估计器的网格搜索CV_Python_Search_Grid_Knn_Imputation - Fatal编程技术网

python中使用sklearn-own估计器的网格搜索CV

python中使用sklearn-own估计器的网格搜索CV,python,search,grid,knn,imputation,Python,Search,Grid,Knn,Imputation,我试图建立我自己的估计器(回归器),并将其用于插补(KNIMPUTING)。我在使用网格搜索“GridSearchCV”时遇到问题。 你知道有什么问题吗 我的代码: class KnnImputation(BaseEstimator, RegressorMixin): def __init__(self, k=5, distance='euclidean'): self.k = k self.distance = distance def ge

我试图建立我自己的估计器(回归器),并将其用于插补(KNIMPUTING)。我在使用网格搜索“GridSearchCV”时遇到问题。 你知道有什么问题吗

我的代码:

class KnnImputation(BaseEstimator, RegressorMixin):

    def __init__(self, k=5, distance='euclidean'):
        self.k = k
        self.distance = distance

    def get_params(self, deep=False):
        return {'k': self.k, 'distance': self.distance}

    def set_params(self, **parameters):
        self.k = parameters['k']
        self.distance = parameters['distance']

    def fit(self, X, y):

        self.xTrain = X.values
        self.yTrain = y.values

        return self

    def predict(self, X):
        ........

        return yPred

# scorer:
scorer = make_scorer(mean_squared_error)

kf = KFold(n_splits=10, shuffle=False, random_state=23)
NN = KnnImputation()
gridSearchNN = GridSearchCV(NN, param_grid=params, scoring=scorer, n_jobs=1,
                            cv=kf.split(xTrain, yTrain), verbose=1)
gridSearchNN.fit(X=xTrain, y=yTrain)
我的错误:

....
  File "C:\Users\...........\dataImputation.py", line 85, in knnImputationMethod
    gridSearchNN.fit(X=xTrain, y=yTrain)
  File "C:\Users\.....\Anaconda3\lib\site-packages\sklearn\model_selection\_search.py", line 740, in fit
    self.best_estimator_.fit(X, y, **fit_params)
AttributeError: 'NoneType' object has no attribute 'fit'

sklearn.model\u selection.\u search
中的
sklearn
源代码中,我们在
fit
方法中有以下代码:

if self.refit:
    self.best_estimator_ = clone(base_estimator).set_params(
        **self.best_params_)
    refit_start_time = time.time()
    if y is not None:
        self.best_estimator_.fit(X, y, **fit_params)
这里最重要的一点是:

self.best_estimator_ = clone(base_estimator).set_params(**self.best_params_)
克隆是由
base\u estimator
对象构成的,它只是您的
knimumpution
类。然后对克隆的估计器调用实例方法
set_params()
。变量
self.best_estimator
然后指向
set_params()
的返回值

在您提供的代码中,
set_params()
方法没有
return
语句,因此它返回
None
。因此,调用
self.best\u estimator\uu.fit()
相当于
None.fit()
,这显然是行不通的。您需要通过在
set_params()
函数中返回
self
来启用方法链接

有关守则如下:

def set_params(self, **parameters):
    self.k = parameters['k']
    self.distance = parameters['distance']
    return self
TL;医生:


您需要通过返回
self

set_params
中启用方法链接。您正在问两个完全不同的问题。请编辑您的问题,将焦点放在单个技术问题上。@gmds我更改了标题,但这仍然是一个问题,所以这是一个问题。。您的问题是为什么会出现此错误,还是为什么会出现“超过60次”的打印消息?@gmds的问题是“为什么我会出现此错误?”