我的数据框如下所示:
description priority CDT JDT
0 Create Help Index Fails with seemingly incorre... P3 0 0
1 Internal compiler error when compiling switch ... P3 0 1
2 Default text sizes in org.eclipse.jface.resour... P3 0 0
3 [Presentations] [ViewMgmt] Holding mouse down ... P3 0 0
4 Parsing of function declarations in stdio.h is... P2 1 0
PDE Platform Web Tools priorityLevel
0 0 0 2
1 0 0 2
2 1 0 2
3 1 0 2
4 0 0 1
我目前正在尝试训练ML算法,该算法会将'description'
中的文字与其他数字要素一起除'priority'
(丢弃)和'priorityLevel'
(真实标签) )。
这基本上是一个NLP应用程序。我遇到的问题是'description'
必须首先通过'CountVectorizer()'
函数:
X = df['description']
cv = CountVectorizer()
X = cv.fit_transform(X)
当我将其传递给训练算法时,返回的输出与数据帧的其余部分不兼容。
我需要能够将X
与矢量化后的df[['CDT', 'JDT', 'PDE', 'Platform', 'Web Tools']]
以及X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.2,random_state=101)
组合成一个变量才能进行拆分和训练:
nb = MultinomialNB()
nb.fit(X_train, y_train)
X
实质上,pipeline = Pipeline([
('bow', CountVectorizer()), # strings to token integer counts.
('classifier', MultinomialNB()),
])
应包含矢量化文本以及数值变量。到目前为止所有的努力都失败了。
我也试过通过管道:
pipeline.fit(X_train,y_train)
box-sizing: border-box
但是我收到的错误表明尺寸不相容。
有没有人知道一种更简单的方法来完成将矢量化器返回的稀疏矩阵与数值函数一起使用,以便我可以训练算法?
感谢所有帮助。
我只使用矢量化文本训练了这个算法,没有任何问题。当试图将其他功能纳入训练集时,我的问题就出现了。
答案 0 :(得分:1)
根据您的代码,您可以按CountVectorizer()
计算文字信息的单词频率。
但是当您调用这样的代码时:
X = cv.fit_transform(X)
您将获得<'scipy.sparse.csr.csr_matrix'>
类型的数据,而不是<'numpy.ndarray'>
。因此,当您进行数据融合时,可能会出现问题
您可以使用此代码获取<'numpy.ndarray'>
X = cv.fit_transform(X).toarray()
数据看起来像这样:
print X
[[1 1 0 0 1]
[1 0 0 1 1]
[1 0 1 0 1]]
print type(x)
<type 'numpy.ndarray'>