sklearn 中的自定义转换器
Custom Transformer in sklearn
我正在 sklearn 中构建一个转换器,它会丢弃相关系数低于指定阈值的特征。
它适用于训练集。但是,当我转换测试集时。测试集上的所有特征都消失了。我假设 transformer 正在计算测试数据和训练标签之间的相关性,并且由于它们都很低,所以它正在丢弃所有特征。我如何让它只计算训练集上的相关性并在转换时从测试集中删除这些特征?
class CorrelatedFeatures(BaseEstimator, TransformerMixin): #Selects only features that have a correlation coefficient higher than threshold with the response label
def __init__(self, response, threshold=0.1):
self.threshold = threshold
self.response = response
def fit(self, X, y=None):
return self
def transform(self, X, y=None):
df = pd.concat([X, self.response], axis=1)
cols = df.columns[abs(df.corr()[df.columns[-1]]) > self.threshold].drop(self.response.columns)
return X[cols]
您在 fit()
中计算并存储该相关性和要删除的列,而在 transform()
中只需转换这些列。
像这样:
....
....
def fit(self, X, y=None):
df = pd.concat([X, self.response], axis=1)
self.cols = df.columns[abs(df.corr()[df.columns[-1]]) > self.threshold].drop(self.response.columns)
return self
def transform(self, X, y=None):
return X[self.cols]
我正在 sklearn 中构建一个转换器,它会丢弃相关系数低于指定阈值的特征。
它适用于训练集。但是,当我转换测试集时。测试集上的所有特征都消失了。我假设 transformer 正在计算测试数据和训练标签之间的相关性,并且由于它们都很低,所以它正在丢弃所有特征。我如何让它只计算训练集上的相关性并在转换时从测试集中删除这些特征?
class CorrelatedFeatures(BaseEstimator, TransformerMixin): #Selects only features that have a correlation coefficient higher than threshold with the response label
def __init__(self, response, threshold=0.1):
self.threshold = threshold
self.response = response
def fit(self, X, y=None):
return self
def transform(self, X, y=None):
df = pd.concat([X, self.response], axis=1)
cols = df.columns[abs(df.corr()[df.columns[-1]]) > self.threshold].drop(self.response.columns)
return X[cols]
您在 fit()
中计算并存储该相关性和要删除的列,而在 transform()
中只需转换这些列。
像这样:
....
....
def fit(self, X, y=None):
df = pd.concat([X, self.response], axis=1)
self.cols = df.columns[abs(df.corr()[df.columns[-1]]) > self.threshold].drop(self.response.columns)
return self
def transform(self, X, y=None):
return X[self.cols]