У меня есть набор данных, содержащий веб-контент. Я хочу
- Разделить контент одной веб-страницы на две части. Причина разделения заключается в том, что текст находится в разных местах страницы, и я хочу обрабатывать их отдельно.
- Я тренирую модель1, используя только функции из части 1 и обучаем модель 2, используя только функции из части 2.
- Предположим, я получил оценку от модели 1 как S1, и оценка из модели2 как S2. Я обучаю другую модель, например модель логистической регрессии, для объединения этих двух оценок в итоговую оценку S.
Я ценю ответ Дева ниже, однако, когда Я пытался сделать то же самое, но столкнулся с новыми проблемами.
У меня есть следующий код:
data = pd.DataFrame(columns = ['landingVector', 'contentVector', 'label'])
def extractLandingData(X):
return X['landingVector']
def extractContentData(X):
return X['contentVector']
svm_landing = Pipeline([
("extractLanding", FunctionTransformer(extractLandingData)),
("svmLanding", SVC(random_state=0, class_weight='balanced', kernel='linear', probability=True)),
])
svm_content = Pipeline([
("extractContent", FunctionTransformer(extractContentData)),
("svmContent", SVC(random_state=0, class_weight='balanced', kernel='linear', probability=True)),
])
stage_pipeline = FeatureUnion([
("svmForLanding", svm_landing),
("svmForContent", svm_content),
])
full_pipeline = Pipeline([
("stagePipeline", stage_pipeline),
("lr", LogisticRegression())
])
params = [
{
"stagePipeline__svmForLanding__svmLanding__C": [3,5,10],
"full_pipeline__lr__C": [1, 5, 10],
"full_pipeline__lr__penalty": ['l1', 'l2']
}
]
grid_search = GridSearchCV(full_pipeline, params, cv=3, verbose=3, return_train_score=True, n_jobs=-1)
X_train = df[['landingVector', 'contentVector']]
y_train = df['label']
grid_search.fit(X_train, y_train)
Затем я получил сообщение об ошибке:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last) in
23 stage_pipeline = FeatureUnion([
24 ("svmForLanding", svm_landing),
---> 25 ("svmForContent", svm_content),
26 ])
27
~/anaconda3/lib/python3.7/site-packages/sklearn/pipeline.py in
__init__(self, transformer_list, n_jobs, transformer_weights)
672 self.n_jobs = n_jobs
673 self.transformer_weights = transformer_weights
--> 674 self._validate_transformers()
675
676 def get_params(self, deep=True):
~/anaconda3/lib/python3.7/site-packages/sklearn/pipeline.py in
_validate_transformers(self)
716 raise TypeError("All estimators should implement fit and "
717 "transform. '%s' (type %s) doesn't" %
--> 718 (t, type(t)))
719
720 def _iter(self):
TypeError: All estimators should implement fit and transform. 'Pipeline(memory=None,
steps=[('extractLanding', FunctionTransformer(accept_sparse=False, check_inverse=True,
func=,
inv_kw_args=None, inverse_func=None, kw_args=None,
pass_y='deprecated', validate=None)), ('svmLanding', SVC(C=1.0, cache_size=200...inear', max_iter=-1, probability=True, random_state=0, shrinking=True, tol=0.001, verbose=False))])' (type ) doesn't
Подробнее здесь: https://stackoverflow.com/questions/576 ... mble-model