如何处理SVR任务中高维稀疏特征?

我有一个类似Twitter(另一个微型博客)的数据集,包含160万个数据点,我试图根据其内容预测转发数。我提取了关键词,并使用这些关键词作为词袋特征。结果我得到了120万维的特征。特征向量非常稀疏,通常一个数据点中只有十个维度。我使用SVR进行回归。现在已经花了两天时间。我认为训练时间可能会很长。我不知道这样做这个任务是否正常。是否有任何方法或有必要优化这个问题?
顺便问一下。如果在这种情况下,我不使用任何核函数,机器有32GB RAM和i-7 16核。估计训练时间会是多久?我使用的是lib pyml库。


回答:

你需要找到一种适合你问题的降维方法。

我处理过一个与你类似的问题,我发现信息增益效果很好,但也有其他方法。

我发现这篇论文(Fabrizio Sebastiani, Machine Learning in Automated Text Categorization, ACM Computing Surveys, Vol. 34, No.1, pp.1-47, 2002)对文本分类提供了很好的理论处理,包括通过从简单(词频)到复杂(信息论)的各种方法进行特征减少。

这些函数试图捕捉这样的直觉:对于ci来说,最好的术语是那些在ci的正面和负面例子集合中分布最不同的术语。然而,对这一原则的解释在不同函数中有所不同。例如,在实验科学中,χ2用于测量观察结果与根据初始假设预期的结果的差异(较低的值表示较低的依赖性)。在DR中,我们测量tk和ci的独立性。因此,χ2(tk, ci)值最低的术语tk与ci最独立;由于我们对不独立的术语感兴趣,我们选择χ2(tk, ci)值最高的术语。

这些技术帮助你选择最有助于将训练文档分成给定类别的术语;这些术语对你的问题具有最高的预测价值。

我成功地使用信息增益进行特征减少,并发现这篇论文(Entropy based feature selection for text categorization Largeron, Christine and Moulin, Christophe and Géry, Mathias – SAC – Pages 924-928 2011)是一个非常好的实践指南。

在这里,作者提出了基于熵的特征选择的一个简单公式,这对于代码实现很有用:

给定一个术语tj和一个类别ck,可以从一个列联表中计算ECCD(tj , ck)。设A为包含tj的类别中的文档数量;B,为包含tj的其他类别中的文档数量;C,为不包含tj的ck的文档数量;D,为不包含tj的其他类别中的文档数量(其中N = A + B + C + D):

enter image description here

使用这个列联表,可以通过以下方式估算信息增益:

enter image description here

这种方法易于实现,并且提供了非常好的信息论特征减少效果。

你不必只使用一种技术;你可以将它们结合起来。词频法简单,但也可能有效。我成功地将信息增益方法与词频结合起来进行特征选择。你应该用你的数据进行实验,看看哪种技术或技术组合效果最佳。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注