我有一个类似推特(另一个微博)的数据集,包含 160 万个数据点,并试图根据其内容预测其转发数量。我提取了它的关键字并将关键字用作词袋特征。然后我得到了 120 万维特征。特征向量非常稀疏,通常一个数据点只有十维。我使用 SVR 进行回归。现在已经用了2天。我认为培训时间可能需要相当长的时间。我不知道我这样做这个任务是否正常。有什么办法或有必要优化这个问题吗?
顺便提一句。如果在这种情况下,我不使用任何内核并且机器是 32GB RAM 和 i-7 16 核。预计培训时间将是多长时间?我使用了 lib pyml。
2 回答
您需要找到适合您的问题的降维方法。
我已经解决了与您类似的问题,我发现 Information Gain 效果很好,但还有其他问题。
我发现这篇论文(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,ck 中不包含 tj 和 D 的文档数,其他类别中不包含 tj 的文档数(其中 N = A + B + C + D):
使用此列联表,可以通过以下方式估算信息增益:
这种方法很容易实现,并且提供了非常好的信息论特征缩减。
你也不需要使用单一的技术。你可以把它们结合起来。Ter-Frequency 很简单,但也很有效。我将信息增益方法与词频相结合,成功地进行了特征选择。您应该对您的数据进行试验,以了解哪种技术或哪些技术最有效。
一开始你可以简单地删除所有高频词和所有低频词,因为它们都不能告诉你太多关于文本的内容,然后你必须做一个词干。
之后,您可以尝试使用Feature hashing或一些更高级的降维技巧(PCA、ICA)或两者兼而有之来降低空间的维度。