Кастом Трансформер в склеарне - PullRequest
0 голосов
/ 15 февраля 2019

Я строю трансформатор в 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 Ответ

0 голосов
/ 15 февраля 2019

Вы вычисляете и сохраняете эту корреляцию и столбцы, которые должны быть отброшены в 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]
...