python - 是否可以将 PCA 应用于任何文本分类?

标签 python scikit-learn pca naivebayes

我正在尝试使用 python 进行分类。我正在为网页使用 Naive Bayes MultinomialNB 分类器(从网络检索数据到文本,稍后我对这段文本进行分类:网络分类)。

现在,我正在尝试对这些数据应用 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

然后我尝试对我的数据 (temizdata) 应用 PCA:

>>> v_temizdata = vectorizer.fit_transform(temizdata)
>>> pca_t = PCA.fit_transform(v_temizdata)
>>> pca_t = PCA().fit_transform(v_temizdata)

但这会引发以下错误:

raise TypeError('A sparse matrix was passed, but dense ' TypeError: A sparse matrix was passed, but dense data is required. Use X.toarray() to convert to a dense numpy array.

我将矩阵转换为密集矩阵或 numpy 数组。然后我尝试对 new densematrix 进行分类,但我有错误。

我的主要目的是测试 PCA 对文本分类的影响。

转换为密集数组:

v_temizdatatodense = v_temizdata.todense()
pca_t = PCA().fit_transform(v_temizdatatodense)

最后尝试 classfy :

classifer.fit(pca_t,y_train)

最终分类错误:

raise ValueError("Input X must be non-negative") ValueError: Input X must be non-negative

一方面,我的数据 (temizdata) 仅放入朴素贝叶斯,另一方面,temizdata 首先放入 PCA(用于减少输入)而不是分类。 __

最佳答案

与其将稀疏 矩阵转换为密集(不鼓励),我会使用 scikits-learn 的 TruncatedSVD ,这是一种类似于 PCA 的降维算法(默认使用随机 SVD),适用于稀疏数据:

svd = TruncatedSVD(n_components=5, random_state=42)
data = svd.fit_transform(data) 

并且,引用 TruncatedSVD 文档:

In particular, truncated SVD works on term count/tf-idf matrices as returned by the vectorizers in sklearn.feature_extraction.text. In that context, it is known as latent semantic analysis (LSA).

这正是您的用例。

关于python - 是否可以将 PCA 应用于任何文本分类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725726/

相关文章:

python - 通过重复索引删除行

python - "Invalid shape for y"用于 Keras LSTM w/return_sequences=True(和 sklearn API)

python - 原始 xgboost(学习 API)和 sklearn XGBClassifier(Scikit-Learn API)之间的区别

center - 2D中的PCA计算原始数据中的中心点

python - 如何在 Python 或 R 中获取用于选择主成分数量的 BIC/AIC 图

python-2.7 - 使用 sklearn 进行 PCA 逆变换(白色=True)

python - paste.httpserver 并使用 HTTP/1.1 Keep-alive 减速;使用 httperf 和 ab 测试

python - 如何从 multiprocessing.queue 中的 Process 释放内存?

python - 阅读带重音的文本 - Python

python - 如何在 Keras 中实现 Sklearn Metric 作为 Metric?