如何处理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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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