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

标签 python classification scikit-learn

您将如何合并 scikits-learn classifier对词袋进行操作,对任意数字字段进行操作?

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

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. 正如我在 SO、邮件列表和其他地方一直说的那样,OneVsRestClassifier(LinearSVC()) 没用。LinearSVC 开箱即用 OvR,所以这只是一种较慢的拟合 OvR SVM 的方法。)

关于python - 将词袋 scikits 分类器与任意数字字段合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20106940/

相关文章:

python - igraph 不能使用 GLPK

python - 删除某些键具有空值的 JSON 对象

python - 无法在 z3py 中提取 Z3 EnumSort 的值

machine-learning - SVM 分类 - 每个类别的最小输入集数量

python - Scikit 学习,将高斯拟合到直方图

python - 删除 M X N numpy 数组中特定位置的元素

python - 如何修改 Scikit-Learn 决策树算法中的分割标准(基尼/熵)?

r - 带 Kernlab 的内核 PCA 和结肠癌数据集的分类

python - 如何在 scikit-learn (sklearn) 的 Pipeline 中应用 StandardScaler?

python - Sklearn 中的高维 DBSCAN