支持向量机 (SVM) 的功能



我必须使用支持向量机对一些文本进行分类。在我的火车文件中,我有 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)

并在以后使用它来处理测试数据。

相关内容

  • 没有找到相关文章

最新更新