Как совместить TfIdfvectorizer с остальными столбцами - PullRequest
1 голос
/ 10 мая 2019

Я пытаюсь запустить 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 - это столбцы, которые я хочу объединить без преобразования

Есть идеи?

...