如何使用 sklearn 向计数向量化特征添加第二个特征?
How to add a second feature to a countvectorized feature using sklearn?
我的数据集中有 3 列:
评论:产品评论
类型:类别或产品类型
成本:产品成本
这是一个多类问题,以Type为目标变量。此数据集中有 64 种不同类型的产品。
评论和成本是我的两个特征。
我已将数据分成 4 组,删除了 Type 变量:
X = data.drop('type', axis = 1)
y = data.type
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
对于评论,我使用以下方法对其进行矢量化:
vect = CountVectorizer(stop_words = stop)
X_train_dtm = vect.fit_transform(X_train.review)
这就是我被困的地方!
为了 运行 模型,我需要在训练集中同时拥有我的两个特征,但是,由于 X_train_dtm 是一个稀疏矩阵,我不确定如何连接我的 pandas series Cost 特征到那个稀疏矩阵。由于 Cost 的数据已经是数字,我认为我不需要对其进行转换,这就是为什么我没有使用像 "FeatureUnion" 这样的东西,它结合了 2 个转换特征。
如有任何帮助,我们将不胜感激!!
示例数据:
| Review | Cost | Type |
|:-----------------|------------:|:------------:|
| This is a review | 200 | Toy
| This is a review | 100 | Toy
| This is a review | 800 | Electronics
| This is a review | 35 | Home
更新
在应用 tarashypka 的解决方案后,我能够摆脱将第二个功能添加到 X_train_dtm。但是,我在尝试 运行 相同的测试集时遇到错误:
从 scipy.sparse 导入 hstack
vect = CountVectorizer(stop_words = stop)
X_train_dtm = vect.fit_transform(X_train.review)
prices = X_train.prices.values[:,None]
X_train_dtm = hstack((X_train_dtm, prices))
#Works perfectly for the training set above
#But when I run with test set I get the following error
X_test_dtm = vect.transform(X_test)
prices_test = X_test.prices.values[:,None]
X_test_dtm = hstack((X_test_dtm, prices_test))
Traceback (most recent call last):
File "<ipython-input-10-b2861d63b847>", line 8, in <module>
X_test_dtm = hstack((X_test_dtm, points_test))
File "C:\Users\k\Anaconda3\lib\site-packages\scipy\sparse\construct.py", line 464, in hstack
return bmat([blocks], format=format, dtype=dtype)
File "C:\Users\k\Anaconda3\lib\site-packages\scipy\sparse\construct.py", line 581, in bmat
'row dimensions' % i)
ValueError: blocks[0,:] has incompatible row dimensions
CountVectorizer
的结果,在您的情况下 X_train_dtm
,类型为 scipy.sparse.csr_matrix
。如果你不想将它转换为numpy数组,那么scipy.sparse.hstack
是添加另一列的方法
>> from scipy.sparse import hstack
>> prices = X_train['Cost'].values[:, None]
>> X_train_dtm = hstack((X_train_dtm, prices))
使用FeatureUnion
to hstack things for you. The example on heterogeneous data很像你的问题。
我的数据集中有 3 列:
评论:产品评论
类型:类别或产品类型
成本:产品成本
这是一个多类问题,以Type为目标变量。此数据集中有 64 种不同类型的产品。
评论和成本是我的两个特征。
我已将数据分成 4 组,删除了 Type 变量:
X = data.drop('type', axis = 1)
y = data.type
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
对于评论,我使用以下方法对其进行矢量化:
vect = CountVectorizer(stop_words = stop)
X_train_dtm = vect.fit_transform(X_train.review)
这就是我被困的地方!
为了 运行 模型,我需要在训练集中同时拥有我的两个特征,但是,由于 X_train_dtm 是一个稀疏矩阵,我不确定如何连接我的 pandas series Cost 特征到那个稀疏矩阵。由于 Cost 的数据已经是数字,我认为我不需要对其进行转换,这就是为什么我没有使用像 "FeatureUnion" 这样的东西,它结合了 2 个转换特征。
如有任何帮助,我们将不胜感激!!
示例数据:
| Review | Cost | Type |
|:-----------------|------------:|:------------:|
| This is a review | 200 | Toy
| This is a review | 100 | Toy
| This is a review | 800 | Electronics
| This is a review | 35 | Home
更新
在应用 tarashypka 的解决方案后,我能够摆脱将第二个功能添加到 X_train_dtm。但是,我在尝试 运行 相同的测试集时遇到错误:
从 scipy.sparse 导入 hstack
vect = CountVectorizer(stop_words = stop)
X_train_dtm = vect.fit_transform(X_train.review)
prices = X_train.prices.values[:,None]
X_train_dtm = hstack((X_train_dtm, prices))
#Works perfectly for the training set above
#But when I run with test set I get the following error
X_test_dtm = vect.transform(X_test)
prices_test = X_test.prices.values[:,None]
X_test_dtm = hstack((X_test_dtm, prices_test))
Traceback (most recent call last):
File "<ipython-input-10-b2861d63b847>", line 8, in <module>
X_test_dtm = hstack((X_test_dtm, points_test))
File "C:\Users\k\Anaconda3\lib\site-packages\scipy\sparse\construct.py", line 464, in hstack
return bmat([blocks], format=format, dtype=dtype)
File "C:\Users\k\Anaconda3\lib\site-packages\scipy\sparse\construct.py", line 581, in bmat
'row dimensions' % i)
ValueError: blocks[0,:] has incompatible row dimensions
CountVectorizer
的结果,在您的情况下 X_train_dtm
,类型为 scipy.sparse.csr_matrix
。如果你不想将它转换为numpy数组,那么scipy.sparse.hstack
是添加另一列的方法
>> from scipy.sparse import hstack
>> prices = X_train['Cost'].values[:, None]
>> X_train_dtm = hstack((X_train_dtm, prices))
使用FeatureUnion
to hstack things for you. The example on heterogeneous data很像你的问题。