Python GridSearchCV是否调用管道中对象的初始值设定项?

Python GridSearchCV是否调用管道中对象的初始值设定项?,python,scikit-learn,Python,Scikit Learn,我写了一个代码来处理卡格尔的泰坦尼克号数据。我写的课程如下: class Transform(BaseEstimator,TransformerMixin): def __init__(self,select_dict={},default=False,list_of_attributes=dataset_columns, one_hot_default=True,one_hot={}): if list_of_attributes is No

我写了一个代码来处理卡格尔的泰坦尼克号数据。我写的课程如下:

class Transform(BaseEstimator,TransformerMixin):  

   def __init__(self,select_dict={},default=False,list_of_attributes=dataset_columns,
             one_hot_default=True,one_hot={}):
       if list_of_attributes is None:
            list_of_attributes=dataset_columns
       self.attributes=select_dict #Here I select which attributes to take
       self.Transformed=[]
       #if default is False(True) it changes all other attributes to
       #default that I do not select (to make things a little easy
   def transform_Name(self,X):
       #Transformation function for specific attribute
       #I made such functions for every attribute and then they append
       #The transformed series in self.Transformed
       self.Transformed.append(X); 

   def transform(self,X,y=None):
       #This function calls transform function of whose value is True in 
       #self.attributes and finally returns the DataFrame
       return pd.concat(self.Transformed_Data,axis=1)
我只展示了这个类的相关代码。 现在,我使用SKlearn的SVC类创建了一个管道

transfomer=Transform(select_dict={'PassengerId': False},default=True)
svc_grid_clf=Pipeline([
('transform',transformer),
('SVC',SVC())
])  
创建此管道后,我将使用以下参数grid创建GridSearchCV

Param=[
{
'SVC__kernel': ['rbf'],
'SVC__C': [0.1,1,1.5]
}]  
现在创建GridSearchCV对象

grid_svm=GridSearchCV(estimator=svc_grid_clf,cv=3,param_grid=Param)
#Now fitting
grid_svm.fit(X,y)   
然而,我收到一些我无法理解的错误,即

ValueError:没有要连接的对象


我认为错误是因为GridSearchCV正在调用或未调用Transformer的init函数,因此有时Transformer的select dict并没有达到应有的效果。

sklearn API要求您在任何地方传递estimator实例,而不是estimatoe类。创建sklearn兼容估计器时,只需创建一个包含参数但不包含数据的对象。实际工作应在fit/transform/中执行。。。方法


您的Transformer类似乎没有遵循这些API思想。您不应该将传递的数据存储为类的属性;Transformer.transform方法应适用于传递的X矩阵,而不是self.Transformed_数据属性。有一个关于如何编写这样的变压器的问题

“SVC”,SVC-可能是多余的括号?尝试使用“SVC”,SVC,然后像使用Transform一样在何处实例化SVC?self.Transformed\u数据从何处填充?并发布错误的完整堆栈跟踪。@CrazyElf我已经尝试了您所说的从SVC中删除,但是它无法调用它的init,因为它只是SVC类的别名。@VivekKumar我已经根据需要编辑了问题的详细信息。self.Transformed_数据由self.transform_NameSo之类的函数填充,这意味着我不应该将数据存储在类中。谢谢@Mikhail Korobov