ValueError: Размер входного массива не подходит для CountVectorizer () - PullRequest
1 голос
/ 24 мая 2019

При использовании make_column_transformer () в конвейере sklearn я обнаружил ошибку при попытке использовать CountVectorizer.

Мой DataFrame имеет два столбца, 'desc-title' и 'SPchangeHigh'. Вот фрагмент из двух строк:

features = pd.DataFrame([["T. Rowe Price sells most of its Tesla shares", .002152],
                         ["Gannett to retain all seats in MNG proxy fight", 0.002152]],
                        columns=["desc-title", "SPchangeHigh"])

Я могу запустить следующий конвейер без проблем:

preprocess = make_column_transformer(
    (StandardScaler(),['SPchangeHigh']),
    ( OneHotEncoder(),['desc-title'])
)
preprocess.fit_transform(features.head(2)) 

однако, когда я заменяю OneHotEncoder () на CountVectorizer (tokenizer = tokenize) , происходит сбой:

preprocess = make_column_transformer(
    (StandardScaler(),['SPchangeHigh']),
    ( CountVectorizer(tokenizer=tokenize),['desc-title'])
)
preprocess.fit_transform(features.head(2))

и ошибка, которую я получаю, такова:


ValueError                                Traceback (most recent call last)
<ipython-input-71-d77f136b9586> in <module>()
      3     ( CountVectorizer(tokenizer=tokenize),['desc-title'])
      4 )
----> 5 preprocess.fit_transform(features.head(2))

C:\anaconda3\lib\site-packages\sklearn\compose\_column_transformer.py in fit_transform(self, X, y)
    488         self._validate_output(Xs)
    489 
--> 490         return self._hstack(list(Xs))
    491 
    492     def transform(self, X):

C:\anaconda3\lib\site-packages\sklearn\compose\_column_transformer.py in _hstack(self, Xs)
    545         else:
    546             Xs = [f.toarray() if sparse.issparse(f) else f for f in Xs]
--> 547             return np.hstack(Xs)
    548 
    549 

C:\anaconda3\lib\site-packages\numpy\core\shape_base.py in hstack(tup)
    338         return _nx.concatenate(arrs, 0)
    339     else:
--> 340         return _nx.concatenate(arrs, 1)
    341 
    342 

ValueError: all the input array dimensions except for the concatenation axis must match exactly

Я ценю, если кто-нибудь может мне помочь.

1 Ответ

0 голосов
/ 25 мая 2019

Снять скобки вокруг «desc-title».Вам нужен одномерный массив, а не вектор столбца.

preprocess = make_column_transformer(
    (StandardScaler(),['SPchangeHigh']),
    ( CountVectorizer(),'desc-title')
)
preprocess.fit_transform(features.head(2))

Документация Sklearn описывает эту тонкую спецификацию :

Разница между указанием столбцаселектор как 'столбец' (как простая строка) и ['столбец'] (как список с одним элементом) - это форма массива, который передается в преобразователь.В первом случае будет передан одномерный массив, а во втором случае это будет двухмерный массив с одним столбцом, то есть вектор-столбец

...

BeПомните, что некоторые преобразователи ожидают одномерный ввод (ориентированный на метки), в то время как другие, например OneHotEncoder или Imputer, ожидают двумерный ввод в форме [n_samples, n_features].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...