我正在尝试用 python 进行分类。我正在对网页使用朴素贝叶斯多项式NB分类器(将数据从网络检索到文本,稍后我对此文本进行分类:网络分类)。
现在,我尝试对这些数据应用 PCA,但 python 给出了一些错误。
我的朴素贝叶斯分类代码:
from sklearn import PCA
from sklearn import RandomizedPCA
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
vectorizer = CountVectorizer()
classifer = MultinomialNB(alpha=.01)
x_train = vectorizer.fit_transform(temizdata)
classifer.fit(x_train, y_train)
这个朴素贝叶斯分类给出了输出:
>>> x_train
<43x4429 sparse matrix of type '<class 'numpy.int64'>'
with 6302 stored elements in Compressed Sparse Row format>
>>> print(x_train)
(0, 2966) 1
(0, 1974) 1
(0, 3296) 1
..
..
(42, 1629) 1
(42, 2833) 1
(42, 876) 1
比我尝试对我的数据应用 PCA (temizdata
) :
>>> v_temizdata = vectorizer.fit_transform(temizdata)
>>> pca_t = PCA.fit_transform(v_temizdata)
>>> pca_t = PCA().fit_transform(v_temizdata)
但这会引发以下错误:
raise TypeError('传递了一个稀疏矩阵,但是密集' TypeError: A
稀疏矩阵已通过,但需要密集数据。使用 X.toarray()
转换为密集 numpy 数组。
我将矩阵转换为密集矩阵或 numpy 数组。然后我尝试对新的密集矩阵进行分类,但出现错误。
我的主要目的是测试 PCA 对文本分类的效果。
转换为密集数组:
v_temizdatatodense = v_temizdata.todense()
pca_t = PCA().fit_transform(v_temizdatatodense)
最后尝试分类:
classifer.fit(pca_t,y_train)
最终分类错误:
引发 ValueError("输入 X 必须为非负数") ValueError: 输入 X
必须是非负数
一方面我的数据(temizdata
) 只放在朴素贝叶斯中,另一边temizdata
首先放入PCA(用于减少输入)然后进行分类。
__