我必须使用支持向量机对一些文本进行分类。在我的火车文件中,我有 5 个不同的类别。我必须首先使用"单词袋"功能进行分类,然后使用 SVD 功能保留总方差的 90%。
我正在使用python和sklearn,但我不知道如何创建上述SVD功能。
我的训练集用制表符 (\t( 分隔,我的文本在"内容"列中,类别在"类别"列中。
tf-idf/PCA/SVM 工作流的高级步骤如下:
加载数据(在您的情况下会有所不同(:
from sklearn.datasets import fetch_20newsgroups
categories = ['alt.atheism', 'soc.religion.christian']
newsgroups_train = fetch_20newsgroups(subset='train', categories=categories)
train_text = newsgroups_train.data
y = newsgroups_train.target
预处理特征和训练分类器:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import PCA
from sklearn.svm import SVC
vectorizer = TfidfVectorizer()
X_tfidf = vectorizer.fit_transform(train_text)
pca = PCA(.8)
X = pca.fit_transform(X_tfidf.todense())
clf = SVC(kernel="linear")
clf.fit(X,y)
最后,对数据集执行相同的预处理步骤test
并进行预测。
附言
如果您愿意,您可以将预处理步骤组合成Pipeline
:
from sklearn.preprocessing import FunctionTransformer
from sklearn.pipeline import Pipeline
preproc = Pipeline([('tfidf',TfidfVectorizer())
,('todense', FunctionTransformer(lambda x: x.todense(), validate=False))
,('pca', PCA(.9))])
X = preproc.fit_transform(train_text)
并在以后使用它来处理测试数据。