将词袋 scikits 分类器与任意数字字段合并

2024-01-03

你会如何合并 scikits-learn分类器 http://scikit-learn.org/stable/modules/svm.html一个对词袋进行操作的词袋,一个对任意数字字段进行操作的词袋?

我知道这些在幕后基本上是相同的事情,但我很难弄清楚如何通过现有的库方法来做到这一点。例如,我的词袋分类器使用管道:

classifier = Pipeline([
    ('vectorizer', HashingVectorizer(ngram_range=(1,4), non_negative=True)),
    ('tfidf', TfidfTransformer()),
    ('clf', OneVsRestClassifier(LinearSVC())),
])
classifier.fit(['some random text','some other text', ...], [CLS_A, CLS_B, ...])

而我的其他用法是这样的:

classifier = LinearSVC()
classifier.fit([1.23, 4.23, ...], [CLS_A, CLS_B, ...])

我如何构建一个可以同时使用两组数据进行训练的 LinearSVC 分类器?例如

classifier = ?
classifier.fit([('some random text',1.23),('some other text',4.23), ...], [CLS_A, CLS_B, ...])

最简单的方法:

import scipy.sparse

tfidf = Pipeline([
    ('vectorizer', HashingVectorizer(ngram_range=(1,4), non_negative=True)),
    ('tfidf', TfidfTransformer()),
])
X_tfidf = tfidf.fit_transform(texts)

X_other = load_your_other_features()

X = scipy.sparse.hstack([X_tfidf, X_other])

clf = LinearSVC().fit(X, y)

原则性的解决方案,让您将一切都集中在一起Pipeline,将把散列、tf-idf 和其他特征提取方法包装在一些简单的转换器对象中,并将它们放入FeatureUnion,但是很难从您提供的信息中判断代码是什么样子。

(P.S.正如我在邮件列表和其他地方一直说的那样,OneVsRestClassifier(LinearSVC())是没用的。LinearSVCOvR 是开箱即用的,所以这只是拟合 OvR SVM 的一种较慢的方法。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将词袋 scikits 分类器与任意数字字段合并 的相关文章

随机推荐