支持向量机 (SVM) 的功能
Posted
技术标签:
【中文标题】支持向量机 (SVM) 的功能【英文标题】:Features for Support Vector Machine (SVM) 【发布时间】:2019-06-27 07:55:04 【问题描述】:我必须使用支持向量机对一些文本进行分类。在我的火车文件中,我有 5 个不同的类别。我必须首先使用“词袋”功能进行分类,然后使用 SVD 功能保持 90% 的总方差。
我正在使用 python 和 sklearn,但我不知道如何创建上述 SVD 功能。
我的火车组用制表符 (\t) 分隔,我的文本在“内容”列中,类别在“类别”列中。
【问题讨论】:
先执行TfidfVectorizer,然后执行PCA,并且只保留对90% 方差负责的特征。最后,SVM 在 TfidfVectorizer 中我只使用 stop_words 参数可以吗? pca怎么用? 【参考方案1】: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
数据集执行相同的预处理步骤并进行预测。
PS
如果您愿意,您可以将预处理步骤合并到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)
以后也可以用它来处理测试数据。
【讨论】:
todense() 让我的程序太慢了,我可以用 TruncatedSVD 代替吗? 您可以,但在这种情况下,您需要手动调整组件数量,而不是通过指定解释的方差百分比。 这有帮助吗?如果是这样,您可能会考虑接受并支持答案。 我仍在尝试通过使用 TruncatedSVD 使其工作,因为我还不接受答案。当我找到解决问题所需的结果时,我会接受。以上是关于支持向量机 (SVM) 的功能的主要内容,如果未能解决你的问题,请参考以下文章