Добавление функций в преобразователь Gensim LSI в Python - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу объединить некоторые пользовательские функции с выводом LsiTransformer (импортированным из gensim.sklearn_api), чтобы получить только одну матрицу проектирования X, чтобы позже я мог подогнать классификаторы в scikit-learn на Xи y как обычно.Я пытался реализовать преобразователь пользовательских функций Feature_Transformer для 2 различных частей X ((X_lsi, X_add)) следующим образом, но он не работал.

class Feature_Transformer:
    def __init__(self, lsi_transformer):
        self.lsi_transformer = lsi_transformer

    def fit(self, X, y):
        (X_lsi, X_add) = X
        self.lsi_transformer = self.lsi_transformer.fit(X_lsi)

        return self

    def transform(self, X, y):
        (X_lsi, X_add) = X
        X_lsi = self.lsi_transformer.transform(X_lsi)
        X = []
        for i in zip(X_lsi, X_add):
            X.append(list(itertools.chain(*i)))

        assert len(X) == len(X_add)
        assert len(X[0]) == (len(X_add[0]) + len(X_lsi[0]))

        self.X = X
        self.y = y

        return self.X, self.y
class LSI_Clf:
    def __init__(self):
        super().__init__()
        self.dictionary = None

    def train(self, dataset):
        # Create features
        X_lsi, X_add,  y, self.dictionary = feature_engineering(dataset)
        X = (X_lsi, X_add)

        lsi_transformer = LsiTransformer(num_topics=100, id2word=self.dictionary)
        ft = Feature_Transformer(lsi_transformer)

        clf = LogisticRegression(penalty='l2', C=0.001, solver='liblinear')
        pipe = Pipeline([('features', ft,), ('classifier', clf)])

        self.model = pipe.fit(X, y)

    def evaluate(self, dataset):

        # Evaluate
        X_lsi, X_add,  y, _ = feature_engineering(dataset, dictionary=self.dictionary)
        X = (X_lsi, X_add)
        y_pred = self.model.predict(X)

        # Compute metrics
        from sklearn import metrics
        report = metrics.classification_report(y, y_pred, output_dict=True)

        return report  

Ошибка заключается в следующем:

Файл "... / model.py", строка 58, в поезде self.model = pipe.fit (X, y)

Файл "... /.env / python3 / lib / python3.5 / site-packages / sklearn / pipeline.py ", строка 352, в формате Xt, fit_params = self._fit (X, y, ** fit_params)

File"... /. env / python3 / lib / python3.5 / site-packages / sklearn / pipeline.py ", строка 317, в _fit ** fit_params_steps [name])

Файл" ... /.env / python3 / lib / python3.5 / site-packages / joblib / memory.py ", строка 355, в call return self.func (* args, ** kwargs)

Файл "... /. Env / python3 / lib / python3.5 / site-packages / sklearn / pipeline.py", строка 718, в _fit_transform_one

res = transformer.fit (X, y,** fit_params) .transform (X)

Ошибка типа: transform () отсутствует 1 обязательный позиционный аргумент: 'y'

Не могли бы вы помочь мне в Эта проблема?

Большое спасибо заранее за помощь!

...