在 sklearn 中对 CountVectorizer 和 OneHotEncoder 进行列变换的操作

我有一个虚拟的数据框,包含 ‘text’ 和 ‘vehicle’ 两列,我想对 ‘text’ 列使用 CountVectorizer,对 ‘vehicle’ 列使用 OneHotEncoding。

import pandas as pd from sklearn.preprocessing import OneHotEncoderfrom sklearn.compose import make_column_transformerfrom sklearn.feature_extraction.text import CountVectorizerdf  = pd.DataFrame([['how are you','car'],['good mrng have a nice day','bike'],['today is my best working day','cycle'],['hello','bike']], columns = ['text','vehicle']) 

enter image description here

preprocess = make_column_transformer((CountVectorizer(), ['text']),(OneHotEncoder(), ['vehicle']))preprocess.fit_transform(df)---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-15-d7644861c938> in <module>()----> 1 preprocess.fit_transform(df)~\AppData\Roaming\Python\Python36\site-packages\sklearn\compose\_column_transformer.py in fit_transform(self, X, y)469         self._validate_output(Xs)470 --> 471         return self._hstack(list(Xs))472 473     def transform(self, X):~\AppData\Roaming\Python\Python36\site-packages\sklearn\compose\_column_transformer.py in _hstack(self, Xs)526         else:527             Xs = [f.toarray() if sparse.issparse(f) else f for f in Xs]--> 528             return np.hstack(Xs)529 530 C:\ProgramData\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

这个错误是因为两个变换器的输出不同所导致的。

vect  = CountVectorizer()vect.fit_transform(df['text'])#op<4x14 sparse matrix of type '<class 'numpy.int64'>'with 15 stored elements in Compressed Sparse Row format>encoder = OneHotEncoder(handle_unknown='ignore')encoder.fit_transform(df['vehicle'].to_numpy().reshape(-1, 1)).toarray()#op array([[0., 1., 0.],   [1., 0., 0.],   [0., 0., 1.],   [1., 0., 0.]])

如何应用 .to_numpy().reshape(-1,1),或者是否有其他方法可以实现这个目标?


回答:

import pandas as pd from sklearn.preprocessing import OneHotEncoderfrom sklearn.compose import make_column_transformerfrom sklearn.feature_extraction.text import CountVectorizerdf  = pd.DataFrame([['how are you','car'],['good mrng have a nice day','bike'],['today is my best working day','cycle'],['hello','bike']], columns = ['text','vehicle']) 

这里有改动:

preprocess = make_column_transformer((CountVectorizer(), 'text'),(OneHotEncoder(), ['vehicle']))

不是将 ‘text’ 放在列表中传递,而是应该以字符串格式传递。我认为这更像是一种安全机制,以防止将多个列传递给一个 CountVectorizer。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注