Я пытаюсь запустить Tf-Idf для одного столбца в Python и хотел бы объединить вывод с остальными столбцами во фрейме данных, чтобы передать его в классификатор. Я использовал Feature Union с гетерогенными данными, но по какой-то причине продолжаю получать ошибки. Я использую следующий код:
pipecols1=[col for col in dftrf.columns if col!='Name_x']
pipecols2=['Name_x']
class MySelector(BaseEstimator, TransformerMixin):
def __init__(self, key):
self.key = key
def fit(self, x, y=None):
return self
def transform(self, data_dict):
return data_dict[self.key]
var= Pipeline([
('var', MySelector(key=pipecols1))])
text= Pipeline([
('text', MySelector(key=pipecols2) ),
('tfidf', TfidfVectorizer())])
feats = FeatureUnion(transformer_list=[('var',var),
('text',text)],transformer_weights=
{'var':1,'text':1})
feature_processing = Pipeline([('feats', feats)])
feature_processing.fit(x,y)
Я получаю следующую ошибку:
ValueError Traceback (most recent call
last)
<ipython-input-61-b17725dbe418> in <module>
----> 1 feature_processing.fit_transform(dftrf)
~/.conda/envs/test_py3/lib/python3.6/site-packages/sklearn/pipeline.py in
fit_transform(self, X, y, **fit_params)
298 Xt, fit_params = self._fit(X, y, **fit_params)
299 if hasattr(last_step, 'fit_transform'):
--> 300 return last_step.fit_transform(Xt, y, **fit_params)
301 elif last_step is None:
302 return Xt
~/.conda/envs/test_py3/lib/python3.6/site-packages/sklearn/pipeline.py in
fit_transform(self, X, y, **fit_params)
799 self._update_transformer_list(transformers)
800 if any(sparse.issparse(f) for f in Xs):
--> 801 Xs = sparse.hstack(Xs).tocsr()
802 else:
803 Xs = np.hstack(Xs)
~/.local/lib/python3.6/site-packages/scipy/sparse/construct.py in
hstack(blocks, format, dtype)
463
464 """
--> 465 return bmat([blocks], format=format, dtype=dtype)
466
467
~/.local/lib/python3.6/site-packages/scipy/sparse/construct.py in
bmat(blocks, format, dtype)
584
exp=brow_lengths[i],
585
got=A.shape[0]))
--> 586 raise ValueError(msg)
587
588 if bcol_lengths[j] == 0:
ValueError: blocks[0,:] has incompatible row dimensions. Got
blocks[0,1].shape[0] == 1, expected 999000.
pipecols2 - мой текстовый столбец
pipecols1 - это столбцы, которые я хочу объединить без преобразования
Есть идеи?