Кастом Трансформер в склеарне
Я строю трансформатор в sklearn, который отбрасывает объекты, у которых коэффициент корреляции ниже указанного порога.
Работает на тренировочном наборе. Тем не менее, когда я преобразую тестовый набор. Все функции тестового набора исчезают. Я предполагаю, что трансформатор вычисляет корреляции между тестовыми данными и меткой обучения, и, поскольку они все низкие, он отбрасывает все функции. Как мне сделать так, чтобы он только вычислял корреляции в обучающем наборе и отбрасывал эти функции из тестового набора в преобразовании?
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]
1 ответ
Решение
Вы вычисляете и сохраняете эту корреляцию и столбцы, которые должны быть отброшены 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]