Я хочу объединить некоторые пользовательские функции с выводом 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'
Не могли бы вы помочь мне в Эта проблема?
Большое спасибо заранее за помощь!