Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用sklearn将第二个特征添加到计数矢量化特征?_Python_Pandas_Scikit Learn_Countvectorizer - Fatal编程技术网

Python 如何使用sklearn将第二个特征添加到计数矢量化特征?

Python 如何使用sklearn将第二个特征添加到计数矢量化特征?,python,pandas,scikit-learn,countvectorizer,Python,Pandas,Scikit Learn,Countvectorizer,我的数据集中有3列: 审查:产品审查 类型:类别或产品类型 成本:产品成本是多少 这是一个以类型为目标变量的多类问题。此数据集中有64种不同类型的产品 回顾和成本是我的两大特色 我已将数据分为4组,删除了类型变量: 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) 对于评论,我使用以下方法对其进行矢量化:

我的数据集中有3列:

审查:产品审查

类型:类别或产品类型

成本:产品成本是多少

这是一个以类型为目标变量的多类问题。此数据集中有64种不同类型的产品

回顾成本是我的两大特色

我已将数据分为4组,删除了类型变量:

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系列成本功能连接到该稀疏矩阵。由于数据已经是成本的数字,我认为我不需要对其进行转换,这就是为什么我没有使用类似“FeatureUnion”的东西,它结合了两个转换后的功能

任何帮助都将不胜感激

示例数据:

| 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
vect=countvectorier(stop\u words=stop)
X\u train\u dtm=向量拟合变换(X\u train.review)
价格=X_列价格值[:,无]
X_-train_-dtm=hstack((X_-train_-dtm,价格))
#适用于上述培训集
#但是当我使用测试集运行时,我得到以下错误
X_测试\u dtm=向量变换(X_测试)
价格检验=X检验。价格。值[:,无]
X_-test_-dtm=hstack((X_-test_-dtm,prices_-test))
回溯(最近一次呼叫最后一次):
文件“”,第8行,在
X_测试\u dtm=hstack((X_测试\u dtm,点测试))
文件“C:\Users\k\Anaconda3\lib\site packages\scipy\sparse\construct.py”,第464行,在hstack中
返回bmat([blocks],format=format,dtype=dtype)
文件“C:\Users\k\Anaconda3\lib\site packages\scipy\sparse\construct.py”,第581行,在bmat中
'行维度“%i”)
ValueError:块[0,:]的行维度不兼容

在您的案例中,
X\u train\u dtm
计数向量器的结果是
scipy.sparse.csr\u matrix
类型。如果不想将其转换为numpy数组,则可以通过
scipy.sparse.hstack
添加另一列

>> from scipy.sparse import hstack
>> prices = X_train['Cost'].values[:, None]
>> X_train_dtm = hstack((X_train_dtm, prices))

在您的例子中,
X\u train\u dtm
计数向量器的结果是类型为
scipy.sparse.csr\u matrix
。如果不想将其转换为numpy数组,则可以通过
scipy.sparse.hstack
添加另一列

>> from scipy.sparse import hstack
>> prices = X_train['Cost'].values[:, None]
>> X_train_dtm = hstack((X_train_dtm, prices))

用来为你钉东西。这个问题很像你的问题。

用来帮你解决问题。这很像你的问题。

你能上传你的数据吗?@sera我添加了一些示例数据,谢谢!你能上传你的数据吗?@sera我添加了一些示例数据,谢谢!感谢您的帮助,但我得到了以下错误:ValueError:blocks[0,:]具有不兼容的行维度,这是因为data和X_train_dtm具有不同的行数,因为第二行是拆分第一行的结果。我更新了答案,现在检查一下。谢谢!这是可行的,但是我在尝试在测试集上生成hstack时遇到了相同的块错误。我已经更新了原始问题。@NegativeCorrelation您需要调用
fit\u transform
,而不是
transform
(就像您对火车组所做的那样),因为第二个问题返回
None
。这样做仍然会导致相同的问题:ValueError:blocks[0,:]具有不兼容的行维度感谢帮助,但是我得到了以下错误:ValueError:blocks[0,:]具有不兼容的行维度,这是因为data和X_train_dtm具有不同的行数,因为第二行是拆分第一行的结果。我更新了答案,现在检查一下。谢谢!这是可行的,但是我在尝试在测试集上生成hstack时遇到了相同的块错误。我已经更新了原始问题。@NegativeCorrelation您需要调用
fit\u transform
,而不是
transform
(就像您对火车组所做的那样),因为第二个问题返回
None
。这样做仍然会导致相同的问题:ValueError:blocks[0,:]具有不兼容的行维度