SVM 在异构特征空间上的学习

4
我正在进行一些文档分类任务,目前SVM在TF*IDF特征向量上表现良好。我想加入一些不基于词频的新特征(例如文档长度),并查看这些新特征是否有助于分类性能。我有以下问题:
  1. 我可以简单地将新功能与旧词频特征拼接在一起,并在此异构特征空间上训练SVM吗?
  2. 如果不行,那么是否可以通过在每个子特征空间上训练内核并使用线性插值将它们组合起来,采用多内核学习的方式处理?(我们在scikit-learn中仍未实现MKL,对吧?)
  3. 还是应该转向那些能够处理异构特征的替代学习器,如MaxEnt和决策树?
谢谢您提前的建议!

你是否使用某种稀疏矩阵来表示你的文本?例如,你的数据集中可能有大约5千个独特的单词。每个实例是否有5千个数字来表示每个特征,还是有一个特征值映射以减少内存使用? - Steve
@steve 是的,我正在使用稀疏矩阵来表示特征空间——具体来说是scipy.sparse.coo_matrix。大约有5K个唯一单词被用作特征。 - Moses Xu
2个回答

3

使用SVM可以使用任意特征和特征组合。需要注意的是,您应该标准化您的特征,这意味着它们应该在相同的比例尺上。这将防止特征空间的意外加权。

如果这无法产生可接受的结果,则可以查看卷积核,其提供了将不同特征空间中的内核组合成单个内核的框架。但是,如果这是必要的,我会感到惊讶。


1
很好的回答@Ben。关于问题中的第3点:尝试更多的学习者总是一个好主意。在机器学习中的经验法则是从易于理解的“白盒子”学习者(如决策树)开始,然后再继续使用更高阶的学习者,如SVM、神经网络等。 - xhudik

2

1) 我可以简单地将新特征与旧的词频特征串联起来,在这个异构特征空间上训练SVM吗?

由于您标记了scikit-learn,所以是的,您可以使用FeatureUnion来将它们组合在一起。

2) 如果不行,那么通过在每个子特征空间上训练一个核并使用线性插值将它们组合起来的多核学习是否正确?(我们仍然没有在scikit-learn中实现MKL,对吧?)

线性SVM是此任务的标准模型。核方法对于现实世界的文本分类来说太慢了(除非使用类似LaSVM的训练算法,但这并未在scikit-learn中实现)。

3) 还是我应该转向处理异构特征良好的替代学习器,例如MaxEnt和决策树?

SVMs像MaxEnt / logistic回归一样处理异构特征。在这两种情况下,您必须输入经过缩放的数据,例如使用MinMaxScaler。请注意,scikit-learn的TfidfTransformer默认情况下会生成归一化向量,因此您不需要缩放其输出,只需缩放其他特征即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接