scikit-learn新手,我正在处理以下数据。
data[0] = {"string": "some arbitrary text", "label1": "orange", "value1" : False }
data[0] = {"string": "some other arbitrary text", "label1": "red", "value1" : True }
对于单行文本,CountVectorizer
之前的管道中有DictVectorizer
和TfidfTransformer
。这些的输出可以连接起来,我希望有以下警告:任意文本我不希望在特定的,有限的和明确定义的参数上相同。
最后,还有其他一些问题,可能是相关的
另见:
答案 0 :(得分:1)
scikit-learn(*)中的所有分类器都需要样本的平面特征表示,因此您可能希望将string
特征转换为矢量。首先,让我们做一些不正确的假设:
DictVectorizer
不是用于处理“文本行”,而是用于处理任意符号功能。CountVectorizer
也不是用于处理行,而是用于整个文本文档。有两种处理此类数据的方法:
FeatureUnion
CountVectorizer
(或TfidfVectorizer
},并为其他功能构建DictVectorizer
。手动将文本数据拆分为单词,然后将每个单词用作DictVectorizer
中的一项功能,例如
{"string:some": True, "string:arbitrary": True, "string:text": True,
"label1": "orange", "value1" : False }
然后是相关问题:
由于您正在处理文本数据,因此首先尝试LinearSVC
,如果不起作用,请尝试2级多项式内核。 RBF内核与文本数据不匹配,而立方或更高阶的多内核往往会过度配合。作为内核的替代方案,您可以手动构建单个特征的产品并在其上训练LinearSVC
;有时,这比内核更好。它还消除了要素重要性问题,因为LinearSVC
学习了每个要素的权重。
如果不尝试,这是不可能的。不幸的是,scikit-learn的随机森林和dtree不处理稀疏矩阵,所以它们很难应用。 DBN未实现。
在没有看到数据的情况下无法判断。
(*)除了SVM,如果你实现自定义内核,这是一个高级主题,我现在不讨论它。