Nab*_*rsi 3 python pipeline scikit-learn
在 sklearn 管道中使用 make_column_transformer() 时,我在尝试使用 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"])
Run Code Online (Sandbox Code Playgroud)
我能够毫无问题地运行以下管道:
preprocess = make_column_transformer(
(StandardScaler(),['SPchangeHigh']),
( OneHotEncoder(),['desc-title'])
)
preprocess.fit_transform(features.head(2))
Run Code Online (Sandbox Code Playgroud)
但是,当我用CountVectorizer(tokenizer=tokenize)替换OneHotEncoder()时,它失败了:
preprocess = make_column_transformer(
(StandardScaler(),['SPchangeHigh']),
( CountVectorizer(tokenizer=tokenize),['desc-title'])
)
preprocess.fit_transform(features.head(2))
Run Code Online (Sandbox Code Playgroud)
我得到的错误是这样的:
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
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我,我将不胜感激。
删除“desc-title”周围的括号。你想要一个一维数组,而不是一个列向量。
preprocess = make_column_transformer(
(StandardScaler(),['SPchangeHigh']),
( CountVectorizer(),'desc-title')
)
preprocess.fit_transform(features.head(2))
Run Code Online (Sandbox Code Playgroud)
将列选择器指定为 'column'(作为简单字符串)和 ['column'](作为具有一个元素的列表)之间的区别在于传递给转换器的数组的形状。在第一种情况下,将传递一个一维数组,而在第二种情况下,它将是一个具有一列的二维数组,即列向量
...
请注意,一些转换器需要一维输入(面向标签的转换器),而其他一些转换器,如 OneHotEncoder 或 Imputer,需要二维输入,形状为 [n_samples, n_features]。
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |